【入門編】 空白区切りリストの包含 [attr~=value] – CSS実践ガイド

こんにちは!フロントエンドの現場を長年うろついている、ちょっとお節介なCSSアーキテクトです。

CSSを書き始めた頃って、セレクタの記号の多さにめまいがしませんか?
「`.`はクラスだっけ? `#`はIDだっけ? じゃあ、この変なカギ括弧 `[]` やニョロニョロした記号 `~=` は一体なに!?」って、キーボードをそっと閉じたくなる夜もありますよね。大丈夫ですよ、最初はみんなそこを通ります。

今回は、そんなCSSの数あるセレクタの中でも、ちょっと通好みなのに、知っていると「おっ」と周りに一目置かれる`[attr~=value]`(空白区切りリストの包含)という機能について、おしゃべりするみたいに優しく解きほぐしていきますね。

難しく考えず、まずは身近な例からいってみましょう!

—

1. 例え話:クローゼットの中の「タグ付きハンガー」

想像してみてください。あなたの部屋のクローゼットに、たくさんの洋服がかかっています。
その洋服のハンガーには、いくつかの「タグ」がペタペタと貼られています。

例えば、あるシャツのハンガーには、こんな風にスペース(空白)を空けてタグが貼られています。
`[ カジュアル 夏用 お気に入り ]`

ここで、あなたが「今日みたいな暑い日だし、『夏用』っていうタグが含まれている服だけをパパッと選び出したいな」と思ったとします。

CSSの `[attr~=value]` は、まさにこの「空白で区切られたいくつかの言葉(リスト)の中から、特定の単語がポツンと含まれているやつを探し出す」ための魔法の呪文なんです。

  • `attr` = クローゼットのタグ(属性)
  • `value` = 探したい特定の単語(今回は「夏用」)
  • `~=` = 「この言葉、この中に含まれてる?」っていうチェックの目印

「スペースで区切られた単語のグループの中から、狙ったワードをピンポイントで捕まえる」。このイメージだけ、まずはポッケに入れておいてくださいね。

—

2. 実際のコードで見てみよう

Webの現場でも、この「1つの属性の中に、スペース区切りで複数の意味を持たせたい」という場面はよくあります。一番分かりやすいのは、ボタンのデザインや、アイコンの指定なんかですね。

実際にコードを書いてみましょう。HTMLとCSSを一緒に見てみます。

HTMLのイメージ




ここで注目してほしいのが、最初のボタンの `class=”btn primary large”` という部分です。
一つの `class` 属性の中に、`btn`、`primary`、`large` という3つの単語が半角スペースで区切られて入っていますよね。

CSSの書き方と `~=` の出番

さて、「この中のどれでもいいから、`large` という単語が含まれているボタンの文字を、ちょっと大きく太っ腹にしたい!」と思ったとします。

そんなとき、こう書くんです。

/ class属性の中に、空白区切りで “large” という単語が含まれている要素を狙い撃ち! /
[class~=”large”] {
font-size: 1.25rem; / ちょっと文字を大きく /
font-weight: bold; / 太字にする /
}

このCSSを書くと、HTMLの1番目と3番目のボタン(`large`を含んでいるもの)だけに、このスタイルがフワッと適用されます。真ん中のボタンは `large` がないのでスルーされます。賢い子でしょう?

—

3. ここでよくある「つまずきポイント」をそっとフォロー

CSSを触り始めたばかりの頃、似たような記号が多すぎて混乱しがちなんですよね。
特にこの `~=`(チルダ付きイコール)と、よく間違えられるのが `=`(アスタリスク付きイコール) です。

「あれ、文字が含まれてるかどうかなんだから、どっちでも一緒じゃないの?」って思いませんか? ここがとっても大切な分かれ道です。

  • `[class~=”word”]` (今回の主役)
  • 空白区切りの「単語単位」で探します。
  • だから、`class=”my-button large”` なら見つかりますが、もし `class=”larger-btn”` だった場合、`large` という単語そのものではないので、ヒットしません(部分一致ではなく、独立した単語を探すため)。
  • `[class=”word”]` (部分一致お化け)
  • 単語の区切りに関係なく、文字の一部として含まれていれば何でも捕まえます。
  • だから、`class=”larger-btn”` の中の `large` すらも見つけ出しちゃいます。

「うわ、厳密なんだなぁ」って思いました? そうなんです。
`~=` は、「あくまでスペースで区切られた『単語の仲間たち』の中に、あの単語がいるかどうか」を厳しめにチェックする、ちょっと真面目な管理人さんのようなイメージですね。

—

4. 実務でどう使う?ちょっとした実用例

「で、実際のWeb制作でこれ、いつ使うの?」って思いますよね。

例えば、CMS(WordPressなど)が自動出力するクラスや、独自で作るUIコンポーネントで、「状態」や「サイズ」をひとつのHTML属性にまとめたいときによく使われます。

春の新作セール情報はこちら!
システムのメンテナンスのお知らせ

こんな風に、`data-` 属性を使って情報のタグ付けをしている場合、CSS側で次のようにスタイリングできます。

/ data-tags属性の中に “pickup” という単語が含まれているカードだけ、枠線を金色にする /
[data-tags~=”pickup”] {
border: 2px solid gold;
background-color: #fffdf0;
}

これなら、JavaScriptで複雑なクラスの付け替えをしなくても、CSSだけで「お、この記事はピックアップだな」と判断してリッチな装飾を施してあげることができます。なんだかちょっと、コードを書くのが楽しくなってきませんか?

—

最後に:CSSはあなたを急かしたりしません

属性セレクタの世界は、最初は記号ばかりで暗号のように見えるかもしれません。
でも、今日お話しした `[attr~=value]` は、クローゼットのタグからお目当ての服を探すような、案外とっても人間味のある優しい仕組みです。

もし実際にコードを書いてみて、「あれ、効かないな?」と思ったら、それはスペルミスか、あるいはスペースの入れ忘れ、もしくは単語単位じゃなくて部分一致(`=`)にすべきだったのかな?という小さなすれ違いだけです。

CSSはいつでもあなたの味方ですし、間違えてもパソコンが爆発することはありません(笑)。
怖がらずに、自分のペースでエディタにコードを打ち込んで、ブラウザの画面が変わる瞬間を面白がってみてくださいね。

あなたの毎日のコーディングが、少しでもワクワクする楽しい時間になりますように!

コメント

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