セレクターの基本
cssのセレクターには色々な種類があります。
- 要素型セレクター
a { color:#FFC0CB; } これはaやpなど要素に対して設定できます。
- クラスセレクター
.class名 { color:#FFC0CB;} これは、クラスに対して設定できます。
- IDセレクター
#id名 { color:#FFC0CB;} これはIDに対して設定できます。
- 全称セレクター
* { color:#FFC0CB;} これは全ての種類の要素に設定できます。
*.class { color:#FFC0CB;} また、このように設定すると属性名「class」の中で全ての要素に設定できます。
- 属性セレクター 今回注目するのはこれです。
属性セレクター
そもそも属性って?っておもう人もいるかも知れませんのでそちらから。
この場合<a></a>は要素名、[href],[class]が属性名、[example.html],[value]が属性値となります。
この属性名と属性値を合わせて「属性」といいます。
指定された属性が存在するかどうかでコントロール
要素名[属性名]
ex)[title]属性をもつ要素[a]に対して設定
- ↓[title]属性をもつ要素[a]なので対象
テキスト1
- ↓[title]属性を持たない要素[a]なので対象外
テキスト2
<a href="#" title="example">テキスト1</a>
<a href="#">テキスト2</a>
a[title] {
background-color:#2196F3;
color:#ffffff;
}
要素名[属性名=属性値]
ex)[title]属性の属性値が[value]であるものに対して設定
- ↓[title]属性の属性値が[value]なので対象
テキスト1
- ↓[title]属性の属性値が[value]以外なので対象外
テキスト2
<a href="#" title="value">テキスト1</a>
<a href="#" title="normal">テキスト2</a>
a[title=value] {
background-color:#FF5722;
color:#ffffff;
}
要素名[属性名~=属性値]
ex)[class]属性のスペース区切りで複数ある属性値の中で[red]と一致するものに対して設定
- ↓[class]属性に属性値[red]があるので対象
テキスト1
- ↓[class]属性に属性値[red]がないので対象外
テキスト2
<a href="#" class="link red">テキスト1</a>
<a href="#" class="link blue">テキスト2</a>
a[class~=red] {
background-color:#e61035;
color:#ffffff;
}
classの指定で属性値を複数設定することはよくあることですので、覚えておくと便利です。
一つ前の[属性名=属性値]との違いは?
[属性名=属性値]の場合は、ドンピシャの属性値のみ対象になります。
- ①[class]に"redtxt"のみ設定されているので対象
テキスト
- ②[class]に"link","redtxt"が設定されているので対象外
テキスト
<a href="#" class="red">テキスト</a>
<a href="#" class="link red">テキスト</a>
a[class=red] {
background-color:#C2185B;
color:#ffffff;
}
この場合、②のみが対象になります。
複数の属性セレクタを指定して対象を絞り込む
hrefとtitleがあるものだけに適用
角括弧[]で複数の属性セレクタ(hrefとtitle)を指定して対象を絞り込みます。
- ①[title]属性設定ありなので対象
テキスト1
- ②[title]属性設定なしなので対象外
テキスト2
<a href="#" title="example">テキスト1</a>
<a href="#" >テキスト2</a>
a[href][title]{
background-color:#29B6F6;
color:#ffffff;
}
a要素に[class=”active”]があって:hoverの時に対応
- ①a要素に[class]属性設定あり属性値は[active]なので対象
テキスト1
- ②a要素に[class]属性設定あるが属性値は[normal]なので対象外
テキスト2
- ③a要素に[class]属性設定なしなので対象外
テキスト3
<a href="#" class="active">テキスト1</a>
<a href="#" class="normal">テキスト2</a>
<a href="#">テキスト3</a>
a:hover[class="active"]{
background-color: #9f0;
color:#ffffff;
}
属性値に基づいてコントロールする
クラス名やIDを「sample_1」〜「sample_9」まで連番でつけたり
記事のスラッグをクラス名で使ったりすると「post-000」のように「post-」までは一緒でその後が違うなど
名称の一部を使ってまとめて指定したいときにはこれが便利です。
指定した属性名の属性値が[〇〇]で始まるものを対象にする
ex)属性名[id]の属性値[sample_]で始まる
- IDに[sample1_1]を設定:対象
- IDに[sample1_2]を設定:対象
- IDに[sample1_3]を設定:対象
- IDに[link]を設定:対象外
<ul>
<li id="sample1_1">IDに[sample1_1]を設定:対象</li>
<li id="sample1_2">IDに[sample1_2]を設定:対象</li>
<li id="sample1_3">IDに[sample1_3]を設定:対象</li>
<li id="link">IDに[link]を設定:対象外</li>
</ul>
[id^="sample1_"] {
background: #9CCC65;
color:#ffffff;
}
指定した属性名の属性値に[〇〇]が含まれるものを対象にする
ex)属性名[class]の属性値に[post]が含まれる
- classに[post]を設定:対象
- classに[post]と[redtxt]を設定:対象
- classに[link]を設定:対象外
<ul>
<li class="post">classに[post]を設定:対象</li>
<li class="post redtxt">classに[post]と[redtxt]を設定:対象</li>
<li class="link">classに[link]を設定:対象外</li>
</ul>
[class*="post"] {
background: #FFFF00;
color:#ffffff;
}
指定した属性名の属性値が[〇〇]で終わるものを対象にする
ex)属性名[class]の属性値が[_sample]で終わる
- classに[1_sample]を設定:対象
- classに[sample_1]を設定:対象外
- classに[link]を設定:対象外
<ul>
<li class="1_sample">classに[1_sample]を設定:対象</li>
<li class="sample_1">classに[sample_1]を設定:対象外</li>
<li class="link">classに[link]を設定:対象外</li>
</ul>
[class$="_sample"] {
background: #FF00FF;
color:#ffffff;
}
指定した属性名の属性値が[〇〇]で始まり直後に-(ハイフン)が続くものを対象にする
ex)属性名[class]の属性値が[sample]で始まるものと、属性値が[sample]で始まり直後に-(ハイフン)が続くのものを対象に
- classに[sample-1]を設定:対象
- classに[sample-2]を設定:対象
- classに[sample]を設定:対象
- classに[link]を設定:対象外
<ul>
<li class="sample-1">classに[sample-1]を設定:対象</li>
<li class="sample-2">classに[sample-2]を設定:対象</li>
<li class="sample">classに[sample]を設定:対象</li>
<li class="link">classに[link]を設定:対象外</li>
</ul>
[class|="sample"] {
background: #009688;
}