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
属性についてはこちら。
- 4.2.4 The link element — HTML5
属性値が指定のものか、その後ろにハイフンが付いているもの [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はだめ。
参考
- Selectors Level 3
- 属性セレクタ – CSS | MDN … Mozillaの。日本語