CSS ・ CSSの記法

詳細度

どの指定が優先されるかの決まり

同じ要素に複数のCSSが当たったとき、どれが優先されるかを決める「強さ」の決まりです。セレクタの種類ごとに点数のように数えて比べます。

比べる単位
インライン - id - class - 要素
同じ強さのとき
後に書いたほうが優先
例外
!important
01

サンプルコード

HTML
1<p id="lead" class="text">この文字は何色になるでしょう?</p>
CSS
1/* 要素セレクタ:0-0-1 ≒ 1点 */
2p {
3 color: blue;
4}
5/* クラスセレクタ:0-1-0 ≒ 10点 */
6.text {
7 color: green;
8}
9/* idセレクタ:1-0-0 ≒ 100点 → これが勝つ */
10#lead {
11 color: #c0392b;
12}
02

実行結果

ブラウザでの表示#lead(id)の指定が最も強いため、文字は赤になります
03

解説

同じ要素に複数のスタイルが指定されたとき、ブラウザは「詳細度」が高いほうを使います。上の例では、p・.text・#lead の3つが同じ段落を指定していますが、最も詳細度が高い #lead の赤が使われます。

詳細度は、セレクタに含まれる「id」「クラス・属性・疑似クラス」「要素・疑似要素」の数を、それぞれ別の桁として数えます。インラインスタイル(style属性)はさらに上の桁です。目安として 1000点・100点・10点・1点 と考えると分かりやすくなります。

ただし点数は桁の比較なので、繰り上がりはありません。クラスを11個つなげても(0-11-0)、id 1つ(1-0-0)には勝てません。詳細度が同じときは、CSSの中で後に書いたほうが優先されます。

04

応用例・注意点

詳細度の目安

セレクタの種類説明
インラインスタイル(style 属性)1-0-0-0 ≒ 1000点
id セレクタ(#id)1-0-0 ≒ 100点
クラス・属性セレクタ・疑似クラス(.class / [type] / :hover)0-1-0 ≒ 10点
要素・疑似要素(p / ::before)0-0-1 ≒ 1点
*(ユニバーサルセレクタ)0点
!important詳細度に関係なく最優先(多用しない)

セレクタの詳細度を数える

セレクタに含まれる種類ごとに数えて、左の桁から比べます。

CSS
1/* 0-0-1 ≒ 1点 */
2li { }
3/* 0-0-2 ≒ 2点 */
4ul li { }
5/* 0-1-1 ≒ 11点 */
6li.active { }
7/* 0-2-1 ≒ 21点 */
8.menu li:hover { }
9/* 1-0-1 ≒ 101点 */
10#nav li { }

詳細度を上げずに上書きする

上書きできないときは、詳細度を上げるより、後に書く・クラスを1つ足す程度にとどめます。id や !important に頼るとさらに上書きしにくくなります。

CSS
1/* △ 上書きのために強くしすぎない */
2#main .content .box p { }
3
4/* ○ クラス1つで指定し、後に書く */
5.box-text { }

注意点

  1. 01!important はどんな詳細度にも勝ってしまうため、使うと後から上書きできなくなります。最終手段にとどめます。
  2. 02継承された値(親から引き継いだ color など)は、詳細度に関係なく、直接指定したスタイルに負けます。
  3. 03詳細度を低く・そろえておくと、CSSが上書きしやすく管理しやすくなります。スタイルは基本的にクラスで指定するのがおすすめです。
↑↓ 選択Enter 移動Esc 閉じるCtrl K⌘K で開閉