Slide 1

Slide 1 text

詳細度調整疑似クラスの使い所を
 考えてみた Presented By @glico800

Slide 2

Slide 2 text

自己紹介 glico Sho Ezawa ( ) / @glico800 ビザスクlite の Webエンジニア
 フロントエンドやUIデザインが好き
 妻・リクガメ・シマリスの4人家族 ?

Slide 3

Slide 3 text

もくじ 1. 注意事項 2. 詳細度調整疑似クラスとは 3. 使い所を考えてみた
 4. まとめ

Slide 4

Slide 4 text

1. 注意事項

Slide 5

Slide 5 text

注意事項 Working Draft 今後仕様の変更や採用の見送りがある可能性 があります。

 詳細度調整疑似クラスは、2019/10/01 時点では W3C 勧告プロセスにおける の段階で あり、 予めご了承ください。

Slide 6

Slide 6 text

2. 詳細度調整擬似クラスとは

Slide 7

Slide 7 text

詳細度調整疑似クラス :where() 詳細度の計算時に無視 - 引数として与えたセレクタを する疑似クラス

 - 英語では “The Specificity-adjustment Psudo-class” - 2019/10/01 時点で W3C 勧告プロセスにおける Working Draft の状態

Slide 8

Slide 8 text

サンプル * Specificity is calculated by https://specificity.keegan.st

Slide 9

Slide 9 text

3. 使い所を考えてみた

Slide 10

Slide 10 text

どうしてわざわざ使い所を考えてみたのか 乱用すると保守性が下がりそう
 擬似クラスを使うセレ クタ ちゃんと使 えば便利そう - 悪名高い !important と同様に詳細度に干渉するの で、 - とはいえ、:hover のような はどうしても詳細度が高くなるため、 “!important” war

Slide 11

Slide 11 text

公式サンプルの解説 - リンクの文字装飾なし、ホバー時は下線 - ナビゲーション上のリンクだけ非マウスホバー時でも下線を付けたい。 参考: https://www.w3.org/TR/selectors-4/#zero-matches

Slide 12

Slide 12 text

:where() を使わなくても実現できる - リンクの文字装飾なし、ホバー時は下線 - ナビゲーション上のリンクだけ非マウスホバー時でも下線を付けたい。 参考: https://www.w3.org/TR/selectors-4/#zero-matches

Slide 13

Slide 13 text

もう少し実用的な例はないか…

Slide 14

Slide 14 text

詳細度が高くなりがちなケース :hover, :checked, :required, :first-child, ... input[type=”radio”], a[target=”_blank”] , ... input[type=”radio”]:checked, a[target=”_blank”]:visited, ... - 擬似クラスを使うケース
 - 属性セレクタを使うケース
 - 上記を両方使うケース


Slide 15

Slide 15 text

ラジオボタンのスタイル例 - クラスセレクタやクラスセレクタ+擬似クラスだと 詳細度が負けてしまう 詳細度 : 0.1.0 詳細度 : 0.2.1

Slide 16

Slide 16 text

:where() を使うと >> クラスセレクタだけでも詳細度が勝てる! << 詳細度 : 0.0.1 詳細度 : 0.1.0

Slide 17

Slide 17 text

まとめ

Slide 18

Slide 18 text

まとめ セレクタの詳細度を無視できる
 乱用には注意
 詳細度が高くなりがちなスタイル >> 用途を限定して使うのが良さそう! << - 詳細度調整擬似クラス :where() を使うと引数に与 えた - 詳細度に干渉するため - 擬似クラスや属性セレクタなどを使ったセレクタの で使うと良さそう 


Slide 19

Slide 19 text

ご清聴ありがとうございました