【CSS】疑似クラス:where()、:is()を使ってみる
2023.09.20 Posted by Coding_team
こんにちは、今回はCSSの便利な疑似クラス:where()、:is()について紹介したいと思います。
この2つの疑似クラスについては今まで気にはなっていたのですが、各ブラウザの対応状況などから使用するのを見送っていました。当時はIEも一応まだ現役でしたので。。
IEも使えなくなった今の状況、ふと思い出して今一度対応状況を調べてみたら使用しても問題無さそうになっていました。
気づくのが少し遅かったかもしれませんが、備忘録もかねて紹介していきたいと思います。
まずこの疑似クラスで何が出来るかと言うと、CSSの記述量を減らせます。以下に:where()を用いて簡単な例を用意しましたのでご覧ください。
1 2 3 4 5 6 7 8 9 10 |
/* 通常の書き方 */ .where .conetnts01 a, .where .conetnts02 a { color: red; } /* :where()を用いた書き方 */ .where :where(.conetnts01, .conetnts02) a { color: red; } |
このようにまとめて書くことが可能となります。:is()でも同様となります。
では:where()と:is()は何が違うのかという話になりますが、以下の開発者ドキュメントにはこのように書いてあります。
:where()と:is()の違いは、:where() は詳細度が常に0であるのに対して、:is()は引数内で最も詳細度の高いセレクターの詳細度を取ります。
なるほど、詳細度が違うので用途によって使い分けてくれということですね。
どういうことか分かりづらいと思うので簡単なDEMOを用意して挙動を確認してみます。
DEMOの主要部分のHTMLは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<div class="block where"> <h2>:where()で指定</h2> <div class="conetnts01"> <p>ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト<a href="#">ダミーテキスト</a></p> </div> <div class="conetnts02"> <p>ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト<a href="#" class="link">ダミーテキスト</a></p> </div> </div> <div class="block is"> <h2>:is()で指定</h2> <div class="conetnts01"> <p>ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト<a href="#">ダミーテキスト</a></p> </div> <div class="conetnts02"> <p>ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト<a href="#" class="link">ダミーテキスト</a></p> </div> </div> |
CSSは以下のように書いてみました。
1 2 3 4 5 6 7 8 9 10 11 12 |
.where :where(.conetnts01, .conetnts02) a { color: red; } .is :is(.conetnts01, .conetnts02) a { color: red; } .where .link, .is .link { color: blue; } |
作成したDEMOは以下になります。
→DEMO
CSSの9~12行目の記述で詳細度が低い:where()の方は上書きされましたが、:is()の方はそのままなことが確認できました。
:where()と:is()の使い分けがとても大事になりそうです。
ベースとなる部分は:where()で書いて、細かい部分を上書きなりしたい時に:is()を使用するという方針になりそうです。
:where()の詳細度が0であるという部分がミソだと感じました。これは使い道は結構ありそうですね。
以上クリエイターズブログでした。
関連記事こちらの記事も合わせてどうぞ。