【入門編】 :where() 擬似クラス – CSS実践ガイド

こんにちは!フロントエンドの現場で長年コードを書き続けていると、たまに「なんでこんなにCSSが効かないんだ……」と頭を抱えたくなる夜がありますよね。

特に、せっかく書いたスタイルが、別の場所で書いた「詳細度(Specificity)の高いセレクタ」に上書きされて消えてしまう現象。あれ、本当に心が折れますよね。

今日はそんなCSSの「詳細度」という厄介なルールを、まるで魔法のように無効化してしまうすごい道具、`:where()` 擬似クラスについてお話しします。難しく考えなくて大丈夫。一緒に紐解いていきましょう!

—

CSSの詳細度って、何に似ている?

CSSには「より具体的に指定した方が勝つ」というルールがあります。たとえば、「全人類」を指定するより「東京都の渋谷区に住む〇〇さん」を指定する方が、ピンポイントで情報を伝えられますよね。

CSSも同じで、`div`(タグ)よりも `.card`(クラス)が強く、さらに `#header`(ID)はめちゃくちゃ強い。この「強さ」のことを詳細度と呼びます。

でも、大規模なサイトを作っていると、この「強さの殴り合い」でCSSがどんどん汚れていってしまいます。そこで登場するのが `:where()` です。

—

`:where()` は「詳細度を0にする」魔法の箱

`:where()` は、中に書いたセレクタの「強さ」をすべてゼロにしてくれる、特別な入れ物のようなものです。

イメージしてみてください。あなたは新しく引っ越した部屋に、前の住人が置いていった「重たい家具(強いCSS)」があるとします。普通はそれを動かすのに一苦労ですよね。でも、`:where()` という魔法の箱に入れてしまえば、その家具たちは「ただの軽い置物」になってしまうんです。

実践!コードで見てみよう

まずは、`:where()` を使わない、よくある「詳細度で負けちゃう」例です。

/ 普通の書き方 /
.article-text p {
color: red; / ここが強い! /
}

/ 後から書いたのに、負けてしまう /
p {
color: blue; / さっきの .article-text p に負けて赤のままになる /
}

これが `:where()` を使うと、こうなります。

/ :where()を使うと、詳細度が0になる! /
:where(.article-text) p {
color: red;
}

/ これなら、後から書いたこっちが勝てる! /
p {
color: blue; / 見事、青色に変わります /
}

どうでしょう? `p` タグ単体で指定したときと、`:where(.article-text) p` で指定したとき、どちらも「強さが0」なので、後から書いた方が素直に適用されるんです。

—

なぜこの機能が現場で重宝されるのか?

私が現場で `:where()` を使う最大の理由は、「リセットCSSやライブラリとの喧嘩を防ぐため」です。

自分で書いたCSSが、外部から読み込んだライブラリのCSSに負けて、レイアウトが崩れた経験はありませんか?ライブラリ側が `:where()` を使ってスタイルを定義してくれていれば、私たちは自分のスタイルをあてるときに、わざわざ詳細度を上げるための無茶な書き方(クラスを重ねたり `!important` を使ったり)をする必要がなくなるんです。

「CSSをきれいに保ちたいなら、なるべく詳細度は上げない」というのが、プロの現場での鉄則です。`:where()` は、その鉄則を守るための非常に強力な味方なんですよ。

—

今日のまとめ:恐れず使ってみよう

  • 詳細度とは「強さ」のこと。 強すぎると後から修正するのが大変になる。
  • :where() は「強さをゼロにしてくれる」魔法の箱。
  • リセットCSSや、汎用的なスタイルを作る時に使うと、後で修正しやすいコードになる。

最初は少し不思議な書き方に感じるかもしれませんが、慣れてしまえば「これなしで CSS 書くの、ちょっと怖いな」と思うくらい、頼りになる存在になるはずです。

もしコードを書いていて「どうしてもスタイルが上書きできない!」と困ったときは、一度 `:where()` のことを思い出してみてください。きっとあなたのCSSライフが、もっとシンプルで自由なものに変わるはずです。

応援しています。あなたの書くコードが、今日もきれいにブラウザで表示されますように!

コメント

タイトルとURLをコピーしました