【ハズセレクター】
:has() セレクター とは?
💡 「この子を持つ親」を指名できる、CSSが長年待ち望んだ親セレクタ
📌 このページのポイント
- 子要素や後続要素の状態に応じて親要素を選択できる擬似クラスセレクタ
- 長年CSSに存在しなかった「親セレクタ」をついに実現した画期的な機能
- JavaScriptなしで「チェックボックスが選択されたら背景を変える」などの動的スタイリングが可能
:has()って普通のセレクタと何が違うの?
従来のCSSセレクタは「親 > 子」のように上から下への指定しかできなかったんだ。:has()を使うと「この子要素を含む親」のように、下から上への選択ができるようになったんだよ
たとえばどんなふうに使うの?
たとえば「form:has(input:invalid)」と書くと、バリデーションエラーのある入力欄を含むフォーム全体の枠を赤くできるよ。今まではJavaScriptでクラスを付け外ししていた処理がCSSだけで実現できるんだ
組み合わせて使うこともできるの?
もちろん。「:has(.active):not(:has(.error))」のように、:notや他の擬似クラスと組み合わせられるよ。「activeクラスの子を持つが、errorクラスの子は持たない要素」なんて指定もできるんだ
パフォーマンスは大丈夫なの?
まとめ:ざっくりこれだけ覚えればOK!
「:has() セレクター」って出てきたら「子要素の状態で親を選択できるCSSの親セレクタ」と思えればだいたいOK!
📖 おまけ:英語の意味
「:has() pseudo-class」 = 〜を持つ(擬似クラス)
💬 英語のhasは「〜を持っている」という意味。「この子要素を持っている親」を選ぶセレクタだよ