2024.09.13

HTML・CSS

疑似クラス:has()を利用した余白と色の調整

疑似クラスの:has()を利用して、liタグの余白と色を調整をします。
デモページはこちら

共通のCSSは以下になります。
通常時はulタグにgap: 60pxを指定し、liタグの余白を60pxにします。また、liタグの背景色は#1563adにします。

.ul-parent {
  display: flex;
  gap: 60px;
  margin: 0 0 1em;
}
.li-child {
  flex-grow:  1;
  height: 100px;
  background-color: #1563ad;
}

liタグが4カラム以上になった場合、余白を30pxにします。:has(> :nth-child(4))の「>」は直下セレクタです。

.ul-parent:has(> :nth-child(4)) {
  gap: 30px;
}

試しにliタグを5カラムにしてみます。余白は30pxで変わりません。

次に、liタグが6カラムの時限定で余白を10px、背景色を#ed6464にします。

.ul-parent:has(> :nth-child(6):last-child) {
  gap: 10px;
}
.ul-parent:has(> :nth-child(6):last-child) .li-child {
  background-color: #ed6464;
}

liタグが7カラムになると余白は30px、背景色は#1563adに戻ります。

最後に、直後にクラス名style01があれば背景色を#ed6464にします。:has(+ .style01)の「+」は隣接セレクタです。これで以前は不可能だった兄弟要素の兄要素が指定できます。

.li-child:has(+ .style01) {
  background-color: #ed6464;
}

このように疑似クラス:has()で、特定の子要素を持つ親要素、直後に特定の弟要素を持つ兄要素が指定できます。

関連記事

2024.02.19

HTML・CSS

Photoshopのグラデーションオーバーレイをlinear-gradientで適用

Photoshopのグラデーションオーバーレイを、background-imageプロパティのlinear-gradientで適用します。グラデーションの角度は…

2021.08.26

HTML・CSS

svgをCSSのbackground-imageに指定

svgをCSSのbackground-imageに指定します。IE11への対応で書き方が変わりますが、今回はIE11にも対応させます。svgのコードは以下の通り…

2022.05.16

HTML・CSS

メディアクエリのand条件とor条件

CSSのメディアクエリ(Media Queries)のand条件は以下のように記述します。andでつないだ全ての条件を満たす時に適用されます。 or条件は以下の…

2020.12.28

HTML・CSS

CSSロードアニメーションの実装【円の一部分の色を回転】

デモページはこちら 円の一部分の色が回転する動作のCSSロードアニメーションを実装します。ローダーの見た目は全てCSSで実装するため、svgは使用しません。 h…

2024.08.15

HTML・CSS

box-decoration-breakでテキストの背景色を設定

box-decoration-breakプロパティでテキストに背景色を設定します。複数行の文字に対応でき、改行も問題ありません。デモページはこちら 以下のhtm…

上に戻る