CSSで直前の要素を指定する方法!:has()セレクタと隣接セレクタを併用して対応できる

公開日:
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」には何も反映されない動作になりました。

\ この記事をシェアする /

このブログの運営者

NJ

Web系メインで従事していた元システムエンジニア。現在は個人事業主として独立。Webサイト運営における「困った問題」の解決方法をブログで発信。Web サイト運営、ポップデザインや動画制作など、パソコンでモノづくりをしている。