Table of Contents
CSSを適用する対象のタグやclassのことをセレクタと呼ぶことを以前説明しました。
今回は、これ以外にCSSで使える特殊なセレクタについて説明します。
idセレクタ
HTMLタグには、class属性と同じように id属性 を定義することができます。
例えば、以下のように書きます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>CSSセレクタについて</title> </head> <body> <h1 id="title">ページタイトル</h1> </body> </html>
これだけ見ると、class属性となんら変わりがありませんが、id属性には以下のような特徴(制約)があります。
- id属性をつけられるタグは1つのページにつき1つだけ
- id属性をセレクタとしてCSSを適用した場合は、class属性よりも優先度が高くなる
- id属性をセレクタとする場合、名前の前にハッシュ(#)を書く
id(identifier)はその名の通り、一意な固有識別子ですので、同じページに複数存在することはあってはなりません。
ページに一つだけ存在する重要な要素だけに、このid属性をつけます。
そして、重要であるために、CSSの適用ルールもid属性の方が優先度が高くなります。同じタグにclass属性やタグをセレクタとしたCSSが設定されていたとしても、idをセレクタとして設定したCSSによって上書きされます。
id属性をCSSでセレクタとして使う際は、class属性が名前の前にドット(.)をつけたのと同じように、ハッシュ(#)を名前の前につけます。
#id属性の値 { ここにCSSを書く }
実際にCSSをid属性をセレクタとして適用したサンプルを以下に示します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>CSSセレクタについて</title> </head> <style> #title { font-size: 32px; color: red; } </style> <body> <h1 id="title">ページタイトル</h1> </body> </html>
属性セレクタ
特定の属性を持つタグだけを対象にCSSを適用する場合に使えるセレクタです。
その属性さえ定義されているのであれば、属性の値に関わらずCSSを適用したい場合は次のように書きます。
[属性名] { ここにCSSを書く }
属性の値も指定する場合は、次のように書きます。
[属性名="値"] { ここにCSSを書く }
例えば、class属性を持つ要素だけを対象に、背景の色を青くして、なおかつ値が subtitle の要素だけ文字を赤くするという場合は、以下のように書きます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>CSSセレクタについて</title> </head> <style> [class] { background-color: blue; } [class="subtitle"] { color: red; } </style> <body> <h1>ページタイトル</h1> <h2 class="subtitle">サブタイトル</h2> <p>普通の段落ですよ</p> <p class="paragraph">class属性付きの段落ですよ</p> <p class="paragraph2">class属性付きの段落ですよ2</p> <p>これも普通</p> </body> </html>
実行結果は以下のようになります。
隣接セレクタ
指定した要素の直後にある要素だけにCSSを適用したい場合には隣接セレクタを使います。
セレクタ1+セレクタ2 { ここにCSSを書く }
これで、セレクタ1の直後に来るセレクタ2にCSSが適用されます。実際にサンプルを見てみましょう。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>CSSセレクタについて</title> </head> <style> .paragraph+p { background-color: yellow; } </style> <body> <h1>ページタイトル</h1> <h2 class="subtitle">サブタイトル</h2> <p>普通の段落ですよ</p> <p class="paragraph">class属性付きの段落ですよ</p> <p class="paragraph2">class属性付きの段落ですよ2</p> <p>これも普通</p> </body> </html>
値が paragraph のclass属性を持つ要素の直後に来るpタグの背景だけが黄色くなります。
他にも特殊なセレクタの指定方法がありますが、ここではよく使われる以上のセレクタの説明にとどめます。
気になる方は以下のサイトを御覧ください。