スタイルの優先順位のまとめ ~あなたはスタイルの優先順位について理解できてますか?~

CSSには様々な指定方法があり、この指定方法によって優先順が決められています。例えば、同じP要素に対してセレクタを下記のように指定したとします。


このように後ろに指定されたものが優先されるというだけではなく、スタイルセレクタの種類によっても優先順位に影響を与えます。

優先順位に影響を与えるもの

スタイルシートの優先順位に影響を与えるものは以下の4つです。

  • セレクタの種類・書き方
  • 指定の順序
  • スタイルシートの種類(ブラウザ側・ユーザー側・制作者側)
  • !important指定

セレクタの種類・書き方について

セレクタの種類には、

  • IDセレクタ
  • classセレクタ
  • 疑似classセレクタ
  • 要素セレクタ
  • 疑似要素セレクタ
  • 全称セレクタ

の5つがあり、IDセレクタ > classセレクタ = 疑似classセレクタ > 要素セレクタ = 疑似要素セレクタ > 全称セレクタと、このような優先度になっています。

計算方法

セレクタの優先度は次ように算出されています。優先度の数値が高いほど優先されます。

セレクタ A B C D 優先度
* 0 0 0 0 0000
p 0 0 0 1 0001
p span 0 0 0 2 0002
p .bold 0 0 1 1 0011
#main p .bold 0 1 1 1 0111
div#main p .bold 0 1 1 1 0112
スタイル属性(<p style="bold">~</p>など) 1 0 0 0 1000
  • HTMLにstyle=""で指定
  • IDセレクタの数
  • classセレクタ・擬似classセレクタの数
  • 要素セレクタ・疑似要素の数

指定の順序について

セレクタの計算に基いて算出された優先度が同じ数値になった場合は、後ろに指定されたものが優先されます。

スタイルシートの種類(ブラウザ側・ユーザー側・制作者側)について

スタイルシートには、ブラウザ側・ユーザー側・制作者側の3種類があります。そして、それぞれに優先度が設定されており、制作者側 > ユーザー側 > ブラウザ側となっています。

!important指定について

スタイルプロパティに、"!important"と指定することで指定したプロパティを最優先にすることができます。

このようにスタイルの優先度は様々な要素が絡み合って算出されているため、単純にスタイルを記述していくだけでは「何故かスタイルが適用されない」という問題に陥ってしまいがちです。
優先度を算出方法を良く理解し、無駄な時間がかからないようにしたいですね。