nob@lit-forge

CSS セレクタ 早見表

要素・クラス・ID・属性・擬似クラス・擬似要素・結合子など、CSS セレクタの全種類を用途別に整理した早見表。特異性(specificity)の計算方法と、セレクタを書くときの優先順位ルールも解説。

#CSS#セレクタ#Web

基本セレクタ

セレクタ意味
*全要素
div要素セレクタ(タグ名)
.classクラスセレクタ
#idID セレクタ
[attr]属性セレクタ(属性があれば)
[attr="val"]属性値の完全一致
[attr^="v"]属性値が v で始まる
[attr$="v"]属性値が v で終わる
[attr*="v"]属性値に v を含む

結合子(コンビネータ)

セレクタ意味
A BA の子孫の B(スペース)
A > BA の直下の B
A + BA の直後の B(兄弟)
A ~ BA より後にある B(兄弟、複数)
A, BA または B(グループ化)

擬似クラス(状態)

セレクタ意味
:hoverホバー中
:focusフォーカス中
:focus-visibleキーボードフォーカス(マウスクリック時は発火しない)
:active押下中
:checkedチェック済の input
:disabled / :enabled無効 / 有効
:required / :optional必須 / 任意
:valid / :invalidバリデーション結果
:placeholder-shownplaceholder が表示されている入力欄(未入力)

擬似クラス(位置)

セレクタ意味
:first-child / :last-child親の最初 / 最後の子
:nth-child(n)n 番目の子(1 始まり)
:nth-child(2n)偶数番目
:nth-child(odd)奇数番目
:only-child子が 1 つだけの時
:first-of-type / :last-of-type同じ要素型の中で最初 / 最後
:empty子も空白も無い要素
:not(selector)セレクタに一致しない
:is(a, b)複数セレクタに一致(特異性は最大のものに準じる)
:where(a, b):is と同じだが特異性は 0
:has(selector)セレクタを子孫に持つ要素(親セレクタ相当)

擬似要素

セレクタ意味
::before要素の前に content で生成
::after要素の後に content で生成
::first-letter先頭 1 文字
::first-line先頭 1 行
::selection選択中テキスト
::placeholder入力欄の placeholder
::markerリストのマーカー

特異性(specificity)の計算

セレクタごとに (A, B, C, D) の 4 数値で評価される(左ほど強い):

  • A: インラインスタイル(style="")があれば 1
  • B: ID セレクタの数
  • C: クラス / 擬似クラス / 属性セレクタの数
  • D: 要素セレクタ / 擬似要素の数

例:

  • div → (0,0,0,1)
  • .btn → (0,0,1,0)
  • #main .btn → (0,1,1,0)
  • !important は最優先(仕組みとしてはそのスコアに勝つ別系)

ハマりどころ

  • :has() の対応ブラウザ: 2023 以降の主要ブラウザはサポート。古い Safari は不可
  • :nth-child vs :nth-of-type: nth-child は全兄弟で数える、nth-of-type は同じ要素型の中だけ
  • 特異性が同じ場合: CSS 宣言の順序で後のものが勝つ
  • :where の活用: リセット CSS など「後で上書きされる前提」のスタイルは :where でラップすると詳細度 0 になり、扱いやすい
  • !important の乱用禁止: 初めから設計を見直したほうが早いことがほとんど

関連ツール(lit-forge)