CSSセレクタ早見表と個別の解説
CSSで使えるセレクタの一覧表です。本項目で使用しているEという言葉は参照される要素(Element)を表します。Fはそれに付随する要素です。fooやvarは名称や値を示す変数となります。各セレクタの具体的な書き方は、それぞれの解説およびサンプルコードを参照してください。
要素指定セレクタ
結合子・コンビネーター
| 構文 | 名称 | 説明 |
|---|---|---|
| E, F | セレクタ・リスト | E要素とF要素を選択 |
| E F | 子孫結合子 | E要素の子孫であるF要素を選択 |
| E > F | 子結合子 | E要素の子であるF要素を選択 |
| E + F | 次接兄弟結合子 | E要素の直後にある同一階層のF要素を選択 |
| E ~ F | 後続兄弟結合子 | E要素の後に配置された同一階層のF要素を選択 |
| F || E | カラム結合子 | F列に所属するE要素を選択 |
名前指定セレクタ
属性セレクタ
| 構文 | 名称 | 説明 |
|---|---|---|
| E[foo] | 属性セレクタ | foo属性が指定されたE要素を選択 |
| E[foo="var"] | 属性セレクタ | foo属性の値がvarと完全に一致するE要素を選択 |
| E[foo="var" i] | 属性セレクタ | foo属性のvar値を大文字、小文字を区別せずに選択 |
| E[foo="var" s] | 属性セレクタ | foo属性のvar値を大文字、小文字を区別して選択 |
| E[foo~="var"] | 属性セレクタ | foo属性に複数の空白区切りの値がある場合にvarを持つE要素を選択 |
| E[foo^="var"] | 属性セレクタ | foo属性の値が前方一致のvarである場合にE要素を選択 |
| E[foo$="var"] | 属性セレクタ | 属性の値が後方一致のvarである場合にE要素を選択 |
| E[foo*="var"] | 属性セレクタ | foo属性の値が部分一致でvarを含む場合のE要素を選択 |
| E[foo|="var"] | 属性セレクタ | foo属性がハイフン区切りの値である場合に前方一致のvarを持つE要素を選択 |
擬似クラス・条件判定
| 構文 | 名称 | 説明 |
|---|---|---|
| E:not(F) | :not擬似クラス | 条件Fを含まないE要素を選択 |
| E:is(F) | :is擬似クラス | 条件Fに当てはまるE要素を選択 |
| E:where(F) | :where擬似クラス | 条件Fに当てはまるE要素を選択 |
| E:has(F) | :has擬似クラス | 条件Fを持つE要素を選択 |
擬似クラス・位置関係
| 構文 | 名称 | 説明 |
|---|---|---|
| :root | :root擬似クラス | ドキュメントのルートにあたる要素を選択 |
| E:empty | :empty擬似クラス | E要素の内容が空の場合に選択 |
| E:nth-child(n) | :nth-child擬似クラス | 共通の親を持つ全ての要素の先頭から(n番目)のE要素を選択 |
| E:nth-last-child(n) | :nth-last-child擬似クラス | 共通の親を持つ全ての要素の最後から(n番目)のE要素を選択 |
| E:first-child | :first-child擬似クラス | 共通の親を持つ全ての要素の先頭に置かれたE要素を選択 |
| E:last-child | :last-child擬似クラス | 共通の親を持つ全ての要素の最後に置かれたE要素を選択 |
| E:only-child | :only-child擬似クラス | 親要素の中で子要素がE要素のみの場合を選択 |
| E:nth-of-type(n) | :nth-of-type擬似クラス | 兄弟関係にあたるE要素の先頭から(n番目)のE要素を選択 |
| E:nth-last-of-type(n) | :nth-last-of-type擬似クラス | 兄弟関係にあたるE要素の最後から(n番目)のE要素を選択 |
| E:first-of-type | :first-of-type擬似クラス | 兄弟関係にあたるE要素の最初のE要素のみを選択 |
| E:last-of-type | :last-of-type擬似クラス | 兄弟関係にあたるE要素の最後のE要素のみを選択 |
| E:only-of-type | :only-of-type擬似クラス | 親要素の中で唯一のE要素を選択 |
擬似クラス・アンカー
| 構文 | 名称 | 説明 |
|---|---|---|
| E:any-link | :any-link擬似クラス | リンク指定されたE要素を選択 |
| E:link | :link擬似クラス | リンク先が未訪問であるE要素を選択 |
| E:visited | :visited擬似クラス | リンク先が訪問済みであるE要素を選択 |
| E:target | :target擬似クラス | リンク先のターゲットに指定されたE要素を選択 |
| E:scope | :scope擬似クラス | スコープのルートにあたる要素を選択 |
擬似クラス・状態参照
| 構文 | 名称 | 説明 |
|---|---|---|
| E:hover | :hover擬似クラス | ポインターが重なったE要素を選択 |
| E:active | :active擬似クラス | ユーザーの操作でアクティブになったE要素を選択 |
| E:focus | :focus擬似クラス | フォーカスされたE要素を選択 |
| E:focus-within | :focus-within擬似クラス | 自身か子孫がフォーカスされたE要素を選択 |
| E:focus-visible | :focus-visible擬似クラス | ユーザーエージェントがフォーカスすべきと判定したE要素を選択 |
擬似クラス・入力項目
| 構文 | 名称 | 説明 |
|---|---|---|
| E:enabled | :enabled擬似クラス | 有効状態(enabled)であるE要素を選択 |
| E:disabled | :disabled擬似クラス | 無効状態(disabled)であるE要素を選択 |
| E:read-write | :read-write擬似クラス | 編集可能な状態のE要素を選択 |
| E:read-only | :read-only擬似クラス | 編集不可能な状態の読み取り専用のE要素を選択 |
| E:placeholder-shown | :placeholder-shown擬似クラス | プレースホルダーが表示されている状態のE要素を選択 |
| E:default | :default似クラス | 既定値の状態になっているE要素を選択 |
| E:checked | :checked擬似クラス | チェック状態であるE要素を選択 |
| E:indeterminate | :indeterminate擬似クラス | 不確定の状態であるE要素を選択 |
| E:valid | :valid擬似クラス | 入力内容の検証を通過したE要素を選択 |
| E:invalid | :invalid擬似クラス | 検証に失敗したE要素を選択 |
| E:in-range | :in-range擬似クラス | 制限範囲に収まる値を持つE要素を選択 |
| E:out-of-range | :out-of-range擬似クラス | 制限範囲に収まらない値を持つE要素を選択 |
| E:required | :required擬似クラス | required属性を付与されているE要素を選択 |
| E:optional | :optional擬似クラス | required属性を付与されていないE要素を選択 |
| E:user-valid | :user-valid擬似クラス | 制約検証で有効と判断できたE要素を選択 |
| E:user-invalid | :user-invalid擬似クラス | 制約検証で有効と判断できなかったE要素を選択 |
擬似クラス・書字言語
擬似要素
| 構文 | 名称 | 説明 |
|---|---|---|
| ::backdrop | ::backdrop擬似要素 | 全画面モードや最上位のレイヤーに配置された要素の直下に投影される要素 |
| ::before | ::before擬似要素 | 要素の開始直後に装飾的な内容を追加 |
| ::after | ::after擬似要素 | 要素の終了直前に装飾的な内容を追加 |
| ::first-letter | ::first-letter擬似要素 | 要素に含まれる最初の一文字を表す |
| ::first-line | ::first-line擬似要素 | 要素に含まれる最初の一行を表す |
| ::marker | ::marker擬似要素 | リスト項目のマーカーを表す |
| ::placeholder | ::placeholder擬似要素 | 入力項目のプレースホルダーを表す |
| ::selection | ::selection擬似要素 | ユーザーが選択した範囲の文字を表す |
ユニバーサルセレクタ(Universal selector)
- 構文
- *
- 説明
- 全ての要素を選択
- レベル
- 2
ユニバーサルセレクタ(Universal selector)は、記号のアスタリスク(*)で表し、文書に含まれる全ての要素を選択します。日本語では「全称セレクタ」とも呼ばれます。一般的には、CSSファイルの最上部付近に置いて、サイト全体に共通するスタイルの指定を行います。
/* 全ての要素と擬似要素に一致 */
*, ::before, ::after {
box-sizing: border-box;
min-inline-size: 0;
padding-block: 0;
padding-inline: 0;
margin-block: 0;
margin-inline: 0;
border-style: solid;
border-width: 0;
}
/* 特定の条件下の子要素に一致 */
.container :where(.entry > *+*) {
margin-block-start: 1rem;
}
タイプセレクタ(Type selector)
- 構文
- E(elementname)
- 説明
Eという名称の要素を選択- レベル
- 1
タイプセレクタ(Type selector)は、任意の要素の名前で表します。一致した要素は、内容や属性に限らず全てが選択されます。一般的には、サイト全体の基本的なスタイルを定義する場合に使用します。また、親子関係を利用して対象を絞り込む場合などに用います。
<div class="sample-block">
<h1>見出しテキスト</h1>
<p>段落の内容</p>
</div>
/* 見出し要素に一致 */
h1 {
color: blue;
}
/* 段落要素に一致 */
p {
margin-block: 1em 0;
}
/* 特定のclassに属する見出し要素に一致 */
.sample-block h1 {
font-size: 1.5rem;
}
セレクタ・リスト(Selector list)
- 構文
- E, F
- 説明
E要素とF要素を選択- レベル
- -
セレクタ・リスト(Selector list)は、複数のセレクタをカンマ(,)区切りで表し、一致した要素に共通のスタイルを適用します。この記法は要素名に限らず、あらゆるセレクタをリスト化できます。
セレクタの末尾に記載するカンマの後ろは改行しても構いませんが、他のセレクタを続けて配置することが求められます。最後のセレクタの後ろにカンマが残っているとスタイルが適用されないので、消し忘れに注意しましょう。
<div class="sample-block">
<h1>見出しテキスト</h1>
<h2>小見出しのテキスト</h2>
<p>段落のテキスト</p>
</div>
/* 複数の要素に同じスタイルを指定する場合 */
h1 { font-family: sans-serif;}
h2 { font-family: sans-serif;}
p { font-family: sans-serif;}
/* セレクタ・リストで一括指定が可能 */
h1, h2, p {
font-family: sans-serif;
}
/* 擬似要素に共通のスタイルを指定 */
.archive::before,
.archive::after {
max-width: 300px;
}
子孫結合子(Descendant combinator)
- 構文
- E F
- 説明
E要素の子孫であるF要素を選択- レベル
- 1
子孫結合子(Descendant combinator)は、親要素となるセレクタの後に続くホワイトスペース( )で表します。最初に示したセレクタがノードの起点となり、そこに含まれる子孫を特定するセレクタを続けて書きます。親要素から子要素を飛び越えて孫要素を選択することも可能で、さらにホワイトスペースで区切ったセレクタを複数組み合わせることで、条件を絞り込んでいくこともできます。
例えば、要素名とクラス名を連結させてdiv.itemと記載した場合は、itemというクラス名を持つdiv要素という意味のセレクタになりますが、これらをホワイトスペースで区切ってdiv .itemと記載すると、div要素を親に持つitemクラスのセレクタという意味になります。
<nav class="side-menu">
<ul class="contents">
<li><a href="/">Item</a></li>
<li><a href="/">Item</a></li>
<li><a href="/">Item</a></li>
</ul>
</nav>
/* nav要素に含まれるul要素に一致 */
nav ul {
padding: 0;
}
/* クラスの子要素に配置されたli要素を全て選択 */
.side-menu li {
border-inline-start: 3px solid #0099ff;
}
/* 子孫結合子の組み合わせで条件を絞り込む */
.contents li > a {
display: block;
}
子結合子(Child combinator)
- 構文
- E > F
- 説明
E要素の子であるF要素を選択- レベル
- 2
子結合子(Child combinator)は、親要素となるセレクタの後に続く不等号(>)で表します。最初に示したセレクタがノードの起点となり、そこに含まれる直接の子要素を特定するセレクタを続けて書きます。親要素から子要素を飛び越えて孫要素を選択することはできません。特定の階層に属する要素だけにスタイルを適用したい場合に有効です。
<nav class="side-menu">
<ul class="contents">
<li><a href="/">Item</a></li>
<li><a href="/">Item</a></li>
<li><a href="/">Item</a></li>
</ul>
</nav>
/* nav要素の直接子要素であるul要素に一致 */
nav > ul {
padding: 0;
}
/* 子結合子を連結して条件を絞り込む */
.contents > li > a {
display: block;
}
/* 条件に一致していないため選択されない */
.side-menu > li {
border-inline-start: 3px solid #0099ff;
}
次接兄弟結合子(Next sibling combinator)
- 構文
- E + F
- 説明
E要素の直後にある同一階層のF要素を選択- レベル
- 2
次接兄弟結合子(Next sibling combinator)は、二つのセレクタを区切る加算記号(+)で表します。両者は共通の親を持ち、同じ階層に属する隣接した要素であることが求められます。最初に示すセレクタは二番目のセレクタよりもソースコードの前に配置されたものであり、二番目のセレクタは最初のセレクタに一致した要素よりも後に配置され、かつ最初の要素である必要があります。
<article class="post-content">
<h1 class="post-title">投稿記事のタイトル</h1>
<p>記事の内容を表すテキスト。</p>
<p>記事の内容を表すテキスト。</p>
<section class="pr">
<a href="pr">[PR]おすすめの記事</a>
</section>
<p>記事の内容を表すテキスト。</p>
<p>記事の内容を表すテキスト。</p>
</nav>
/* 見出し要素に続く最初の段落に一致 */
h1 + p {
margin-block-start: 2rem;
}
/* classセレクタに一致する要素に続く段落 */
.pr + p {
border-block-start: 1px dotted #ccc;
}
/* 条件に一致した親要素に含まれる全ての隣接要素 */
.post-content :where(*+*) {
margin-block-start: 1rem;
}
/* 後続する要素が隣接していないため無効 */
.post-title + .pr {
display: none;
}
後続兄弟結合子(Subsequent sibling combinator)
- 構文
- E ~ F
- 説明
E要素の後に配置された同一階層のF要素を選択- レベル
- 3
後続兄弟結合子(Subsequent sibling combinator)は、二つのセレクタを区切るチルダ(~)で表します。両者は共通の親を持ち、同じ階層に属する要素であることが求められます。最初のセレクタは二番目のセレクタよりも前に配置された要素であり、二番目のセレクタはその後に置かれた要素である必要があります。ただし、二つの要素は必ずしも隣接しているとは限りません。
<article class="post-content">
<h1 class="post-title">投稿記事のタイトル</h1>
<p>記事の内容を表すテキスト。</p>
<p>記事の内容を表すテキスト。</p>
<section class="pr">
<a href="pr">[PR]おすすめの記事</a>
</section>
<p>記事の内容を表すテキスト。</p>
<p>記事の内容を表すテキスト。</p>
</nav>
/* 見出しの後に続く同じ階層の段落に一致 */
h1 ~ p {
margin-block-start: 1rem;
}
/* classセレクタの後に配置された別のclassセレクタに一致 */
.post-title ~ .pr {
display: block;
}
/* 最初配置された段落の後に続く段落に一致 */
.post-content :where(p~p) {
margin-block-start: 1rem;
}
/* 同じ階層に存在しないため無効 */
.post-title ~ a {
color: #ff0066;
}
カラム結合子(Column combinator)
- 構文
- F || E
- 説明
F列に所属するE要素を選択- レベル
- 4
カラム結合子(Column combinator)は、二つのセレクタを区切るパイプ記号(||)で表します。両者は、列要素とその列に属するセルとの関係を表します。
<table class="table">
<col class="name">
<col span="2" class="category">
<tr>
<th scope="col">項目</td>
<th scope="col">見出し</td>
<th scope="col">見出し</td>
</tr>
<tr>
<th scope="row">項目</th>
<td>セル</td>
<td>セル</td>
</tr>
<tr>
<th scope="row">項目</th>
<td>セル</td>
<td>セル</td>
</tr>
</nav>
/* 特定の列に属するセルを選択 */
col.name || td {
white-space: nowrap;
}
col.category || td {
overflow-wrap: anywhere;
}
クラスセレクタ(Class selector)
- 構文
- .class
- 説明
class属性の値に一致する要素を選択- レベル
- 1
クラスセレクタ(Class selector)は、要素のclass属性に指定した値で表します。一致した要素は、たとえ別の種類の要素であっても同じスタイルが適用されます。ページの中で何度も使い回すパーツを作成したり、共通のプロパティを複数の要素に適用する際に使用します。
このセレクタはHTML要素のclass属性に指定された値を参照します。CSSの記法では、その値の先頭にピリオド(.)を追加します。例えば、要素名とクラス名を連結させてdiv.itemと記載した場合は、itemというクラス名を持つdiv要素という意味のセレクタになります。これをホワイトスペースで区切ってdiv .itemと記載すると、div要素を親に持つitemクラスのセレクタという意味になります。
<div class="sample-block">
<h1 class="heading">見出しテキスト</h1>
<p class="inline">段落の内容</p>
</div>
/* class属性の値に一致 */
.sample-block {
padding-inline: 1rem;
}
/* 要素名とclass属性の値に一致 */
h1.heading {
border-block-end: 1px solid gray;
}
/* 子要素に配置されたclass属性の値に一致 */
div .inline {
line-height: 1.75;
}
IDセレクタ(ID selector)
- 構文
- #id
- 説明
id属性の値に一致する要素を選択- レベル
- 1
IDセレクタ(ID selector)は、要素のid属性に指定した値で表します。id属性の値は、ひとつのページの中で重複してはならないというルールがあります。そのため、特別なパーツやレイアウト用のコンテナなど、個別のスタイルが必要な場合に使用します。
このセレクタはHTML要素のid属性に指定された値を参照します。CSSの記法では、その値の先頭にシャープ(#)を追加します。例えば、要素名とクラス名を連結させてdiv#itemと記載した場合は、itemというID名を持つdiv要素という意味のセレクタになります。これをホワイトスペースで区切ってdiv #itemと記載すると、div要素を親に持つitemIDのセレクタという意味になります。
<div id="sample-block">
<h1 id="title">サイトタイトル</h1>
<h2 id="subtitle">サブタイトル</h2>
</div>
/* id属性の値に一致 */
#title {
font-family: Helvetica Neue, Arial, sans-serif;
}
/* 要素名とid属性の値に一致 */
h2#subtitle {
font-size: 0.75rem;
}
/* 特定の条件でid値を絞り込む */
.sample-block #title {
text-decoration: underline;
}
属性セレクタ(Attribute selector)
- 構文
- E[foo]
- 説明
foo属性が指定されたE要素を選択- レベル
- 2
属性セレクタ(Attribute selector)は、要素に与えられた属性の名前で表します。[と]の中に指定した内容と一致する属性が全て選択対象となります。要素単位ではなく属性単位で共通のパターンを作成したり、要素の中で特定の属性を持つものだけ絞り込む場合に使用します。
このセレクタはHTML要素に指定できる属性名の文字列を参照します。例えば、要素名と属性名を連結させてdiv[title]と記載した場合は、title属性を持つdiv要素という意味のセレクタになります。これをホワイトスペースで区切ってdiv [title]と記載すると、div要素を親に持つ[title]属性を与えられた要素のセレクタという意味になります。
<nav aria-label="サイトメニュー">
<ul class="list menu" data-columns="4">
<li><a href="/" title="Home">Home</a></li>
<li><a href="/blog" title="Blog">Blog</a></li>
<li><a href="/photo" title="Photo">Photo</a></li>
<li><a href="/about" title="About">About</a></li>
</ul>
</nav>
/* aria-label属性を持つnav要素に一致 */
nav[aria-label] {
padding-inline: 1rem;
}
/* nav要素の子孫に配置されたdata-columns属性に一致 */
nav [data-columns] {
display: grid;
}
/* classセレクタ等と組み合わせることも可能 */
.list[data-columns] {
gap: 0.25rem;
}
属性セレクタ:値の一致
- 構文
- E[foo="var"]
- 説明
foo属性の値がvarと完全に一致するE要素を選択- レベル
- 2
属性セレクタで値を特定する形式です。[と]の中に選択したい要素の属性と値をそのまま書きます。ダブルクォーテーションは省略可能ですが、値の文字列は完全一致でなければなりません。属性の値によって異なるスタイルを適用したい場合に使用します。
このセレクタはHTML要素に指定された属性と値を両方参照します。そのため、どちらか一方でも異なる文字が混じっているとスタイルは適用されません。複数の値が指定されていたり、動的に値が変動するような要素にスタイルを適用したい場合は、属性名と値を結ぶイコール(=)の前に記号を追加して正規表現のように文字を検索できる方法があるので、そちらを採用してください。
<nav aria-label="サイトメニュー">
<ul class="list menu" data-columns="4">
<li><a href="/" title="Home">Home</a></li>
<li><a href="/blog" title="Blog">Blog</a></li>
<li><a href="/photo" title="Photo">Photo</a></li>
<li><a href="/about" title="About">About</a></li>
</ul>
</nav>
/* data-columns属性の値が4のul要素に一致 */
ul[data-columns="4"] {
grid-template-columns: repeat(4, 1fr);
}
/* nav要素の子孫の中で特定の属性と値を持つ要素に一致 */
nav [title="Home"] {
background-color: #ccc;
}
/* 複数の値を持つ属性も選択可能 */
nav [class="list menu"] {
gap: 0.5rem;
}
/* 値の文字列が一致しないため選択されない */
nav [class="menu"] {
gap: 0.5rem;
}
属性セレクタ i識別子
- 構文
- E[foo="var" i]
- 説明
foo属性のvar値を大文字、小文字を区別せずに選択- レベル
- 4
属性セレクタの閉じ括弧(])の直前にiまたはI識別子を置くと、値は大文字と小文字を区別することなく評価されます。例えば、要素のclass属性の値が"var"だった場合に、既定値であれば"Var"や"VAR"は対象から外れますが、この識別子を追加するとどちらも一致します。
<div class="sample-block">
<div class="item">item</div>
<div class="Item">Item</div>
<div class="ITEM">ITEM</div>
</div>
/* 共通のスタイル */
.sample-block {
display: grid;
}
.sample-block div {
padding: 0.5rem;
border-block-end: 1px solid gray;
}
/* i識別子を追加すると大文字・小文字を区別しない */
[class="item" i] {
color: red;
}
