Cascading Style Sheets selectors.
CSSは HTMLに記述された指定の範囲または要素に対して装飾を施します。そして、CSSによるデザインをどの HTML要素に適用させるかを指定するのに用いられるのが「セレクタ」です。セレクタには幅広い種類があり、様々な指定方法がありますので、状況に応じてスタイルを柔軟に指定できるようになっています。セレクタの指定方法を複数知っていることは、CSS設計をするうえで非常に大切なことです。
CSS3より擬似要素に付けるコロン( : )が2つになって、疑似クラスとの違いが分かりやすくなっています。ただし、コロン2つの記述方法は、IE8以前ではサポートされていないので、これらの旧いブラウザを考慮するなら、疑似要素についてもコロンを1つにしておいたほうが良さそうです。
疑似クラス(pseudo-classes)とは、 要素や属性などの文書構造だけでは特定できない “ある状況にある要素”を対象としてスタイルを適用するセレクタのことです。 例えば、最初の子要素やユーザーが操作中の要素などを対象にスタイルを適用することが可能になります。 ユーザー操作による状況変化に対してスタイルを適用できるため、ウェブページに動的な効果を与えることが出来ます。
一方、擬似要素(pseudo-element)とは、要素や属性などの文書構造だけでは特定できない “要素の一部”を対象としてスタイルを適用するセレクタのことです。 例えば、要素の一行目や一文字目にスタイルを指定したり、 要素の前後にテキストや画像などを挿入することが出来ます。
擬似クラスと擬似要素の違いが分かりにくいですが、疑似クラスは要素全体が対象になるのに対して、 疑似要素は要素の一部分だけが対象になる点が異なります。
「 * (アスタリスク)」と記述することで、すべての要素に装飾が適用されます。任意で、特定の名前空間に限定したり、すべての名前空間を対象にしたりすることができます。
CSS source
* {
color: red;
}
HTML source
<p>p要素の内容</p>
<span>span要素の内容</span>
p要素の内容
span要素の内容要素名に関係なくすべての要素に装飾が適用されます。
アスタリスクは単純セレクターを伴う場合に省略可能です。たとえば、*.warning と .warning は同じ意味の指定になります。
HTMLの要素名を指定することで、装飾を施す範囲を指定します。
CSS source
p {
color: red;
}
このように指定することで、すべての p要素に装飾を適用します。
HTML source
<p>p要素の内容</p>
<span>span要素の内容</span>
<p>2つ目の p要素の内容</p>
上記のように HTMLと CSSの記述をしたとき、セレクタで指定してある p要素には装飾が適用されますが、span要素には適用されません。
p要素の内容
span要素の内容2つ目の p要素の内容
「.(ドット)クラス名」と記述することで、指定のクラスに装飾が適用されます。
CSS source
.example {
color: red;
}
なお、この書き方は、下記の属性セレクタと同じ意味なります。
属性セレクタで書いた場合
[class~=example] {
color: red;
}
HTML source
<p>p要素の内容</p>
<p class="example">クラス名 example の p要素の内容</p>
<span>span要素の内容</span><br>
<span class="example">クラス名 example の span要素の内容</span>
p要素の内容
クラス名 example の p要素の内容
span要素の内容クラス名を指定するとそのクラス名が付加されている要素すべてに装飾が適用されます。
要素に続けてクラス名を指定することで、そのクラス名が付加された要素に装飾が適用されます。
CSS source
p.example {
color: red;
}
example クラスが付加されている p要素にのみ、装飾が適用されます。
p要素の内容
クラス名 example の p要素の内容
span要素の内容また、2種類の装飾を準備し、半角スペースで区切ることで1つの要素に両方を適用するといったこともできます。
CSS source
.red {
color: red;
}
.green-bg {
background: green;
}
HTML source
<p>p要素の内容</p>
<p class="red">クラス名 red の p要素の内容</p>
<p class="red green-bg">クラス名 red と green-bg の p要素の内容</p>
p要素の内容
クラス名 red の p要素の内容
クラス名 red と green-bg の p要素の内容
「 #(シャープ)ID名」と記述することで、指定の ID に装飾が適用されます。
HTML source
<p>p要素の内容</p>
<p id="example">ID名 example の p要素の内容</p>
<span>span要素の内容</span><br>
<span id="example2">ID名 example2 の span要素内容</span>
CSS source
p#example {
color: red;
}
クラス名の指定と同じく、要素に続けて指定することで、その ID 名が付加された要素に装飾が適用されます。
p要素の内容
ID名 example の p要素の内容
span要素の内容セレクタの次に「 ,(カンマ)」を入れセレクタを指定することで、複数の要素に同じ装飾が適用されます。
HTML source
<div>div要素の内容</div>
<p>p要素の内容</p>
<span>span要素の内容</span>
div要素と span要素に同じ装飾をしたい場合に、
CSS source before change
div {
color: red;
}
span {
color: red;
}
と、書いても構いませんが「 ,(カンマ)」を使うことで凝縮して書くことができます。
CSS source after change
div , span {
color: red;
}
どちらも div要素と span要素に装飾が適用されます。
p要素の内容
span要素の内容セレクタの次に半角スペースを入れセレクタを指定することで、指定の親要素内のすべての子要素に装飾が適用されます。
HTML source
<p>p要素の内容</p>
<p><span>p要素の子要素の span要素の内容</span></p>
<span>span要素の内容</span>
CSS source
p span {
color: red;
}
p要素に囲われた span要素にのみ、装飾が適用されます。
p要素の内容
p要素の子要素の span要素の内容
span要素の内容クラス名を指定することも可能です。
HTML source
<p>p要素の内容</p>
<p><span>p要素の子要素の span要素の内容</span></p>
<p><span class="example">p要素の子要素のクラス名 example の span要素の内容</span></p>
<span>span要素の内容</span>
CSS source
p span.example {
color: red;
}
上記の例の場合は、p要素で囲われていて、かつ example のクラス名が指定されている span要素に装飾が適用されます。
p要素の内容
p要素の子要素の span要素の内容
p要素の子要素のクラス名 example の span要素の内容
span要素の内容また、装飾の範囲は孫要素など、階層が深くなってもすべてに適用されます。
HTML source
<div>div要素の内容</div>
<div>
<span>div要素の子要素の span要素の内容</span>
<div>
<p><span>div要素の孫要素の span要素の内容</span></p>
</div>
</div>
<span>span要素の内容</span>
CSS source
div span {
color: red;
}
div要素で囲われているすべての span要素に装飾が適用されます。
div要素の孫要素の span要素の内容
セレクタの次に「 > 」を入れセレクタを指定することで、指定の親要素内の一階層下の子要素に装飾が適用されます。
HTML source
<div>div要素の内容</div>
<div>
<span>div要素の子要素の span要素の内容</span>
<div>
<p><span>div要素の孫要素の span要素の内容</span></p>
</div>
</div>
<span>spanタグの内容</span>
CSS source
div > span {
color: red;
}
先ほどと同じ HTMLの記述であっても、div要素の一階層下にある span要素にのみ装飾が適用されます。
div要素の孫要素の span要素の内容
セレクタの次に「 + 」を入れセレクタを指定することで、指定の要素に隣接した要素に装飾が適用されます。
HTML source
<p>p要素の内容</p>
<div>div要素の内容</div>
<p>div要素に隣接した p要素の内容</p>
<p>p要素に隣接した p要素の内容</p>
CSS source
div + p {
color: red;
}
div要素の直後にある p要素に装飾が適用されます。
p要素の内容
div要素に隣接した p要素の内容
p要素に隣接した p要素の内容
セレクタの次に「 ~ 」を入れセレクタを指定することで、指定の要素の後にある同じ階層の要素に装飾が適用されます。
HTML source
<p>div要素より前にある p要素の内容</p>
<div>div要素の内容</div>
<p>div要素より後にある p要素の内容</p>
<p>div要素より後にある p要素の内容</p>
<div><p>div要素の子要素の p要素の内容</p></div>
<p>div要素より後にある p要素の内容</p>
CSS source
div ~ p {
color: red;
}
div要素の以降にあるすべての p要素に装飾が適用されます。ただし階層が違うと適用されません。
div要素より前にある p要素の内容
div要素より後にある p要素の内容
div要素より後にある p要素の内容
div要素の子要素の p要素の内容
div要素より後にある p要素の内容