はじめに
CSSには、特定の条件に応じてスタイルを適用できる「擬似クラス」という便利な仕組みがあります。
その中でも最近注目されているのが :has
、:is
、:where
です。
これらを使うことで、これまでよりも柔軟で効率的なスタイリングが可能になります。
しかし、「どんなときに使うの?」や「どう書けばいいの?」といった疑問を持つ初心者の方も多いのではないでしょうか?
この記事では、これら3つの擬似クラスについて、初心者の方にもわかりやすく解説し、具体的な使用例を紹介します。
ゆうや
これを読めば、CSSがもっと楽しくなる
はずです!
一緒に学んでいきましょう。
:has
とは?
:has
は、CSSの擬似クラスの1つで、「特定の子要素や条件を持つ親要素」に対してスタイルを適用するために使います。
簡単に言うと、「親要素が特定の子要素を含んでいるかどうかをチェック」することができます。
特徴
- 親要素にスタイルを適用
通常、CSSセレクタは「子要素をターゲット」にすることが多いですが、:has
を使うと「子要素の状態を基に親要素をスタイリング」できます。 - 条件を指定する柔軟性
子要素のクラスや属性、状態など、さまざまな条件を指定できます。
主な用途
- フォームのバリデーション
エラーを含むフォームフィールドの親要素にスタイルを付ける。 - ナビゲーションメニューの動的スタイル
アクティブなリンクを持つメニュー項目を強調表示する。
See the Pen :has by yuya o (@yuya-o) on CodePen.
:is
とは?
:is
は、CSSで複数のセレクタをまとめて簡潔に記述できる擬似クラスです。
これにより、同じスタイルを適用したい要素を効率よく指定できます。
特徴
- セレクタを短縮できる
複数の要素に同じスタイルを適用したいとき、:is
を使うことでコードの冗長さを防ぐことができます。 - 特異性の軽減
通常のセレクタの記述に比べて特異性が増加しないため、意図しないスタイルの競合を防ぎやすくなります。
主な用途
- 見出しの統一スタイル
複数の見出し要素に共通のスタイルを適用。 - 特定のタググループへのスタイル適用
例えば、フォーム要素に同じスタイルをまとめて適用。
See the Pen :is by yuya o (@yuya-o) on CodePen.
:where
とは?
:where
は、:is
と似た構文を持つ擬似クラスですが、特異性が常に0である点が特徴です。
これにより、スタイルの競合を避けつつ、優先順位を低くしてスタイルを適用できます。
特徴
- 特異性が0
他のスタイルよりも優先順位を下げて適用することができます。
デフォルトのスタイルやフォールバック用のスタイルを設定する際に便利です。 - 柔軟なセレクタ指定
:is
と同じく、複数のセレクタを一度に指定可能です。
主な用途
- デフォルトスタイルの設定
汎用的な要素に基本スタイルを適用し、必要に応じて上書きするためのベースを作ります。 - エラー回避やメンテナンス性の向上
複数の要素をまとめてスタイリングする際、特異性を抑えることで後からの調整がしやすくなります。
以下のCSSを使うと、nav
、aside
、footer
に同じスタイルを適用できます:
See the Pen :where by yuya o (@yuya-o) on CodePen.
ここで、:where
を使ったスタイルは特異性が0なので、後に記述されるスタイルや通常のセレクタで簡単に上書きできます。
:where
は、優先順位の低いスタイルを設定する際にとても役立つ擬似クラスです。特異性を気にせず柔軟にスタイルを適用できるため、効率的なCSS設計に貢献します。
:has
, :is
, :where
の違いと使い分け
違いの比較表
擬似クラス | 主な役割 | 特徴 | 使用例 | 特異性 |
---|---|---|---|---|
:has | 子要素の状態を基に親要素をスタイリング | 「条件を持つ親要素」を指定可能 | フォームのエラー検知 | 通常のセレクタと同じ |
:is | 複数のセレクタをまとめて簡潔に記述する | コードを短縮でき、特異性はそのまま | 見出しの共通スタイル | 指定したセレクタに依存 |
:where | 複数セレクタをまとめつつ特異性を0にする | デフォルトスタイルの適用に便利 | ベーススタイルの設定 | 常に0 |
使い分けの基準
:has
を使うと良い場面
特定の子要素や条件に応じて親要素を動的に変更する必要がある場合。
例: ナビゲーションメニューで現在のページリンクを持つ親項目を強調する。:is
を使うと良い場面
スタイルが共通する複数のセレクタをまとめて記述したい場合。
例: 複数の見出しタグに統一スタイルを適用する。:where
を使うと良い場面
特異性を抑えたデフォルトスタイルやベーススタイルを設定したい場合。
例: 通常状態のフォーム要素に基本的なデザインを適用し、後から詳細を上書きできるようにする。
ブラウザ対応状況
:has
、:is
、:where
はCSSの新しい機能であるため、ブラウザによる対応状況を確認することが重要です。
以下に各擬似クラスの主要な対応状況をまとめます
1. :has
:has
は比較的新しい擬似クラスで、以下のブラウザで対応しています:
- 対応ブラウザ:
- Chrome 105以降
- Edge 105以降
- Safari 15.4以降
- 非対応ブラウザ:
- 一部の古いブラウザ(例: Internet Explorer)
注意: モダンブラウザを使用していないユーザーがいる場合、フォールバック対応を考える必要があります。
2. :is
:is
は:has
よりも広くサポートされています。
- 対応ブラウザ:
- Chrome 88以降
- Edge 88以降
- Firefox 78以降
- Safari 14以降
比較的安全に使用できますが、古いブラウザ環境で確認したい場合があります。
3. :where
:where
も:is
と同程度のサポートがあります。
- 対応ブラウザ:
- Chrome 88以降
- Edge 88以降
- Firefox 78以降
- Safari 14以降
ブラウザ対応の確認方法
ブラウザ対応状況は、最新情報を確認するためにCan I useを活用することをおすすめします。これにより、使用する機能がターゲットとするユーザー環境で問題なく動作するかどうかを簡単に調べることができます。
さいごに
:has
、:is
、:where
は、それぞれ異なる場面で便利な擬似クラスです。
これらを使いこなせるようになると、CSSの記述がより柔軟で効率的になり、より直感的にデザインを調整できるようになります。
初心者のうちは「どれをどこで使えばいいの?」と迷うこともあるかもしれませんが、この記事で紹介した基本的な使い方や例を参考に、少しずつ自分のプロジェクトで試してみてください。
最後に、モダンブラウザでの対応が進んでいるとはいえ、古い環境での互換性にも注意を払うことをお忘れなく。
適切にフォールバックを用意することで、幅広いユーザーに対応したウェブサイトを作ることができます。
CSSの新しい機能を学びながら、デザインの幅を広げていきましょう!
ぜひ、この記事で得た知識を実践で活用してみてくださいね。