home
twitter
ページトップへ
目次
  • そもそもCSSの「セレクター」とは何か?
  • そもそも「疑似クラス」とは何か?(pseudo-class)
  • 「:has()」とは何か?
  • 「:has()」を使うと何ができる?
  • 「:has()」の使い方!
  • 引数に「相対セレクターリスト」を取る
  • 引数には1つの「相対セレクター」でもOK
  • 実際にスタイルが当たるのは「左側」に書いた要素
  • 1つでも「相対セレクターリスト」の中の条件を満たしていたらOK
  • 「:has()」の具体的な使い方!
  • CSSに用意されている結合子は4つ!
  • 「:has()」に子結合子「>」を使う
  • 「:has()」に次兄弟結合子「+」を使う
  • 「:has()」に後続兄弟結合子「~」を使う
  • 「:has()」に子孫結合子「""」を使う
  • 結合子が省略された場合は子孫結合子「""」が入っていると見なされる
  • CSSで使える結合子について
  • 参考リンク。
  • あわせて読みたい記事。
  • まとめ
about
categories
page
archive
皇帝ペンギンブログ

2024/04/09 (更新日:2024/07/11)

【CSS】疑似クラスの「:has()」の使い方!【分かりやすい】

Categories > CSSのセレクター編
こんばんは!初めましての方は初めまして!
しゅーた(@chibasyuta)です!

この記事ではCSSの疑似クラスの「:has()」の使い方について解説します。

疑似クラスの「:has()」って何??

このような方が対象です。

この記事の内容!

  • そもそもセレクターとは何か?
  • そもそも疑似クラスとは何か?
  • 疑似クラスの「:has()」とは何か?
  • 疑似クラスの「:has()」の使い方
また、下の動画でも疑似クラスの「:has()」の使い方について詳しく解説しているので、一緒に実際にコードを書きながら学びたい方はこちらをどうぞ!

それでは内容へ入ります!

目次
非表示
  • そもそもCSSの「セレクター」とは何か?
  • そもそも「疑似クラス」とは何か?(pseudo-class)
  • 「:has()」とは何か?
  • 「:has()」を使うと何ができる?
  • 「:has()」の使い方!
  • 引数に「相対セレクターリスト」を取る
  • 引数には1つの「相対セレクター」でもOK
  • 実際にスタイルが当たるのは「左側」に書いた要素
  • 1つでも「相対セレクターリスト」の中の条件を満たしていたらOK
  • 「:has()」の具体的な使い方!
  • CSSに用意されている結合子は4つ!
  • 「:has()」に子結合子「>」を使う
  • 「:has()」に次兄弟結合子「+」を使う
  • 「:has()」に後続兄弟結合子「~」を使う
  • 「:has()」に子孫結合子「""」を使う
  • 結合子が省略された場合は子孫結合子「""」が入っていると見なされる
  • CSSで使える結合子について
  • 参考リンク。
  • あわせて読みたい記事。
  • まとめ

そもそもCSSの「セレクター」とは何か?

セレクターの箇所を図示

CSSの「セレクター」とは「どの要素にスタイルを当てるか?」を指定する箇所のことを指します。

ふむふむ。

そもそも「疑似クラス」とは何か?(pseudo-class)

「疑似クラス」とは何か?

「疑似クラス」とは「要素の状態」の指定をすることができるセレクターです。

「:」コロンから始まるキーワードによって指定します。

また、「疑似クラス」は英語で「pseudo class」です。

「どの要素を選択するか」だけじゃなくて「どんな状態の要素を選択するか」の指定ができるので、指定の幅が広がります。

「疑似クラス」の基本的な使い方について詳しくは下記の記事でまとめています!

【CSS】「疑似クラス」とは何か?丁寧に解説!【分かりやすい】

関連記事

「:has()」とは何か?

「:has()」とはCSSの「疑似クラス」の1つです。

「:has()」を使うと何ができる?

h2:has( p ) {
    border-bottom: 3px solid #333;
}

「:has()」を使うと「他の要素との関係性」を指定することによる要素の選択ができます。

なので「リレーショナル疑似クラス」とも呼ばれています。

例えば、「子孫要素にp要素を持つh2要素」のような指定ができます。

「:has()」の登場により、選択できる要素の幅が広がったので、CSSがより便利になりました。
イイね~!

「:has()」の使い方!

では「:has()」の使い方について丁寧に解説しますね!

引数に「相対セレクターリスト」を取る

section:has( + section, ~ h2, > img ) {
    border-bottom: 3px solid #333;
}

「:has()」は引数に「相対セレクターリスト」を取ります。

「相対セレクターリスト」とは「相対セレクター」による「セレクターリスト」のことですね。

「相対セレクター」とは?

「相対セレクター」とは「結合子」と「1つの独立したセレクター」からなるセレクターのことです。

例えば、「+ section」「~ h2」「> img」などが該当します。

「結合子」は通常、独立して有効な「セレクター同士」を「繋ぐ役割」を果たしますが、

「相対セレクター」は「結合子」と「1つの独立して有効なセレクター」だけで成り立っているものを指します。

「セレクターリスト」とは?

「セレクターリスト」とは、「独立して有効なセレクター」をカンマ区切りで書くことで、複数のセレクターをまとめたもの、を指します。

「セレクターリスト」については下の記事で詳しく解説していますので、「セレクターリスト」についてさらに知りたい方はこちらをどうぞ!

【CSS】「セレクターリスト」について解説!【注意点についても】

関連記事

引数には1つの「相対セレクター」でもOK

h2:has( + p ) {
    border-bottom: 3px solid #333;
}

引数には1つの「相対セレクター」でもOKです。

リストが1つしかない「相対セレクターリスト」と見なす感じですね。

実際にスタイルが当たるのは「左側」に書いた要素

h2:has( + p ) {
    border-bottom: 3px solid #333;
}

実際にスタイルが当たるのは「左側」に書いた要素です。

例えば、「h2:has( + p )」だと、()の中の条件を満たす「h2要素」に対してスタイルが当たります。

具体的には上の例だと、「一つ下の兄弟要素にp要素を持つ」「h2要素」が該当しますね。

1つでも「相対セレクターリスト」の中の条件を満たしていたらOK

section:has( + section, ~ h2, > img ) {
    border-bottom: 3px solid #333;
}

1つでも「相対セレクターリスト」の中の条件を満たしていたらOKです。

上の例だと「+ section」「~ h2」「> img」の全ての条件を満たす必要がある訳ではなくて、リストの中のどれか1つの条件を満たしていればOKです。

「:has()」の具体的な使い方!

具体的な使用例を一緒に見ていった方が、使い方が理解しやすいと思うのでいろんな結合子と一緒に使ってみますね。
やったー!

CSSに用意されている結合子は4つ!

まずCSSに用意されている結合子は下記の4つです。

これらと一緒に「:has()」の使い方を解説していきますね。

CSSに用意されている結合子!

  • 子結合子「>」
  • 次兄弟結合子「+」
  • 後続兄弟結合子「~」
  • 子孫結合子「」

では一つずつ解説しますね。

「:has()」に子結合子「>」を使う

「:has()」に子結合子「>」を使う

<section>
    <p>pです。てきすと。てきすと。</p>
    <p>pです。てきすと。てきすと。</p>
    <p>pです。てきすと。てきすと。</p>
</section>

<section>
    <h2>h2です</h2>
    <p>pです。てきすと。てきすと。</p>
    <p>pです。てきすと。てきすと。</p>
</section>
section:has( > h2 ) {
    background-color: skyblue;
}

「:has()」の引数に子結合子「>」を使うと「子要素に指定した要素を持つ」という条件になります。

子孫要素ではなく、子要素なので注意してください。

今回の例だと、2つ目の「section要素」が「子要素にh2要素を持つ」のでスタイルが当たっていますね。

「:has()」に次兄弟結合子「+」を使う

「:has()」に次兄弟結合子「+」を使う

<h2>h2です</h2>
<div>
    <p>pです。てきすと。てきすと。</p>
    <p>pです。てきすと。てきすと。</p>
</div>
<h2>h2です</h2>
<p>pです。てきすと。てきすと。</p>
<p>pです。てきすと。てきすと。</p>

「:has()」の引数に次兄弟結合子「+」を使うと「すぐ下の兄弟要素に指定した要素を持つ」という条件になります。

今回の例だと、1つ目の「h2要素」はすぐ下の兄弟要素が「div要素」なのでスタイルは当たっていなくて、

2つ目の「h2要素」はすぐ下の兄弟要素が「p要素」なのでスタイルが当たっています。

「:has()」に後続兄弟結合子「~」を使う

「:has()」に後続兄弟結合子「~」を使う

<div class="container">
    <p>pです。てきすと。てきすと。</p>
    <p>pです。てきすと。てきすと。</p>
    <h2>h2です</h2>
    <p>pです。てきすと。てきすと。</p>
    <p>pです。てきすと。てきすと。</p>
    <h2>h2です</h2>
</div>

「:has()」の引数に後続兄弟結合子「~」を使うと「以降の兄弟要素に指定した要素を持つ」という条件になります。

今回の例だと、1つ目の「h2要素」は以降の兄弟要素に「p要素」を持つのでスタイルが当たっています。

2つ目の「h2要素」は以降の兄弟要素に「p要素」がないのでスタイルが当たっていません。

「:has()」に子孫結合子「””」を使う

「:has()」に子孫結合子「""」を使う

<section>
    <p>pです。てきすと。てきすと。</p>
    <div>
        <h2>h2です</h2>
        <p>pです。てきすと。てきすと。</p>
        <p>pです。てきすと。てきすと。</p>
    </div>
</section>

<section>
    <p>pです。てきすと。てきすと。</p>
    <p>pです。てきすと。てきすと。</p>
    <p>pです。てきすと。てきすと。</p>
</section>
section:has( h2 ) {
    background-color: skyblue;
}

「:has()」の引数に子結合子「””」を使うと「子孫要素に指定した要素を持つ」という条件になります。

今回の例だと、1つ目の「section要素」が「子孫要素にh2要素を持つ」のでスタイルが当たっていますね。

ですが、2つ目の「section要素」は「子孫要素にh2要素を持っていない」のでスタイルが当たっていません。

結合子が省略された場合は子孫結合子「””」が入っていると見なされる

section:has(h2) {
    background-color: skyblue;
}

結合子が省略された場合は子孫結合子「””」が入っていると見なされます。

なので「section:has(h2)」と書いた場合は「h2要素を子孫要素に持つsection要素」という意味になりますね。

CSSで使える結合子について

CSSで使える結合子については下記の記事でまとめていますので、詳しく知りたい方はこちらの記事をどうぞ!

【CSS】セレクターの「子孫結合子」について解説!【descendant combinator】

関連記事

【CSS】セレクターの「子結合子」について解説!【child combinator】

関連記事

【CSS】「次兄弟結合子」について丁寧に解説!【隣接兄弟結合子】

関連記事

【CSS】「後続兄弟結合子」について解説!【subsequent sibling combinator】

関連記事

参考リンク。

仕様書。
https://drafts.csswg.org/selectors/#relational

MDN。
https://developer.mozilla.org/ja/docs/Web/CSS/:has

あわせて読みたい記事。

大学生が夏休みにweb制作で13万円稼ぐまでにやったこと。【経験談】

関連記事

まとめ

CSSの「セレクター」とは「どの要素にスタイルを当てるか?」を指定する箇所のことを指す。

「疑似クラス」とは「要素の状態」の指定をすることができるセレクター。

「:」コロンから始まるキーワードによって指定する。

「:has()」はCSSの「疑似クラス」の1つ。

「:has()」を使うと「他の要素との関係性」を指定することによって要素の選択ができる。

なので「リレーショナル疑似クラス」とも呼ばれている。

「:has()」は引数に「相対セレクターリスト」を取る。

「相対セレクター」とは「結合子」と「1つの独立したセレクター」からなるセレクターのこと。

こんな感じですかね!

この記事が気に入った方は僕のTwitter(@chibasyuta)のフォローもお願いします!

また、下の動画でも疑似クラスの「:has()」の使い方について詳しく解説しているので、一緒に実際にコードを書きながら学びたい方はこちらをどうぞ!

それではこんな感じでこの記事を終わります!

ではまた!

自分のロゴ!

皇帝ペンギン

全力で、書きます。
少しでもお役に立てたら幸いです。
楽しんで読んで下さい 。-_- 。
よろしくお願いします!

x(旧twitter) youtube
Categories
  • トップへ
  • ITパスポート (1)
  • programming (168)
    • CSSのアニメーション編 (26)
    • CSSのグリッドレイアウト編 (1)
    • CSSのセレクター編 (58)
    • CSSのフレックスボックス編 (1)
    • CSSのメディアクエリー編 (7)
    • CSSの基本編 (34)
    • HTMLのformタグ編 (1)
    • HTMLの基本編 (3)
    • JavaScriptの入門編 (30)
    • JavaScriptの基本編 (5)
    • Web制作をする環境を整えよう! (1)
  • Uncategorized (23)
  • VScode (1)
  • おすすめ商品! (1)
  • クラロワ (2)
  • マーケティング (17)
  • 大学生活 (7)
  • 心理学 (9)
  • 映画 (1)
  • 法学 (4)
  • 経済学 (4)
  • 読書 (7)
Pages
  • プライバシーポリシー
  • 免責事項
  • プロフィール
Archive
  • 2025年3月 (1)
  • 2025年1月 (9)
  • 2024年12月 (13)
  • 2024年11月 (5)
  • 2024年10月 (10)
  • 2024年9月 (15)
  • 2024年8月 (5)
  • 2024年7月 (6)
  • 2024年6月 (5)
  • 2024年5月 (10)
  • 2024年4月 (24)
  • 2024年3月 (11)
  • 2024年2月 (6)
  • 2024年1月 (10)
  • 2023年12月 (4)
  • 2023年11月 (3)
  • 2023年10月 (2)
  • 2023年9月 (3)
  • 2023年8月 (6)
  • 2023年7月 (3)
  • 2023年6月 (8)
  • 2023年5月 (2)
  • 2023年3月 (1)
  • 2023年2月 (1)
  • 2022年10月 (2)
  • 2022年9月 (2)
  • 2022年8月 (8)
  • 2022年7月 (2)
  • 2022年6月 (6)
  • 2022年5月 (9)
  • 2022年4月 (2)
  • 2022年2月 (4)
  • 2021年12月 (1)
  • 2021年11月 (4)
  • 2021年10月 (8)
  • 2021年9月 (14)
  • 2021年8月 (6)
  • 2021年6月 (1)
  • 2021年5月 (2)
  • 2021年4月 (1)
  • 2021年3月 (1)
  • 2021年2月 (2)
  • 2020年10月 (1)
  • 2020年7月 (1)
  • 2020年4月 (1)
  • 2020年1月 (1)
  • 2019年12月 (2)
© Copyright Syuta Chiba, 2019 All Rights Reserved.