【基本から応用まで】CSSセレクターの種類や指定方法
CSS(Cascading Style Sheets)はウェブページの見た目を装飾するための言語です。そしてCSSセレクターとは、HTML要素にスタイルを適用する際に使われる部分です。
多様なセレクターを理解することで、class名をたくさんつけなくてもウェブページのデザインを自由自在に変えることができます。
今回は基本のCSSセレクター、使えると便利なCSSセレクター、その他のCSSセレクターを紹介します。
目次
CSSセレクターとは
CSSセレクターは、HTML文書内の特定の要素を選択するためのパターンです。
セレクターは、要素のタイプ、クラス、ID、またはその他の属性などの特性に基づいて要素を識別します。例えば、pセレクターはHTML文書内の全ての<p>要素を選択し、#headerセレクターはid=”header”という属性を持つ要素を選択します。
セレクターを使用することで、特定の要素にスタイルを適用したり、要素の配置や装飾を制御したりすることができます。CSSセレクターは、ウェブデザインの基本的な要素であり、ウェブページを使いやすくするために重要な役割を果たします。
基本のCSSセレクター
これだけセレクターを扱うことができればCSSを編集できます。
普段からCSSに触れている方は飛ばし読みしてください。
- 要素セレクター
指定されたHTML要素にスタイルを適用します。p { color: red; /* <p>タグにcolor: red;を適用 */ }
- クラスセレクター
指定されたクラス名を持つ要素にスタイルを適用します。.my-class { font-size: 20px; /* <要素 class="my-class">にfont-size: 20px;を適用 */ }
- IDセレクター
指定されたID属性を持つ要素にスタイルを適用します。#my-id { background-color: yellow; /* <要素 id="my-id">にbackground-color: yellow;を適用 */ }
- 子孫セレクター
指定された要素の子孫にスタイルを適用します。div p { color: red; }
<!-- 上記CSSでは、divタグの子要素のpタグのみcolor: red;が適用される --> <h2>h2タグ</h2> <p>テキストテキストテキスト</p> <div> <h3>h3タグ</h3> <p>テキスト</p> <!-- color:red;が適用される --> <span>スパン</span> </div>
- 複数セレクター
カンマで区切った要素にそれぞれ同じスタイルを適用します。div p, div span { color: red; }
<!-- 上記CSSでは、divタグの子要素のpタグとspanタグにcolor: red;が適用される --> <h2>h2タグ</h2> <p>テキストテキストテキスト</p> <div> <h3>h3タグ</h3> <p>テキスト</p> <!-- color:red;が適用される --> <span>スパン</span> <!-- color:red;が適用される --> </div>
- リンクセレクター
リンクで使用するセレクターです。
未訪問のリンク・訪問済みのリンク・ホバー状態のリンク・クリック状態のリンクをまとめてご紹介します。/* 未訪問のリンク */ a:link { color: blue; } /* 訪問済みのリンク */ a:visited { color: purple; } /* ホバー状態のリンク */ a:hover { color: red; } /* クリック状態のリンク */ a:active { color: yellow; }
ホバー状態のリンクはホバーエフェクト(例:リンクの写真にマウスカーソルを合わせたら写真が少し大きくなる)を作る際に必要なので、もしご存じない方は覚えておくといいでしょう。
- 属性セレクター
CSSの属性セレクターは、HTML要素に付与された属性の値を指定して、その要素をスタイル付けするための方法です。特定の属性や値を持つ要素を選択し、スタイルを適用することができます。/* name 属性を持つaタグ */ a[name] { color: red; } /* href が "https://example.ie" と一致するaタグ */ a[href="https://example.ie"] { color: red; } /* href が "tel" から始まるaタグ */ a[href^="tel"] { color: red; } /* href に "example" を含むaタグ */ a[href*="example"] { color: red; } /* href が ".jp" で終わるaタグ */ a[href$=".jp"] { color: red; }
ほかにも属性セレクターはいくらかありますが、興味のある方は検索してみてください。
CSSセレクターの疑似クラス、nth-childなど
今回は代表的なものと使えたら便利なもののみご紹介します。
よく使うツリー構造
:nth-child()
- 兄弟要素の中で一番最初/最後の要素を指定
/* 最初の要素を指定 */ div p:first-child { color: red; } /* 最後の要素を指定 */ div p:last-child { color: red; }
- 兄弟要素の中で指定した位置を指定
div p:nth-child(2) { color: red; }
交互に色が変わるデザインなどは:nth-childを活用して作られていることが多いです。
- odd…奇数番目の要素に適用
- even…偶数番目の要素に適用
- An…Aの倍数番目の要素に適用(3nなら3の倍数番目の要素)
そのほかにも細かいパターンはありますがひとまずよく使うものだけ知っておきましょう。
div p:nth-child(2n) { color: red; }
以下、カッコがついている:nth-は上記と同じように要素を指定することができます。
- 兄弟要素の中で指定した位置を指定(後ろから前にカウント)
div p:nth-last-child(2) { color: red; }
:nth-of-type()
- 兄弟要素の指定した要素の中で指定した位置を指定
div p:nth-of-type(2) { color: red; }
- 兄弟要素の指定した要素の中で指定した位置を指定(後ろから前にカウント)
div p:nth-last-of-type { color: red; }
- 兄弟要素の指定した要素の最初/最後の要素を指定
/* 最初の要素 */ div p:nth-first-of-type { color: red; } /* 最後の要素 */ div p:nth-first-of-type { color: red; }
- 同じタグの兄弟要素がない要素を指定
div p:only-of-type { color: red; }
:nth-child()と:nth-of-type()の違い
CSSの:nth-child()と:nth-of-type()は、両方とも特定の要素を選択するための方法ですが、微妙な違いがあります。
- nth-child():
- nth-child()は、親要素の中で、特定の位置にあるすべての子要素を選択します。
- 例えば、親要素の中で3番目の子要素を選択したい場合、:nth-child(3)と書きます。
- nth-of-type():
- nth-of-type()は、指定されたタイプの要素の中で、特定の位置にある要素を選択します。
- 例えば、div要素の中で3番目の要素を選択したい場合、div:nth-of-type(3)と書きます。
例えば、以下のHTMLがあるとします。
<div>
<p>pタグ 1</p>
<p>pタグ 2</p>
<span>spanタグ 1</span>
<p>pタグ 3</p>
<span>spanタグ 2</span>
</div>
それぞれの要素に対して、次のようなCSSが適用されるとします。
p:nth-child(4) {
color: red;
}
p:nth-of-type(3) {
font-weight: bold;
}
- p:nth-child(4)は、親要素<div>の中で4番目の子要素が<p>要素であるため、4番目の<p>要素(”pタグ 4″)に赤い色が適用されます。
- p:nth-of-type(3)は、同じ種類(<p>)の兄弟要素の中で3番目の<p>要素(”pタグ 3″)に太字のフォントが適用されます。
まとめると、nth-child()は親要素内のすべての子要素の位置を基準に選択し、nth-of-type()は指定されたタイプの要素内での位置を基準に要素を選択します。
使えると便利なCSSセレクター
ここからは、使えると便利なCSSセレクターをご紹介します。
直下の子要素
要素同士の間にいれていた半角スペースのところに「>」を追加することで、1つ下の階層の子要素だけにCSSを適用できます。
孫要素(2つ下の階層にある)は対象外になります。
div>p {
color: red;
}
<!-- 上記CSSでは、divタグの子要素のpタグとspanタグにcolor: red;が適用される -->
<h2>h2タグ</h2>
<p>テキストテキストテキスト</p>
<div>
<h3>h3タグ</h3>
<p>テキスト</p> <!-- color:red;が適用される -->
<span>スパン</span> <!-- color:red;が適用される -->
</div>
隣の要素
要素同士の間にいれていた半角スペースのところに「+」を追加することで、同じ階層にあって指定した要素のすぐ後に出てきた1つの要素だけにCSSを適用できます。
h3+p {
color: red;
}
<!-- 上記CSSでは、divタグの子要素のpタグとspanタグにcolor: red;が適用される -->
<h2>h2タグ</h2>
<p>テキストテキストテキスト</p>
<div>
<h3>h3タグ</h3>
<p>テキスト</p> <!-- color:red;が適用される -->
<span>スパン</span> <!-- color:red;が適用される -->
</div>
兄弟要素
今度は「〜」を要素同士の間に追加することで、指定した要素より後にでてくる同じ階層の要素が対象となります
h3~p {
color: red;
}
<!-- 上記CSSでは、divタグの子要素のpタグとspanタグにcolor: red;が適用される -->
<h2>h2タグ</h2>
<p>テキストテキストテキスト</p>
<div>
<h3>h3タグ</h3>
<p>テキスト</p> <!-- color:red;が適用される -->
<span>スパン</span> <!-- color:red;が適用される -->
</div>
全称セレクター(*)
ウェブページには見出しや段落、画像などさまざまな要素があります。全称セレクターは、全ての要素に同じスタイルを適用したい場合に役立ちます。
* {
color: red; /* 全ての要素にcolor: red;を適用 */
}
否定セレクター
div p:not(:last-child) {
color: red; /* 最後にあるpタグ以外のpタグにcolor: red;を適用 */
}
まとめ
CSSで手前の要素を選択する方法は残念ながらありません。しかし、これらのセレクターを学ぶことで、ウェブデザインの幅が広がります。狙った要素にスタイルを適用したり、レイアウトを制御したりすることができます。
便利なCSSセレクターを学んで、より魅力的で使いやすいウェブサイトを作りましょう!
r.s
グローワークスのコーダー兼プログラマー。最適なコードでサイトを動かすことに情熱を注いでいます。技術的課題を解決するのが得意です。