Skip to content

Instantly share code, notes, and snippets.

@manabuyasuda
Last active May 27, 2016 06:04
Show Gist options
  • Select an option

  • Save manabuyasuda/f7f767001a2513770f85d99d9e354403 to your computer and use it in GitHub Desktop.

Select an option

Save manabuyasuda/f7f767001a2513770f85d99d9e354403 to your computer and use it in GitHub Desktop.

CSSのセレクタと詳細度

セレクタ名、セレクタの構文、詳細度、セレクタの説明を表組みにしてまとめています。

記述ルール

セレクタの構文に使う言葉

セレクタの構文には以下のようにして構文の例を示しています。

  • 要素セレクタ E, F
  • クラスセレクタ .foo, .bar
  • IDセレクタ #foo, #bar
  • 属性セレクタ [attr="value"]

詳細度

詳細度には括弧で囲んでいるものと囲んでいないものがあります。

括弧で囲んでいるものはSpecificity Calculatorでセレクタ構文の詳細度を調べた結果です。例えばE Fは(0, 0, 0, 2)となります。

括弧で囲んでいないものは特定のセレクタ自身の詳細度です。例えばE > Fの場合はEFは要素セレクタなので詳細度は合計すると(0, 0, 0, 2)となりますが、>自身は詳細度を上げることはないので0, 0, 0, 0となっています。

なるべく詳細度のいちばん低い構文やセレクタを残すようにしていますが、セレクタによっては詳細度が変わる可能性があるので、あくまで目安として考えてください。

基本セレクタ

シングルセレクタを中心とした基本的なセレクタです。

セレクタ名 構文 詳細度 説明
全称セレクタ * (0, 0, 0, 0) すべての要素
要素セレクタ E (0, 0, 0, 1) E要素
構造擬似クラス :root (0, 0, 1, 0) 文書のルート要素(HTML文書ではhtml要素)にマッチ
クラスセレクタ .foo (0, 0, 1, 0) class属性がfooの要素
属性セレクタ [attr] (0, 0, 1, 0) attr属性をもつ要素
属性セレクタ [attr="value"] (0, 0, 1, 0) attr属性の値がvalueである要素
IDセレクタ #foo (0, 1, 0, 0) id属性がfooの要素

応用セレクタ

セレクタを絞り込むための条件をもったセレクタです。例えば、直接の子要素やx番目の要素、マウスオーバーしている状態などです。

主要なブラウザに対応していないセレクタは除外しています。また、nth-childなどはnth-of-typeのほうを優先的に使用したほうがいいため除外しています。

セレクタ名 構文   詳細度 説明
結合子(子孫セレクタ) E F 0, 0, 0, 0 (0, 0, 0, 2) E要素の子孫要素であるすべてのF要素
結合子(子セレクタ) E > F 0, 0, 0, 0 (0, 0, 0, 2) E要素の直接の子要素であるすべてのF要素
結合子(隣接セレクタ、隣接兄弟セレクタ) E + F 0, 0, 0, 0 (0, 0, 0, 2) E要素の直後にあらわれるF要素
結合子(間接セレクタ、一般兄弟セレクタ) E ~ F 0, 0, 0, 0 (0, 0, 0, 2) E要素の後にあらわれるF要素
否定擬似クラス E:not(x) 0, 0, 0, 0 (0, 0, 0, 2) xにマッチしないE要素
擬似要素 E::first-line 0, 0, 0, 1 (0, 0, 0, 2) E要素の実際に表示されている最初の行
擬似要素 E::first-letter 0, 0, 0, 1 (0, 0, 0, 2) E要素の最初の文字(contentプロパティを指定している::before擬似要素が生成される場合は生成される要素に適応される)
擬似要素 E::before 0, 0, 0, 1 (0, 0, 0, 2) 要素の前に最初の子要素となるインラインの擬似要素を生成する
擬似要素 E::after 0, 0, 0, 1 (0, 0, 0, 2) E要素の後に最後の子要素となるインラインの擬似要素を生成する
属性セレクタ [attr^="value"] 0, 0, 1, 0 (0, 0, 1, 0) attr属性の値がvalueで始まる(前方一致)要素
属性セレクタ [attr$="value"] 0, 0, 1, 0 (0, 0, 1, 0) attr属性の値がvalueで終わる(後方一致)要素
属性セレクタ [attr*="value"] 0, 0, 1, 0 (0, 0, 1, 0) attr属性の値がvalueを含む(部分一致)要素
属性セレクタ [attr~="value"] 0, 0, 1, 0 (0, 0, 1, 0) attr属性の値がスペースで区切られた項目リストであり、値がvalueである要素
属性セレクタ `[attr ="value"]` 0, 0, 1, 0 (0, 0, 1, 0)
言語疑似クラス E:lang(C) 0, 0, 1, 0 (0, 0, 1, 1) 言語情報CをもつE要素
構造擬似クラス E:first-of-type 0, 0, 1, 0 (0, 0, 1, 1) 同じ型をもつ最初のE要素
構造擬似クラス E:last-of-type 0, 0, 1, 0 (0, 0, 1, 1) 同じ型をもつ最後のE要素
構造擬似クラス E:nth-of-type(x) 0, 0, 1, 0 (0, 0, 1, 1) 同じ型をもつx番目のE要素
構造擬似クラス E:nth-of-type(odd) 0, 0, 1, 0 (0, 0, 1, 1) 同じ型をもつ奇数番目のE要素
構造擬似クラス E:nth-of-type(even) 0, 0, 1, 0 (0, 0, 1, 1) 同じ型をもつ偶数番目のE要素
構造擬似クラス E:nth-of-type(-n+x) 0, 0, 1, 0 (0, 0, 1, 1) 同じ型をもつ最初のx番目のE要素
構造擬似クラス E:nth-of-type(n+2) 0, 0, 1, 0 (0, 0, 1, 1) 同じ型をもつ最初のE要素以外
構造擬似クラス E:nth-last-of-type(x) 0, 0, 1, 0 (0, 0, 1, 1) 同じ型をもつ最初から数えてx番目のE要素
構造擬似クラス E:empty 0, 0, 1, 0 (0, 0, 1, 1) 子要素や文字(スペースも含)をもたない空の要素(コメント構文は判定されない)
ロケーション疑似クラス E:link 0, 0, 1, 0 (0, 0, 1, 1) E要素内のすべてのリンク
ロケーション疑似クラス E:visited 0, 0, 1, 0 (0, 0, 1, 1) E要素内の訪問済みのリンク
ロケーション疑似クラス E:target 0, 0, 1, 0 (0, 0, 1, 1) ハッシュ(#)が指定されているURLが参照した識別子と一致するid属性をもつ唯一の要素
ユーザーアクション擬似クラス E:hover 0, 0, 1, 0 (0, 0, 1, 1) マウスオーバーしたE要素
ユーザーアクション擬似クラス E:active 0, 0, 1, 0 (0, 0, 1, 1) マウスを押して離すまでの間か、タブキーでフォーカスしたE要素
ユーザーアクション擬似クラス E:focus 0, 0, 1, 0 (0, 0, 1, 1) キーボードで選択するか、マウスでアクティベート(フォームの入力など)をしたE要素
インプット疑似クラス E:enabled 0, 0, 1, 0 (0, 0, 1, 1) disabled属性が指定されていない使用可能なE要素
インプット疑似クラス E:disabled 0, 0, 1, 0 (0, 0, 1, 1) disabled属性が指定されている使用不可能なE要素
インプット疑似クラス E:checked 0, 0, 1, 0 (0, 0, 1, 1) チェックかon状態にされているE要素(ラジオ、チェックボックス、オプションボタン)
インプット疑似クラス E:required 0, 0, 1, 0 (0, 0, 1, 1) required属性を指定しているE要素
インプット疑似クラス E:optional 0, 0, 1, 0 (0, 0, 1, 1) required属性が指定されていないinput要素
インプット疑似クラス E:valid 0, 0, 1, 0 (0, 0, 1, 1) type属性にしたがってバリデーションが正しくおこなわれたinput要素
クラスセレクタ E.foo 0, 0, 1, 1 (0, 0, 1, 1) class属性がfooのE要素
属性セレクタ E[attr="value"] 0, 0, 1, 1 (0, 0, 1, 1) attr属性の値がvalueであるE要素

詳細度の計算方法

詳細度とはセレクタのもつ重みのことで、詳細度が高いほど優先して適応されます。

詳細度は以下のようにつけられます。詳細度はセレクタごとに決められた数値を足していくことで計算できます。

  • 0, 0, 0, 0 - 全称セレクタ、結合子、:not()疑似クラス
  • 0, 0, 0, 1 - 要素セレクタ
  • 0, 0, 1, 0 - クラスセレクタ、属性セレクタ、疑似要素
  • 0, 1, 0, 0 - IDセレクタ、:not()以外の疑似クラス
  • 1, 0, 0, 0 - スタイル属性(インラインスタイル)

詳細度は左から判定されます。例えばIDセレクタ(0,1,0,0)を指定していないクラスセレクタ(0,0,1,0)は何個同時に指定しても(0,0,3,0)IDセレクタを上書きすることはできません。

!important

!importantは詳細度とは別の基準になります。!importantを指定したセレクタは詳細度に関係なく優先して適応されます。!importantを指定したセレクタ同士で詳細度を比べて(継承とカスケードも適応されたうえで)最終的な優先度が決まります。

簡単な説明

属性セレクタ

属性と属性値によって要素を選択します。属性だけでも、属性と属性値の両方を指定しても詳細度は0,0,1,0で変わりません。一般的には要素セレクタと同時に指定します。要素セレクタをともなう場合は要素セレクタの詳細度の0, 0, 0, 1が足されて(0, 0, 1, 1)になります。

結合子

結合子は2つ以上のセレクタの関係をもとに、セレクタを限定的にします。結合子自信の詳細度は0,0,0,0です。要素セレクタを2つ指定すると(0, 0, 0, 2)になり、クラスセレクタを2つ指定すると(0, 0, 2, 0)になります。

否定擬似クラス

引数を渡す関数記法で、引数にマッチしない要素に適応されます。否定擬似クラス自信の詳細度は0,0,0,0,です。引数には他の否定セレクタや擬似要素を渡すことはできません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment