CSS ・ CSSの記法

A > B

子セレクタ(直下の子要素だけ)

セレクタを「>」で区切ると、「A の直下にある子要素の B」だけを指定できます。孫やそれより深い要素は対象になりません。

書き方
A > B { }
対象
直下の子要素だけ
詳細度
A と B の合計
01

サンプルコード

HTML
1<div class="box">
2 <p>子の段落</p>
3 <div class="inner">
4 <p>孫の段落(div の中)</p>
5 </div>
6 <p>子の段落</p>
7</div>
CSS
1.inner {
2 margin-left: 24px;
3 padding-left: 12px;
4 border-left: 2px solid #ddd;
5}
6/* .box の直下の p だけ(孫の p は含まない) */
7.box > p {
8 color: #c0392b;
9 font-weight: bold;
10}
02

実行結果

ブラウザでの表示直下の「子の段落」だけが赤くなり、「孫の段落」は元の色のままです
03

解説

A > B と書くと、A のすぐ下の階層にある子要素の B だけが対象になります。これを「子セレクタ」と呼びます。

上の例では、.box の直下にある2つの「子の段落」だけが赤くなり、div の中の「孫の段落」は元の色のままです。子孫セレクタ(.box p)との違いを見比べてみましょう。

ただし color のように親から子へ受け継がれる(継承される)プロパティには注意が必要です。セレクタが当たるのは子要素だけでも、孫要素がその子要素の中にあれば、子の色がそのまま孫にも受け継がれて同じ色に見えます。上の例で孫の段落が元の色のままなのは、孫の段落が子の p の中ではなく、別の div の中にあるためです(下の応用例も参照)。

04

応用例・注意点

関係を表すセレクタ(結合子)

書き方説明
A B子孫:A の中にある B すべて
A > B子:A の直下にある B だけ
A + B隣接兄弟:A のすぐ次の B
A ~ B一般兄弟:A より後ろの兄弟の B すべて

継承によって孫も同じ色になる例

li の中に孫の li がある場合、セレクタが当たるのは直下の li だけですが、color は継承されるため孫の li も赤く表示されます。孫を元の色に戻したいときは、孫の側に色を指定します。

HTML
1<ul class="menu">
2 <li>カフェラテ
3 <ul>
4 <li>ホット</li> <!-- 親の li から赤を受け継ぐ -->
5 </ul>
6 </li>
7</ul>
CSS
1.menu > li {
2 color: #c0392b;
3}
4/* 孫の li は元の色に戻す */
5.menu > li li {
6 color: #201f1d;
7}

カードの直下の要素に余白をそろえる

子セレクタとユニバーサルセレクタ(*)を組み合わせると、直下の子すべてを指定できます。

CSS
1.card > * {
2 margin: 0 0 8px;
3}
4.card > *:last-child {
5 margin-bottom: 0;
6}

注意点

  1. 01> の前後の空白はあってもなくても同じ意味ですが、読みやすさのため空白を入れて書くのが一般的です。
  2. 02HTMLの構造(入れ子の段数)を変えると効かなくなるので、構造と合わせて管理します。
↑↓ 選択Enter 移動Esc 閉じるCtrl K⌘K で開閉