後続兄弟結合子
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
後続兄弟結合子 (subsequent-sibling combinator, ~) は 2 個のセレクターを結びつけ、 1 つ目の要素の後に 2 つ目の要素があり(直後である必要はない)、かつ両者が同じ親要素の子であるすべてのパターンに一致します。
次の例では、後続兄弟結合子 (~) は、画像の兄弟であり、画像の後に現れる段落を選択し、スタイル設定するのに便利です。
css
img ~ p {
color: red;
}
構文
css
/* 結合子の前後の空白はオプションですが、推奨されます。 */
先行する要素 ~ 選択される要素 { スタイルプロパティ }
例
>単純セレクターと結合子の使用
この例では、両方のセレクターが単純セレクター(p と span)である場合に、 ~ 結合子を使用する場合を示しています。
html
<article>
<span>これは段落の前に現れるので赤にはなりません。</span>
<p>ここに段落があります。</p>
<code>ここに code があります。</code>
<span>
この span が赤いのは、間に他のノードがあるにもかかわらず、段落の後に現れるからです。
</span>
<p>何かあっても、笑顔を絶やさないでください。</p>
<h1>夢は大きく</h1>
<span>
ノードの数や種類に関係なく、段落の後の同じ親からの span はすべて赤くなります。
</span>
</article>
<span>
この span は段落と親を共有していないので赤ではありません。
</span>
css
p ~ span {
color: red;
}
複合セレクターによる結合子の使用
この例には2つの複合セレクターがあり、どちらも後続兄弟結合子 .foo p ~ span と .foo p ~ .foo span を使用しています。
- 最初の複合セレクターである
.foo p ~ spanは、もし span と段落の親が同じで、かつその親またはその親の祖先がクラス.fooを持っている場合、段落の後に来るすべての span に一致します。 - 2 つ目の複合セレクター
.foo p ~ .foo spanは、クラス.fooを持っている要素の子孫であるすべての span に一致します。
下記の例は、複合セレクターの対象要素は、複合セレクターの初期要素と同じ親を示さなければならないことを示しています。
html
<h1>夢は大きく</h1>
<span>またしても赤い span です!</span>
<div class="foo">
<p>別の段落です。</p>
<span>青い span</span>
<div class="foo">
<span>緑の span</span>
</div>
</div>
css
.foo p ~ span {
color: blue;
}
.foo p ~ .foo span {
color: green;
}
上の HTML では、.foo p の兄弟は span と .foo です。緑色の span は .foo クラスの子孫で、p の兄弟です。
- 対象セレクターが
spanの場合、pの兄弟であるspan要素が選択されます。p要素は.fooの子孫であるため、そのspan兄弟要素も選択されます。 .foo p ~ .foo spanでは、対象とするセレクターは.fooの子孫であるspanです。この場合、.fooの子孫であるspan要素は、その.fooがpの兄弟である場合に選択されます。基本的には、どちらも.fooの祖先に入れ子になっています。
仕様書
| Specification |
|---|
| Selectors Level 4> # general-sibling-combinators> |
ブラウザーの互換性
Loading…