CSSで直前の要素を指定する方法!:has()セレクタと隣接セレクタを併用して対応できる
公開日:
質問
特定の要素の直前にある要素に CSS を設定したい。直後の要素は隣接セレクタ (+) で表現できるが、直前を指定することはできるのか?
対応方法
:has() セレクタと隣接セレクタ (+) を併用すれば取得できる。ただし :has() は Firefox が未サポート。その他、すべての主要ブラウザはサポートしています。
直前の要素を指定する CSS
実装したい内容
「要素B」の直前にある「要素A」だけ CSS を反映させたい。その他のケースでは反映させたくない。
HTML テストコード
<div class="testA">要素A</div> <div class="testB">要素B</div> <div class="testA">要素A</div> <div class="testC">要素C</div>
実装方法(サンプルプログラム)
直後に「要素B」を持つ「要素A」の要素に対して CSS を定義すれば OK です。:has() に隣接セレクタを適用させることで、特定の要素に対する直前の要素を指定できます。
CSS テストコード
.testA:has(+ .testB) { background-color: #000; color: yellow; } .testB, .testC { color: blue; }
実行結果
CSS を反映させた結果がこちら。
要素A
要素B
要素A
要素C
「要素B」の直前にある「要素A」は CSS が反映され、その他の「要素A」には何も反映されない動作になりました。