CSS

CSSセレクタ完全ガイド|要素を正確に指定する方法

CSS セレクタ 基礎

CSSセレクタ完全ガイド
要素を正確に指定する方法

CSSセレクタは、スタイルを適用する対象の要素を指定するための記法です。
基本的なセレクタから擬似クラス、属性セレクタまで、実務でよく使うパターンをまとめて解説します。

こんな人向けの記事です

  • CSSセレクタの種類を体系的に知りたい
  • 特定の要素だけにスタイルを適用したい
  • 擬似クラス(:hover, :nth-child等)の使い方を知りたい

Step 1基本セレクタ

セレクタ対象
*全ての要素* { margin: 0; }
要素名指定した要素p { color: red; }
.クラス名指定したクラスを持つ要素.title { font-size: 20px; }
#ID名指定したIDを持つ要素#header { height: 60px; }
A, BAまたはB(グループ化)h1, h2 { color: blue; }
CSS
/* 要素セレクタ */
p { line-height: 1.6; }

/* クラスセレクタ */
.highlight { background: yellow; }

/* IDセレクタ */
#main-content { max-width: 800px; }

/* 複数のセレクタをグループ化 */
h1, h2, h3 { font-weight: bold; }

Step 2結合子(子孫・子・隣接)

結合子意味
A BAの子孫のB(深さ問わず).nav a { color: white; }
A > BAの直接の子のBul > li { list-style: none; }
A + BAの直後のB(隣接兄弟)h2 + p { margin-top: 0; }
A ~ BAの後のB全て(一般兄弟)h2 ~ p { color: gray; }

Step 3擬似クラス

擬似クラス対象
:hoverマウスが乗っている要素
:focusフォーカスされている要素
:activeクリック中の要素
:first-child最初の子要素
:last-child最後の子要素
:nth-child(n)n番目の子要素
:nth-child(odd)奇数番目の子要素
:nth-child(even)偶数番目の子要素
:not(セレクタ)指定セレクタに一致しない要素
:checkedチェック済みのinput
:disabled無効化された要素
CSS
/* テーブルの偶数行にストライプ */
tr:nth-child(even) { background: #f5f5f5; }

/* 最後の要素のボーダーを消す */
li:last-child { border-bottom: none; }

/* .active 以外のリンク */
a:not(.active) { color: gray; }

Step 4擬似要素

擬似要素役割
::before要素の前にコンテンツを挿入
::after要素の後にコンテンツを挿入
::first-line最初の行
::first-letter最初の文字
::placeholderinputのプレースホルダー
CSS
/* 必須マークを追加 */
.required::after {
  content: " *";
  color: red;
}

/* リンクの前にアイコンを表示 */
a.external::before {
  content: "\2197 ";  /* 矢印アイコン */
}

Step 5属性セレクタ

セレクタ対象
[属性]属性を持つ要素
[属性="値"]属性が値と完全一致
[属性^="値"]属性が値で始まる
[属性$="値"]属性が値で終わる
[属性*="値"]属性が値を含む
CSS
/* type="text" のinput */
input[type="text"] { border: 1px solid #ccc; }

/* href が https で始まるリンク */
a[href^="https"] { color: green; }

/* .pdf で終わるリンク */
a[href$=".pdf"] { color: red; }

Step 6詳細度(優先順位)

同じ要素に複数のスタイルが適用される場合、詳細度が高いほうが優先されます。

セレクタ詳細度
インラインスタイル(style=""1,0,0,0
IDセレクタ(#id0,1,0,0
クラス・擬似クラス・属性(.class0,0,1,0
要素・擬似要素(div0,0,0,1
!important は最終手段
!important は詳細度を無視して最優先になりますが、保守性が下がるため極力使わないでください。
詳細度の設計を見直すほうが正しいアプローチです。

まとめ

  • 基本は 要素 / .クラス / #ID の3種類
  • 結合子(A B / A > B / A + B)で階層を指定
  • 擬似クラス(:hover, :nth-child)で状態や順番を指定
  • 擬似要素(::before, ::after)でコンテンツを追加
  • 詳細度: インライン > ID > クラス > 要素