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()で、特定の子要素を持つ親要素、直後に特定の弟要素を持つ兄要素が指定できます。

関連記事

2023.02.22

HTML・CSS

縦積みinline-flexの折り返しとwriting-modeによる代用

inline-flexで縦積みにした場合の折り返しと、writing-modeで縦積みにした場合の折り返しを確認します。デモページはこちら htmlは以下の単純…

2021.02.06

HTML・CSS

高さを判定してoverflow-yプロパティで縦スクロール

画面の高さが要素の高さよりも低くなった場合、要素にoverflow-yプロパティを適用して要素内のコンテンツを縦スクロールで表示します。デモページはこちら 画面…

2020.08.30

HTML・CSS

Font Awesomeの使い方

Font Awesomeの公式サイトで使用したいアイコンフォントを選びます。Iconsのページでアイコンフォントの一覧が確認できます。有料版と無料版があり有料版…

2020.10.15

HTML・CSS

CSS疑似要素のcontentプロパティにjQueryで設定したカスタムデータ属性の値を指定

デモページはこちら CSS疑似要素のcontentプロパティにjQueryで設定したカスタムデータ属性の値を指定します。以下のhtml構造でテストします。デモペ…

2021.07.12

HTML・CSS

CSSカスタムプロパティの使い方

CSSカスタムプロパティはCSS変数とも呼ばれ、CSS内に変数を定義して各プロパティの値で呼び出して使用します。一般的に変数は:rootに定義してグローバル変数…

上に戻る