cssが適用されない!?そんな時にチェックしたいcssの「詳細度」

cssの詳細度イメージ

サイトの運用ではしばしば見栄えを変更しなければならなくなった時、元の記述に上書きをすることになりますね。
「記述自体は間違っていないのにcssが適用されない(・3・)」
そんな謎解きから早く抜け出すためにも、 cssの優先度を決定する「詳細度」という概念を覚えておくと便利です。

cssの詳細度とは?

同じ要素に対して異なる定義をした場合、どの定義を優先して適用するかを決定する指標です。 定義が優先されるものを、より「詳細度が高い」と表現します。

優先順位

一般的には、以下のような順番で詳細度が決定します。

1)style属性

cssを要素に直接style属性で記述する方法。
#よりも詳細度は高く、一か所にだけstyleを適用させたい場合に使用する。

2)id属性(#)

よく使うセレクタの中では最も優先される。
HTML文書内に一回しか指定できない。

3)属性セレクタ

特定の要素に対してより複雑な条件を指定できる。

[attr]

attr という名前の属性を持つ要素を表す。
1
2
/* 全ての内部リンクをblueにする */
a[href^="#"] {color:blue}

4)classセレクタ

htmlでは「class=""」、cssでは「.」で記述を始め、任意の命名をする最もよく使用するセレクタ。 HTML文書内に複数回指定できる。

5)タイプセレクタ

divやpなどの要素の名前。

6)全称セレクタ

「*(アスタリスク)」で指定することで、全セレクタに適用させることができる。

※!importantはcss内で作られた他の宣言全てを上書きするので、詳細度とは無関係です

詳細度の計算方法

詳細度は以下の表の内容を基準にそれぞれのセレクタ数をかけて、最後に全体を足して算出します。 親要素から含めて記述するのか?class名だけを指定して書くのか?だけでも、cssの指定方法によって変わってきます。

セレクタの詳細度表

事例

cssは基本的に後から書かれたものが優先されますが、記述方法によって詳細度が変わり、適用されるcssも異なります。

どちらのcssが適用されるでしょうか?

1
2
3
4
5
6
ul li.list {
   color:green;
}
ul li {
   color:red;
}

この場合の結果は以下になります。
正解はこの色!

事例の解説

上記の詳細度の計算方法を参考に、セレクタの形式や数に合わせて詳細度を計算していきます。

●1番目の詳細度
ul(1)+li(1)+.list(10)=12

●2番目の詳細度
ul(1)+li(1)=2

通常は後から書かれた2番目のスタイルが適用されると思われますが、書かれた順番よりも、詳細度の高さが優先されるので、最初に書いた方が適用されることになります。

このように、詳細度の概念を知っておくとマークアップのスピードも格段に上がります。
記載方法は会社ごとのルールがあると思いますが、style属性や!importantはイレギュラー的な使い方なのでなるべく使用せず、それ以外の記述で対応していくことがお勧めです。

この記事は
なぽりたんが書きました。
入社2014年
出身地 神奈川県
スキルデザイン・写真撮影・登山・サイクリング

今日のひとこと:GOLDEN EGGSのDVD購入を検討中

サイト内検索
TOP