属性セレクタ。
CSSでのセレクタ(選択子)の一つである、属性セレクタに関して解説します。
属性セレクタのタイプ。
属性セレクタには幾つかのタイプがあります。
- 当該属性名がある要素に適用する属性セレクタ
- 属性値を問わない場合です。
- 指定された値の指定された属性がある要素に適用する属性セレクタ
- 特定の属性値を持つ場合に限り有効です。
- 指定された属性に特定の語句を含む要素に適用する属性セレクタ
- 複数の語句を持つ属性において、指定した語句が含まれている場合に有効です。
- 指定された属性に特定の語句で始まる要素に適用する属性セレクタ
- 属性値の冒頭が指定された語句で、その直後に「
-」が続く場合に有効です。HTMLなどのlang属性の値に対応します。
以下、順番に解説します。
当該属性名がある要素に適用する属性セレクタ。
当該属性名の属性があれば、その属性値を問わず対象となる属性セレクタです。
当該属性名がある要素に適用する属性セレクタの書式。
属性セレクタのうち、当該属性名の属性があればその属性値を問わず対象とする場合の書式は、以下のようになります。
セレクタ[属性名]{…}
ここで、セレクタ
としては、
- 特定の属性を持つ特定の要素なら当該要素のタイプセレクタ(型セレクタ・要素セレクタ)つまり要素名
- 要素名を問わない場合は全称セレクタ(汎用セレクタ)つまり「
*」
となりますが、要素名を問わない場合なら全称セレクタ(汎用セレクタ)を省略出来ます。
指定された値の指定された属性がある要素に適用する属性セレクタ。
当該属性名の属性があり、且つ属性値が指定された値である場合に対象となる属性セレクタです。
指定された値の指定された属性がある要素に適用する属性セレクタの書式。
属性セレクタのうち、当該属性名の属性値が指定された値である場合に対象とする場合の書式は、以下のようになります。
セレクタ[属性名=属性値]{…}
セレクタ
は当該属性名がある要素に適用する属性セレクタと同じです。
指定された値の指定された属性がある要素に適用する属性セレクタの記述例。
例えば、type="image/gif"属性を持つ<object>要素、すなわち<object type="image/gif">要素へのセレクタは、
object[type="image/gif"] {…}
と記述します。
指定された属性に特定の語句を含む要素に適用する属性セレクタ。
当該属性名の属性があり、且つ属性値に指定した語句が含まれている場合に対象となる属性セレクタです。
- このとき、当該属性値は語句を空白で区切って並べているものとします。
指定された属性に特定の語句を含む要素に適用する属性セレクタの書式。
属性セレクタのうち、当該属性名の属性値に指定した語句が含まれている場合に対象とする場合の書式は、以下のようになります。
この場合、以下のように記述します。
セレクタ[属性名~=属性値に含まれる語句]{…}
- 属性値に含まれる語句には空白文字を含める事は出来ません。
セレクタ
は当該属性名がある要素に適用する属性セレクタと同じです。
指定された属性に特定の語句を含む要素に適用する属性セレクタの記述例。
例えば、rel属性に「nofollow」値を含める<a>要素、すなわち<a type="… nofollow …">要素へのセレクタは、
a[type~="nofollow"] {…}
と記述します。
この場合、
<a rel="nofollow">要素<a rel="nofollow○○">要素<a rel="○○nofollow">要素
等がこのセレクタの対象となります。
指定された属性に特定の語句で始まる要素に適用する属性セレクタ。
当該属性名の属性があり、且つ属性値が指定した語句で始まっている場合に対象となる属性セレクタです。
- このとき、当該属性値は語句を「
-」で区切って並べているものとします。 - これは、lang属性で指定された言語をセレクタとする場合に用いられます。
- lang属性以外での利用を禁じている訳ではありませんが、他の属性では利用するのは難しいでしょう。
指定された属性に特定の語句で始まる要素に適用する属性セレクタの書式。
属性セレクタのうち、当該属性名の属性値が指定した語句で始まっている場合に対象とする場合の書式は、以下のようになります。
セレクタ[属性名|=属性値に含まれる語句]{…}
- 属性値に含まれる語句には空白文字を含める事は出来ません。
セレクタ
は当該属性名がある要素に適用する属性セレクタと同じです。
指定された属性に特定の語句で始まる要素に適用する属性セレクタの記述例。
例えば、lang属性が「ja」で始まる<q>要素(日本語文章を内容に持つ<q>要素)、すなわち<q lang="ja">要素または<q lang="ja-…">要素へのセレクタは、
q[lang|="ja"] {…}
と記述します。
この場合、
<q lang="ja">要素<q lang="ja-jp">要素
等がこのセレクタの対象となります。
属性値及び「属性値に含まれる語句」の記述について。
CSSの仕様書に依れば、属性値及び「属性値に含まれる語句」が以下の場合は、文法上「"」か「'」で囲まなくても構わない事になっております。
- 半角英字, 全角文字, 半角カナ文字またはエスケープシークェンスで始まり、半角英数字, ハイフン「-」, 全角文字, 半角カナ文字またはエスケープシークェンスからなる文字列
つまり、半角数字やハイフンで始まっておらず、途中に空白や英数字・カナ以外の半角文字を含まない限りは「"」か「'」で囲まなくても構わない事になります。
しかしながら、このような制約を覚えるのはかなり面倒かと思われますので、何も考えずに「"」か「'」で囲む習慣をつける事をお奨めします。
- 実は属性名においても全く同じですが、属性名では「
"」か「'」で囲まないとエラーになるケースはまず無いので大丈夫でしょう。
属性セレクタの実装上の注意。
属性セレクタのPC向けユーザエージェントでの実装上の注意。
- ネットスケープ 4.xなど旧式のユーザエージェント
- WAP 2.0準拠の携帯電話向けユーザエージェント
- インターネットエクスプローラ 6.x以前
では、属性セレクタを認識出来ません。