CSS おれおれ Advent Calendar 2012 – 09日目

CSSのセレクターっていうと要素、クラス、IDでの選択が一般的で、あとは:hoverとかの疑似クラスがあるような感じですが、加えて「属性セレクター」ってのがありマウス。

属性セレクター?

要素の検索の条件に、その要素が持つ属性を指定するものです。優先順位はクラスセレクターと同じです。

IEは7から利用できます。

「属性」はわかりますか。HTMLの、タグの中に書くやつです。

<input type="text" name="id" value="" maxlength="8" size="8" />

このうちinputが要素名で、type="text", name="id", value="", maxlength="8", size="8"なんてのが属性です。また左側typeが属性名、右側textが属性値です。

属性セレクターの書き方

何パターンかあります。

属性が付いているもの [att]

属性を持っている事だけが条件です。値は何でも構いません。

例えばmaxlengthの指定があるものだけ背景色を変える場合、以下のように書きます。

[maxlength] {
  background-color: #fee;
}

属性値が指定のもの [att=val]

属性が指定の値を与えられている場合です。

以下はname="id"の要素だけ太字にする例です。

[name=id] {
  font-weight: bold;
}

空白区切りの属性値が指定のものを含む [att~=val]

classのように、空白文字(スペースや改行など)で区切って複数の値を設定できるような場合、そのいずれかに一致する要素を選択します。

例えばリンクのa要素のrel属性なんかも空白区切りですね。リンク先の情報を与える事ができます。

次ページへのリンクを強調する例です。

<a href="page2.html" rel="next prefetch">Next</a>
[rel~=next] {
  color: red;
}

rel属性についてはこちら。

属性値が指定のものか、その後ろにハイフンが付いているもの [att|=val]

値がvalか、あるいはval-…であるものが対象です。グローバル属性のlangとか。

日本語ページへのリンクの背景に日本の国旗を表示する例です。

<a href="ja.html" hreflang="ja-JP">Japanese Edition</a>
[hreflang|=ja] {
  background-image: url("flag-jp.png");
}

(あんまり便利そうな使い方が思いつかなかった……。)

属性値が指定のもので始まるもの [att^=val]

外部サイトへのリンクに枠線を表示させます。

[href^=http://],
[href^=https://] {
  border: solid 1px;
}

ちなみに正規表現の^も先頭を表してますね。

属性値が指定のもので終わるもの [att$=val]

PDFへのリンクを強調表示します。

[href$=.pdf] {
  font-style: oblique;
}

属性値が指定のものを含むもの [att*=val]

先頭でも末尾でも、あるいは前後が空白でもハイフンでもその他普通の文字でも、選択します。

[href*=hello] {
}

(もう例が思いつかない……。)

属性値が指定のものを含まないもの……? [att!=val]

これはありません。

jQueryだと使えるんですが、それはjQuery/Sizzleが独自に拡張したセレクターですので。

まとめ

属性セレクターの例

記述例 マッチするタグ例
[target] <a href="popup.html" target="_blank">Show It</a>,
<a href="/index.html" target="_top">HOME</a>,
<a href="#" target="">Hmmm</a>
[target=_blank] <a href="popup.html" target="_blank">Show It</a>
[rel~=next] <a href="page2.html" rel="next prefetch">Next</a>
[hreflang|=ja] <a href="ja.html" hreflang="ja-JP">Japanese Edition</a>
[href^=http://] <a href="http://example.com">Other site</a>
[href$=.pdf] <a href="detail.pdf">Detail</a>
[href*=hello] <a href="hello">Hello</a>,
<a href="xxxhelloxxx">Hello</a>,
<a href="hey guis hello-world">Hello</a>

対応

IE 7以上, その他一般的なブラウザーで利用可能です。

IE 6はだめ。

参考