CSSのスタイルが思った通りに効いてくれません
CSSの優先順位のルールについて説明します
CSSには優先順位のルールがある
WEBページを作るときに、CSSで指定したスタイルが思ったようにならないことがあります。
CSSには優先順位のルールがあり、ちゃんと理解していないと意図した見た目にできないです。
この記事では、CSSの優先順位のルールについて説明します。
- CSSの優先度の仕組みとルール
CSSの優先度のルール
CSSには以下の優先度のルールがあり、同じ要素の同じプロパティが複数の箇所で指定されている場合、以下のルールでスタイルが適用されます。
- 詳細度の値が大きい指定が有効になる
- 詳細度が同じなら後から読み込まれた指定が有効になる
詳細度の値が大きい指定が有効
同じ要素の同じプロパティへの指定は、詳細度の値が大きい指定が有効になります。
後から読み込まれた内容が有効
同じ要素の同じプロパティに対して、詳細度が同じ指定が複数ある場合、後で読み込まれた指定が有効になります。
詳細度について
CSSの要素の指定のしかたの詳しさを詳細度といいます。
指定方法ごとに詳細度の重みが決まっていて、詳細度の重みが一番大きな指定が有効になります。
詳細度の構成
詳細度はID、CLASS、TYPE ごとに重みの値を持つ形で構成されます。
同じ要素の同じプロパティについて、詳細度の重みの値が一番大きい指定が有効になります。
See the Pen CSS-Specificity by mik20621 (@mik20621) on CodePen.
詳細度の重みは合計される
各セレクタの詳細度の重みは合計されて、合計の値がそのセレクタの詳細度になります。
詳細度の重みの合計値が一番大きなセレクタの指定が有効になります。
See the Pen CSS-Specificity by mik20621 (@mik20621) on CodePen.
各指定方法の詳細度
CSSの各指定方法による詳細度の重みは以下のようになっています。
より絞り込んで具体的な指定のほうが詳細度の重みが大きくなります。
重みの値は、IDセレクタ>
CLASSセレクタ>
要素セレクタ となっています。
詳細度の重み | 例 | |
---|---|---|
1 important | 最大 | p { color: red; } !important; |
2 HTMLのstyle属性で指定 | 2番目 | <p style="color: red;">テキスト</p> |
3 IDで指定 | 1-0-0 | #text { |
4 属性で指定 | 0-1-0 | [type="password"] { |
5 擬似クラス(一部を除く) | 0-1-0 | :focus { |
6 CLASSで指定 | 0-1-0 | .text { |
7 要素で指定 | 0-0-1 | p { |
8 擬似要素(全て) | 0-0-1 | ::placeholder { |
9 全称セレクタ | 0 | * { |
絶対に効かせたいCSSプロパティに指定
!important
を付けたプロパティは、最優先で有効になります。
color: red !important; /* 優先度最大の指定 */
See the Pen CSS-important by mik20621 (@mik20621) on CodePen.
確実に効かせることができる
HTMLの要素が多くCSSの指定が複雑になってくると、思い通りにCSSが効かないことが出てきます。
そういった場合でも!important
を指定すると、確実に指定したCSSを効かせることができます。
CSSの管理が難しくなるので多用は避ける
他の指定を一切無視する!important
は、CSSの構成が理解しにくくなるデメリットがあります。
なるだけ!important
は使わずにセレクタの指定だけにして、どうしてもうまくいかない箇所にのみ使うようにしないと、CSSの運用が難しくなります。
CSSは、HTMLの要素の属性に記述することができます。
この指定は外部のCSSファイルやHTML内の<style>タグ内での指定よりも優先されます。
See the Pen CSS-nth-child by mik20621 (@mik20621) on CodePen.
:hover
や:disabled
など擬似クラスのセレクタでスタイルを指定します。
詳細度の重み付けは0-1-0
で、優先度はクラス指定と同じです。
* { }
の全称セレクタは詳細度の重みを持たず0-0-0
です。
See the Pen CSS-Universal by mik20621 (@mik20621) on CodePen.
詳細度を確認できるWEBサービス
CSSのサイズが大きくなってくると、セレクタが複雑になり詳細度の把握が難しくなってきます。
そういった時に、以下のようなサイトを利用すれば、記入したセレクタの詳細度の重みを簡単に確認できます。