CSSだけで親要素にスタイルをつける!:has()擬似クラスの使い方と注意点【2025年対応】
スポンサーリンク

こんにちは!静岡県浜松市でWEBデザイナーをしています小瀧です。

CSSでは長らく「親要素」に条件付きのスタイルを当てることができず、JavaScriptを使わなければ実現できないシーンが多くありました。

しかし、ついにその常識を覆す機能が登場しました。
それが、CSSの:has()擬似クラスです。

この記事では、Webデザイナー初心者から中・上級者までに役立つよう、:has()の基本から実務で使える応用例、対応ブラウザや注意点まで丁寧に解説します!

`:has()`とは?CSSで親要素にスタイルをつけられる唯一の方法


これまでのCSSは、「親 → 子」へのスタイル適用は可能でしたが、「子 → 親」へのスタイルの反映はできないという制限がありました。
たとえば、「ある子要素が存在するときに親要素の色を変える」といったことはJavaScriptでDOMを操作しないと実現できなかったのです。

ですが、:has()擬似クラスを使えば、
CSSだけで「子要素の状態に応じて親要素にスタイルを当てる」ことが可能になります。

基本的な構文と使用例

 .card:has(img) { border: 2px solid blue; } 

このコードでは、.card要素の中にimgタグがある場合、その.cardにだけ青いボーダーが付きます。これまでは実現が難しかったスタイルが、CSSだけでシンプルに書けるようになりました。

See the Pen
Untitled
by 小瀧賢 (@ekwwawpb-the-styleful)
on CodePen.


画像がある.cardだけに枠線をつけたい、ボタンがあるときだけ背景を変えたい、など、UI演出の自由度が格段に広がります!

スポンサーリンク

実務で使える`:has()`活用例5選

  1. 未入力のフォームフィールドに警告表示
    フォームのinput:invalidなどを子としてチェックし、親のフォーム枠に警告スタイルを追加できます。
  2. 商品カードにボタンがあるときだけ影を強調
    CTAボタンの有無でスタイルを切り替え、重要な商品を目立たせられます。
  3. 在庫なしラベルがある場合だけ背景をグレーに
    .product:has(.soldout)のように、在庫切れの商品カードにだけ明確な視覚差を与えられます。
  4. ドロップダウンがあるナビにだけ矢印表示
    .nav-item:has(ul)で、サブメニューを持つナビだけ矢印アイコンを出せます。
  5. 任意の子classに応じて親に条件付きデザイン
    .block:has(.highlight)などで、特別な状態の子を含むブロックに装飾ができます。

対応ブラウザ状況(2025年最新版)

2025年5月現在、以下のブラウザで:has()がサポートされています。

  • Google Chrome(バージョン105以上)
  • Safari(バージョン15.4以上)
  • Microsoft Edge(Chromiumベース)

Firefoxでは、2025年5月時点で:has()は未対応です。使用する際は、ユーザーのブラウザ環境を考慮しましょう。

パフォーマンスや注意点

:has()は非常に強力なセレクタですが、DOM構造が複雑なページで多用すると、レンダリングパフォーマンスに影響を及ぼす可能性があります。

特に、動的に要素が増減するSPA(シングルページアプリケーション)などでは、無計画に使うとスタイル適用に時間がかかるケースも報告されています。

囲い線のポイント
「常に使う」のではなく「ポイントで使う」が賢い方法です。CSSだけで実装したいとき、かつ対応ブラウザを確認できるケースで使いましょう。

 

`:has()`が使えることで実現できるUIの進化

たとえば、以下のような「子の状態に応じた親のデザイン変更」がCSSだけで完結できます。

 .form-group:has(input:invalid) { background-color: #ffecec; border: 1px solid red; } 

このように、「エラー状態のフィールドが含まれている」場合だけフォーム全体を赤くすることが可能になります。従来のようにJSでイベントを拾ってクラスを付与するといった手間が不要です。

まとめ:CSSだけで表現の幅が格段に広がる

:has()の登場によって、CSSだけでインタラクション豊かなUIが作れる時代が到来しました。

もちろんまだすべてのブラウザで使えるわけではありませんが、今後の普及を見越して部分的に導入し、徐々に応用範囲を広げていくことが推奨されます。

Web制作の現場でも活用の幅が広がる:has()、ぜひこの機会に習得して、クリーンで柔軟なCSS設計を目指しましょう。

関連記事

静岡県浜松市でWebサイト制作・CSS設計・UI改善などをご希望の方は、お気軽にsatokotadesignにご相談ください。

 

satokotadesignキャンペーン実施中!

浜松市の飲食店限定|ホームページ無料作成サービス
ぶっちゃけ無料相談会!ホームページ制作の悩み話してみませんか?
satokotadesign4周年記念キャンペーン

静岡県浜松市でホームページ制作ならsatokotadesign
静岡県浜松市でホームページ制作ならsatokotadesign

スポンサーリンク
おすすめの記事