Kraken というフロントエンドのフレームワークのコードを見ていたら、なるほどと感心する CSS セレクターの書き方を見つけた。grid-one
、grid-two
みたいな接頭辞つきのクラス名にマッチするセレクターで、こんな感じ:
[class^="grid-"],
[class*=" grid-"] {
/* ... */
}
単純に考えると [class*="grid-"]
でいけそうな気がするけど、それだと foo-grid-
みたいに頭に余計なものがついていてもマッチしてしまう。そこでホワイトスペースを接頭辞の前に置いて [class*=" grid-"]
とすることでそれを避けている。すると今度は class="grid-one"
みたいに class
属性の先頭で頭にホワイトスペースがない場合にマッチしないので、[class^="grid-"]
という前方一致のルールを追加。
ひょっとすると [class|="grid"]
でスマートに解決できそう、とか思うけど、それだと接頭辞ではない grid
クラスもマッチしてしまうし、複数のクラスがあった場合に先頭のものしかマッチしない。|
は基本的に言語コード用と考えたほうが良さそう。
この接頭辞パターンの ^
を $
にしてホワイトスペースとハイフンの位置を入れ替えれば接尾辞にマッチするパターンも作れる。
[class$="-item"],
[class*="-item "] {
/* ... */
}
簡単なデモも書いてみた。
こういう正規表現みたいなの日本語で説明するのすごく面倒…