CSSセレクタの特異性(specificity)とは何ですか?また、それはどのように機能しますか?
ブラウザは、CSSルールの特異性に応じて、要素に表示するスタイルを決定します。ブラウザが特定の要素に一致するルールをすでに決定していると仮定します。一致するルールの中で、各ルールに対して、次の基準に基づいて4つのカンマ区切りの値a, b, c, d
で特異性が計算されます。
a
はインラインスタイルが使用されているかどうかです。プロパティ宣言が要素上のインラインスタイルである場合、a
は1、それ以外の場合は0です。b
はIDセレクタの数です。c
はクラス、属性、および擬似クラスセレクタの数です。d
はタグおよび擬似要素セレクタの数です。
結果として得られる特異性はスコアではなく、列ごとに比較できる値の行列です。セレクタを比較して最高の特異性を持つものを決定する場合、左から右に見て、各列で最高値を比較します。したがって、b
列の値は、c
列とd
列の値が何であっても、それらの値を上書きします。そのため、0,1,0,0
の特異性は0,0,10,10
の特異性よりも大きくなります。
特異性が等しい場合:最新のルールが優先されます。スタイルシート(内部または外部に関係なく)に同じルールを2回記述した場合、スタイルシートのより下にあるルールは、スタイルが適用される要素に近いため、より特異であると見なされ、適用されます。
私は、必要に応じて簡単に上書きできるように、特異性の低いCSSルールを記述します。CSS UIコンポーネントライブラリのコードを記述する場合、ライブラリのユーザーが特異性を高めるためだけに複雑すぎるCSSルールを使用したり、!important
に頼ったりすることなく、それらを上書きできるように、特異性を低く保つことが重要です。