HTML Living Standard  第2部 CSS 2 CSS の書式


 

2 CSS の書式

2.1 @ルール

CSS には @ で始まる @ルール(at-rule)と呼ばれる書式が定められています。これらは CSS でスタイルシートを記述するにあたってのルールを定義するものです。

@ルール には以下のものがあります。

@ルール説明
@charset外部スタイルシートファイルの文字コードの指定
@counter-styleリストの先頭に表示するマーカーの生成
@font-faceインターネット上のフォントの適用
@import外部スタイルシートファイルの読み込み
@keyframesアニメーションの通過点の定義
@media出力対象メディアの指定
@page印刷時のスタイルの指定
@supportsスタイルのサポート状況による処理の分岐
@font-palette-valuesカラーフォントのカラーパレットの指定

(1) @charset

@charset は、HTML 文書に記述するのではなく、HTML から読み込む外部のスタイルシートファイルに記述します。@charset はファイルの先頭に1つだけ記述し、スタイルシートファイルの文字コードを指定します。文字コードの値には次のようなものがあります。

@charset "文字コード"

スタイルシートファイルの文字コードを指定する。

文字コード(代表的なもの)説明
Shift_JISシフトJIS
ISO-2022-JPJIS
EUC-JPEUC-JP
UTF-8UTF-8
記述例
@charset "Shift_JIS";

p{color:blue;}

(2) @counter-style

リストの先頭に表示するマーカーを作成します。

@counter-style マーカー名 { 記述子: 値; }

list-style で指定可能なリストスタイルを生成する。記述子 と 値 は複数指定できる。

記述子(代表的なもの)説明
systemカウンタスタイルを指定する(規定値:symbolic)
cyclic記号リストを繰返し巡回する
fixed記号リストを一巡だけして、それ以降は標準に戻る
symbolic記号リストを繰返し巡回するが、一巡し終える度に 記号を二重三重に重ねるようにする
記号リストが a b c ならば a、b、c、aa、bb、cc、aaa、bbb、... となる
alphabetic記号リストを「アルファベット式 付番システムの数字」として解釈する
記号リストが a b c ならば a、b、c、aa、ab、ac、ba、bb、... となる
numeric記号リストを「位取り 付番システムの数字」として解釈する
記号リストが a b c ならば b、c、ba、bb、bc、ca、cb、... となる(a は 0 と見なされるので先頭には表示されない)
additive記号リストを「合算式命数法の数字」として解釈する
ローマ数字のようにすべての数字の総和をとれば、元の数値を得られる(XVII=17)
extends既存のカウンタスタイルを拡張する
negative文字列カウンタ値が負のときに表示する負符号を定義する(規定値:"-")
prefix文字列マーカ表現の先頭に付加される 接頭辞 を定義する(規定値:"")
suffix文字列マーカ表現の最後に付加される 接尾辞 を定義する(規定値:". ")
rangeカウンタスタイルが定義されるカウンタ値の 範囲 を定義する(規定値:auto)
auto負の無限大~正の無限大(system が cyclic、fixed、numeric のとき)
1 ~正の無限大(system が symbolic、alphabetic のとき)
0 ~正の無限大(system が additive のとき)
拡張によって決まる(system が extends のとき)
下限,上限下限に infinite を指定した場合は 負の無限大
上限に infinite を指定した場合は 正の無限大
pad最小桁数 埋め込み文字“最小桁数”に満たない場合に埋め込む文字を定義する(規定値:0 "")
fallbackカウンタスタイル名現在のカウンタスタイルでカウンタ値を表現できないときに利用されるカウンタスタイルを指定する
symbols空白区切りの記号記号リストを "文字" や url("アドレス") で指定する
(system が cyclic、fixed、numeric、symbolic、alphabetic のとき必須)
additive-symbolsコンマ区切りの 重み 記号記号リストを重み(値)と記号のペアで、重みの降順で指定する(ローマ数字ならば 10 X, 5 V, 1 I)
(system が additive のとき必須)

記述例
スタイルシート
  @counter-style triangle{
    system: cyclic;
    symbols: '▲';
    suffix: '';
  }

ボディ
<ul style="list-style:triangle">
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
</ul>

リストのマーカーが指定された ▲ で表示されます。

表示例

(3) @font-face

ユーザのデバイスに無くても表示できるようにサイト上のフォントを指定します。

@font-face { 記述子: 値; }

サイト上のフォントを使用できるように定義する。記述子 と 値 は複数指定できる。

記述子(代表的なもの)説明
font-familyフォント名font-family で指定可能な名前を指定する
src表示するために使用するフォント名を指定する(コンマ区切りで複数指定でき最初に見つかったフォントを採用する)
local(フォント名)ユーザのデバイスに存在するフォント名を指定する
url(アドレス) format("フォーマット名")空白区切りで URI とフォント形式を指定する。
拡張子フォーマット名
.woffwoff
.eotembedded-opentype
.otfotf
.ttftruetype
.svgsvg
.svgzsvg
font-weightフォントの太さを指定する
normal標準(規定値)
bold太字
bolderより太い
lighterより細い
100~900100が細く、900が太い
font-styleフォントスタイルを指定する
normal標準(規定値)
italicイタリック体(専用フォントがあればそのフォントで表示する。
なければ oblique と同じ)
oblique斜体(標準フォントを傾けて表示する)

記述例
スタイルシート
  @font-face {
    font-family: basefont;
    src: url("/fonts/myfont.ttf") format("truetype");
  }
  
  * {
    font-family: basefont;
  }

ボディ
<p>ABCDEFGHIJKLMNOPQRSTUVWXYZ</p>

myfont.ttf で定義された形で表示されます。

表示例

(4) @import

スタイルシートファイルや style 要素の先頭に記述し、他の読み込むべきスタイルシートファイルを指定します。

@import "スタイルシートファイル名"

他のスタイルシートファイルを読み込む。

スタイルシートファイル名説明
url(アドレス)スタイルシートファイルのアドレス
"アドレス"スタイルシートファイルのアドレス
記述例(type-a.css)
* {
  color: green;
}
記述例
スタイルシート
  @import url(type-a.css);

ボディ
<p>緑の文字列</p>

@import で読み込むよう指定したスタイルシートのファイルに色を緑にするという記述があるので文字列が緑になります。

表示例

スタイルシートファイルを読み込む方法としては、link 要素もあります。一般に、@import よりは link 要素で記述したほうがパフォーマンスがよいとされています。

例えば、複数のスタイルシートファイルを読み込むときに、@import ではスタイルシートファイルを読み込んではじめと次に読み込むべきスタイルシートファイルが分かりますので、ファイルの読み込みは直列的(並行して読み込めない)です。それに対して、HTMLファイルに link 要素で記述してある場合は、HTMLファイルを読み込んだ時点で読み込むべきスタイルシートファイルが分かり、それらを並行して読み込むことができるからです。


(5) @keyframes

アニメーションの通過点を 0%~100% の間で、また、変化の様子を プロパティ:値; で順に記述します。

途中、プロパティの記述がないものがあってても補間されます。

@keyframes 識別子 {パーセンテージ{プロパティ:値; ...} ...}

アニメーションの通過点をトータルに対する割合で指定する。パーセンテージ{プロパティ:値;} を 0%~100% の間で複数記述する。

パーセンテージ説明
from開始時(0% と同じ)
to終了時(100% と同じ)
数値%開始からのパーセンテージ
記述例
スタイルシート
  @keyframes changeColors {
    from {color:green;}
    50% {color:red;}
    to {color:green;}
  }
  p {
    color: green;
    animation: changeColors 5s;
  }

ボディ
<p>緑の文字列(?)</p>

p 要素の文字色は、最初は緑ですが、5秒間で緑から赤そしてまた緑に変わるようにアニメーションします。

表示例
再実行



(6) @media

メディアタイプを指定してスタイルを適用します。複数のメディアに同じスタイルを適用する場合には、メディアタイプをカンマで区切って指定します。

@media メディアタイプ {セレクタ{プロパティ:値; ...} ...}

メディアタイプごとのスタイルを指定する。

メディアタイプ説明
allすべてのデバイス
print印刷されたものや印刷プレビュー
screen主に、カラーのコンピュータ画面
speechスピーチ・シンセサイザ
記述例
スタイルシート
@media screen {
  p {
    color:green;
  }
}
@media print {
  p {
    color:red;
  }
}

ボディ
<p>画面では緑、プレビューでは赤</p>

ディスプレイでそのまま見ると緑ですが、印刷やプレビューでみると赤の文字列になります。

(プレビューで、文字列が赤くなっていることを確認するには、プリンターを「PDF として保存」などを選んでみてください。)

表示例





(7) @page

印刷時のページのスタイルを適用します。

@page 選択子リスト {プロパティ:値; ...}

選択子ごとのスタイルを指定する。選択子はコンマ区切りで複数指定できる。

選択子説明
(省略)すべてのページ
:first最初のページ
:right製本時の右側ページ
:left製本時の左側ページ
記述例
スタイルシート
@page { margin-top: 5cm; margin-bottom: 10cm; }
@page :first { margin-left: 4cm; font-size:24pt;color:blue;}
@page :right { margin-left: 10cm; font-size:18pt;font-family:self;color:red;}
@page :left { margin-right: 10cm; font-size:9pt;font-family:sans-self;color:green;}

別画面で、プレビューを表示して確認してください。

(色が変わっていることを確認するには、プリンターを「PDF として保存」などを選んでみてください。)

(別画面に表示されます)




(8) @supports

ブラウザが CSS の属性や値をサポートしているかいないかにより、処理を振り分けます。

@supports [not] (プロパティ:値) and|or ...

CSS の属性や値をサポートしているかいないかにより、処理を振り分ける。

記述例
スタイルシート
@supports ( color: transparent ) {
  p.a {
    color:green;
  }
}
@supports not ( color: xxxxx ) {
  p.b {
    color:red;
  }
}

ボディ
<p class="a">サポートしていたら 緑</p>
<p class="b">サポートしていなかったら 赤</p>

サポートしていたら 緑、していなかったら 赤の文字列になります。color 属性には transparent がありますが、xxxxx はありません。

表示例

(9) @font-palette-values

通常のフォントは単色ですが、カラーフォントは複数のカラーパレットを持っていて、カラーパレットを指定することによって色を変えることができます。また、カラーパレットを選択して、そこで使用されている色を変更することもできます。

@font-palette-values カラーパレット名 { 記述子: 値; }

カラーフォントとカラーパレットを指定して、カラーパレット名と結びつける。

カラーパレット名は CSS変数 なので -- から始まる必要がある。また、記述子 と 値 は複数指定できる。

記述子説明
font-familyフォント名font-family で指定可能な名前を指定する
base-palette定義済パレット番号使用するカラーパレット(0 ~)(カラーフォントによって定義済パレットの数は異なる)
override-colors色番号 色定義済パレットで使用している色番号に対応する色を変更する(カンマ区切りで複数指定できる)
色番号定義済パレットで使用している色番号(0 ~)
色の名称や16進数(属性値の色を参照)

記述例
スタイルシート
  @font-face {
    font-family: Nabla;
    src: url(/fonts/Nabla-Regular.ttf);
  }
  @font-palette-values --Nabla-1 { font-family: Nabla; base-palette: 1; }
  @font-palette-values --Nabla-5 { font-family: Nabla; base-palette: 5; }
  @font-palette-values --Nabla-5x { font-family: Nabla; base-palette: 5;
    override-colors: 1 red, 3 yellow, 5 green, 6 orange;
  }
  span {
    font-family: Nabla;
    font-size: 18pt;
  }
ボディ
<span style="font-palette: --Nabla-1;">font-palette-values</span>
<span style="font-palette: --Nabla-5;">font-palette-values</span>
<span style="font-palette: --Nabla-5x;">font-palette-values</span>

上の2行はそれぞれ定義済パレットの 1 と 5 で表示しています。

最後の行は定義済パレット 5 の色を変更して表示しています。

表示例

2.2  CSS3 の書式

最も基本的な CSS の使用例を以下に示します。

<!DOCTYPE html>
<html>
  <head>
    <title>サンプル</title>
    <style type="text/css">
      p{color:blue;}
    </style>
  </head>
  <body>
    <h3>竹取物語</h3>
    <p>今は昔、竹取の翁といふものありけり</p>
    <p>野山にまじりて竹を取りつつ、よろづのことに使ひけり</p>
  </body>
</html>

<style>~</style> の間に、どの部分に対してどのスタイルをどのように適用するかを指定しています。この例では、p 要素の色を青くするスタイルを指定しています。

  p{color:blue;}

CSS では、半角スペース、タブ、改行はスタイルに影響しませんので、次のように記述しても全く同じ意味です。また、HTML では大文字と小文字の区別もしませんので、大文字で記述しても構いません。しかし、小文字で記述されていることの方が多いと思います。

  p
  {
    color: blue;
  }

2.2.1 セレクタ

CSS の一般的な形式は次のようになります。

 セレクタ { プロパティ名: 値; }

セレクタとは、スタイルシートを適用する対象のことです。セレクタには、必要に応じて下の表のように記述することができます。

この中で E は要素(タグ)を、class はクラス名を、id は ID を、attr は属性を、"val" は属性値を、"str" は任意の文字列を表しています。

なお、E だけの場合はもちろん省略できませんが、それ以外の例えば E.class のようなときは E を省略できます。この場合はすべての要素が対象になります。

セレクタ説明
*すべての要素
Eすべての E 要素
E.class特定の class 名がつけられた E 要素
E#id特定の id名がつけられた E 要素
E[attr]attr属性を持つE要素
E[attr="val"]attr属性の値にvalを持つE要素
E[attr~="val"]attr属性の値候補(ホワイトスペース区切り)にvalを持つE要素
E[attr^="str"]attr属性の値がstrで始まるE要素
E[attr$="str"]attr属性の値がstrで終わるE要素
E[attr*="str"]attr属性の値にstrを含むE要素
E[attr|="str"]attr属性の値候補(ハイフン区切り)がstrで始まるE要素
:root文書のルートとなる要素
E:empty要素内容が空となるE要素
E:nth-child(N)N 番目の子となるE要素(最初の要素が1番目)
E:nth-last-child(N)後ろから数えて N 番目の子となるE要素(最初の要素が1番目)
E:first-child子として最初のE要素
E:last-child子として最後のE要素
E:only-child子として唯一となるE要素
E:nth-of-type(N)N 番目のその種類の要素(最初の要素が1番目)
E:nth-last-of-type(N)後ろから数えて N 番目のその種類の要素(最初の要素が1番目)
E:first-of-type最初のその種類の要素
E:last-of-type最後のその種類の要素
E:only-of-type子として唯一となるその種類の要素
E:link未訪問のリンク
E:visited訪問済のリンク
E:activeクリック中の要素
E:hoverカーソルが乗っている要素
E:focusフォーカスされた要素
E:targetリンクのターゲット先となるE要素
E:lang(L)特定の言語 L を指定された要素
E:enabled有効となっているユーザーインターフェース要素(テキストエリアなど)
E:disabled無効となっているユーザーインターフェース要素(テキストエリアなど)
E:checkedチェックされているユーザーインターフェース要素(ラジオボタン・チェックボックスなど)
E::first-line要素の最初の行
E::first-letter要素の最初の文字
E::before要素の直前に内容を挿入する
E::after要素の直後に内容を挿入する
E:not(S)Sで指定するセレクタに当てはまらないE要素

なお、これらのセレクタは組み合わせて使用することができます。

たとえば、

div[id][class^="x"]          id 属性と x から始まるクラス名を持つ div 要素
div:not([title]):last-child  title 属性を持たず、なおかつ最後の div 要素(title 属性を持たない最後の div 要素ではない)

(1) * (すべての要素)

すべての要素が対象になります。

記述例
スタイルシート
  *{color:blue;}

ボディ
<h3>はじまり</h3>
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

全ての文字が青になります。

表示例

(2) E

E 要素のみが対象になります。

記述例
スタイルシート
  time{color:blue;}

ボディ
<h3>はじまり</h3>
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

time 要素の文字色が青になります。

表示例

(3) E.class

指定されたクラス名が値の class 属性を持つすべての E 要素が対象になります。要素(タグ)名なしの .class ではすべての要素が対象になります。

記述例
スタイルシート
  p.notice{color:blue;}

ボディ
<h3>はじまり</h3>
<p class="notice">私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time class="notice">16:00</time>を表示していた。</p>

p 要素の内クラス名の一致するものだけが、文字色が青になります。

time 要素も同じクラス名がありますが、文字色は青にはなりません(time 要素の notice クラスの定義はないので間違った記述です)。

表示例

(4) E#ID

指定された ID の要素が対象になります。ID はひとつの文書内で重複して付けられませんので、要素(タグ)名なしの #ID でも同じです。

記述例
スタイルシート
  p#bb{color:blue;}

ボディ
<h3>はじまり</h3>
<p id="aa">私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p id="bb">デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

ID の一致する要素の文字色が青になります。

この例ではスタイルシートで要素名も p と指定されていますので、もし h3 要素に bb という ID が付けられていたとしても、文字色は青にはなりません。

表示例

(5) E[attr]

attr 属性を持つ E 要素が対象になります。

記述例
スタイルシート
  time[datetime]{color:blue;}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

datetime 属性を持つ time 要素の文字色が青になります。

表示例

(6) E[attr="val"]

attr 属性の値が val である E 要素が対象になります。

記述例
スタイルシート
  time[datetime="2001-01-07"]{color:blue;}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time datetime="2001-01-07 16:00">16:00</time>を表示していた。</p>

属性値が "2001-01-07" の datetime 属性を持つ time 要素の文字色が青になります。

表示例

(7) E[attr~="val"]

属性値の一つが val である attr 属性を持つ E 要素が対象になります。

記述例
スタイルシート
  time[datetime~="16:00"]{color:blue;}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time datetime="2001-01-07 16:00">16:00</time>を表示していた。</p>

属性値の一部が "16:00" である datetime 属性を持つ time 要素の文字色が青になります。

表示例

(8) E[attr^="str"]

属性値が str で始まる attr 属性を持つ E 要素が対象になります。

記述例
スタイルシート
  time[datetime^="2"]{color:blue;}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time datetime="2001-01-07 16:00">16:00</time>を表示していた。</p>

属性値が "2" で始まる datetime 属性を持つ time 要素の文字色が青になります。

表示例

(9) E[attr$="str"]

属性値が str で終わる attr 属性を持つ E 要素が対象になります。

記述例
スタイルシート
  time[datetime$="00"]{color:blue;}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time datetime="2001-01-07 16:00">16:00</time>を表示していた。</p>

属性値が "00" で終わる datetime 属性を持つ time 要素の文字色が青になります。

表示例

(10) E[attr*="str"]

属性値に str を含む attr 属性を持つ E 要素が対象になります。

記述例
スタイルシート
  time[datetime*="07"]{color:blue;}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time datetime="2001-01-07 16:00">16:00</time>を表示していた。</p>

属性値が "07" を含む datetime 属性を持つ time 要素の文字色が青になります。

表示例

(11) E[attr|="str"]

属性値が str か、str- で始まる attr 属性を持つ E 要素が対象になります。

記述例
スタイルシート
  time[datetime|="2001-01"]{color:blue;}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time datetime="2001-01-07 16:00">16:00</time>を表示していた。</p>

属性値が "2001-01" で始まる datetime 属性を持つ time 要素の文字色が青になります。

表示例

(12) :root

文書のルート要素が対象になります。HTML文書の場合、常に html 要素となります。

記述例
スタイルシート
  :root{color:blue;}

ボディ
<table border="1">
 <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 <tr><th rowspan="4">四国</th><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td>徳島</td><td>4,146.67</td></tr>
 <tr><td>愛媛県</td><td>松山</td><td>5,678.18</td></tr>
 <tr><td>高知県</td><td>高知</td><td>7,105.16</td></tr>
</table>

html 要素(つまり、すべて)の文字の色が青になります。

表示例

では、線にも色が付くようです。


(13) E:empty

内容が空である E 要素が対象になります。

記述例
スタイルシート
  td:empty{background-color:yellow;}

ボディ
<table border="1">
 <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 <tr><th rowspan="4">四国</th><td>香川県</td><td></td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td>徳島</td><td></td></tr>
 <tr><td></td><td>松山</td><td>5,678.18</td></tr>
 <tr><td>高知県</td><td>高知</td><td>7,105.16</td></tr>
</table>

<td>~</td> の内容に記述がない部分の背景色が黄色になります。

表示例

(14) E:nth-child(N)

親要素から見て、N 番目の子要素が E 要素のとき対象になります。N 番目の E 要素ではありません。N には次のようなものが指定できます。

ただし、最初の要素が1番目ですので注意してください。

N説明
nすべて
an±ba の倍数±b (例 3n+1:3つ置き)
odd奇数 (2n+1 と同じ)
even偶数 (2n と同じ)
整数(指定された数値)番目 (1~)

また、nth-child(N) の対象はあくまで前から N 番目の子要素です。.class、#ID、[attr] などが指定されていたとしても、それらによって絞り込まれた子要素の前から数えた N 番目ではありません

記述例
スタイルシート
  tr:nth-child(even){color:blue;}
  td:nth-child(1){background-color:yellow;}
  td.x:nth-child(2){background-color:pink;}

ボディ
<table border="1">
 <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 <tr><th rowspan="4">四国</th><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td class="x">徳島</td><td>4,146.67</td></tr>
 <tr><td>愛媛県</td><td>松山</td><td>5,678.18</td></tr>
 <tr><td>高知県</td><td class="x">高知</td><td class="x">7,105.16</td></tr>
</table>

偶数番目の要素が tr のとき文字色が青になります("四国" は2行目にあるカラムなので青になります)。また、各行の1番目の要素が td のとき背景色が黄色になります(1~2行目は1番目の要素が th なので、背景色は変わりません)。

3つ目の例は注意が必要です。td.x:nth-child(2) は、class="x" が記述された td 要素の、前から2番目が対象ではありません。2番目の子要素が td 要素に class="x" が記述されていた場合が対象になります。

表示例

(15) E:nth-last-child(N)

親要素から見て、後ろから N 番目の子要素が E 要素のとき対象になります。後ろから N 番目の E 要素ではありません。N には次のようなものが指定できます。

ただし、最初の要素が1番目ですので注意してください。

N説明
nすべて
an±ba の倍数±b (例 3n+1:3つ置き)
odd奇数 (2n+1 と同じ)
even偶数 (2n と同じ)
整数(指定された数値)番目 (1~)

また、nth-last-child(N) の対象はあくまで後ろから N 番目の子要素です。.class、#ID、[attr] などが指定されていたとしても、それらによって絞り込まれた子要素の後ろから数えた N 番目ではありません

記述例
スタイルシート
  tr:nth-last-child(odd){background-color:yellow;}
  td:nth-last-child(3){color:blue;}
  td.x:nth-last-child(2){background-color:pink;}

ボディ
<table border="1">
 <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 <tr><td rowspan="4">四国</td><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td>徳島</td><td class="x">4,146.67</td></tr>
 <tr><td>愛媛県</td><td>松山</td><td>5,678.18</td></tr>
 <tr><td class="x">高知県</td><td class="x">高知</td><td>7,105.16</td></tr>
</table>

後ろから奇数番目の要素が tr のとき背景色が黄色になります。また、各行の後ろから3カラム目の要素が td のとき文字色が青になります(1行目は th なので、文字色は変わりません)。

また、"四国" は2行目にあるカラムなので背景色は変わりません。

3つ目の例は注意が必要です。td.x:nth-last-child(2) は、class="x" が記述された td 要素の、後ろから2番目が対象ではありません。後ろから2番目の子要素が td 要素に class="x" が記述されていた場合が対象になります。

表示例

(16) E:first-child

親要素から見て、最初の子要素が E 要素のとき対象になります(最初の子要素が E 要素でなければ対象外です)。

また、first-child の対象はあくまで前から1番目の子要素です。.class、#ID、[attr] などが指定されていたとしても、それらによって絞り込まれた E 要素の前から数えた1番目ではありません

記述例
スタイルシート
  tr:first-child{background-color:yellow;}
  td:first-child{color:blue;}
  td.x:first-child{background-color:pink;}

ボディ
<table border="1">
 <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 <tr><td rowspan="4">四国</td><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td>徳島</td><td>4,146.67</td></tr>
 <tr><td class="x">愛媛県</td><td>松山</td><td>5,678.18</td></tr>
 <tr><td>高知県</td><td class="x">高知</td><td>7,105.16</td></tr>
</table>

最初の行(tr)の背景色が黄色に、各行の最初のカラム(td)の文字色が青になります(1行目は th なので、文字色は変わりません)。

また、2行目は "四国" が最初のカラムなので "香川県" ではなく "四国" の文字色が変わります。

3つ目の例は注意が必要です。td.x:first-child は、class="x" が記述された td 要素の、前から1番目が対象ではありません。前から1番目の子要素が td 要素に class="x" が記述されていた場合が対象になります。

表示例

(17) E:last-child

親要素から見て、最後の子要素が E 要素のとき対象になります(最後の子要素が E 要素でなければ対象外です)。

また、last-child の対象はあくまで後ろから1番目の子要素です。.class、#ID、[attr] などが指定されていたとしても、それらによって絞り込まれた E 要素の後ろから数えた1番目ではありません

記述例
スタイルシート
  tr:last-child{background-color:yellow;}
  td:last-child{color:blue;}
  td.x:last-child{color:blue;}

ボディ
<table border="1">
 <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 <tr><td rowspan="4">四国</td><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td>徳島</td><td>4,146.67</td></tr>
 <tr><td>愛媛県</td><td>松山</td><td class="x">5,678.18</td></tr>
 <tr><td>高知県</td><td class="x">高知</td><td>7,105.16</td></tr>
</table>

最後の行(tr)の背景色が黄色に、各行の最後のカラム(td)の文字色が青になります(1行目は th なので、文字色は変わりません)。

3つ目の例は注意が必要です。td.x:last-child は、class="x" が記述された td 要素の、後ろから1番目が対象ではありません。後ろから1番目の子要素が td 要素に class="x" が記述されていた場合が対象になります。

表示例

(18) E:only-child

親要素から見て、唯一の子要素が E 要素のとき対象になります。

記述例
スタイルシート
  tr:only-child{background-color:yellow;}

ボディ
<table border="1">
 <thead title="タイトル">
  <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 </thead>
 <tr><td rowspan="4">四国</td><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td>徳島</td><td>4,146.67</td></tr>
 <tr><td>愛媛県</td><td>松山</td><td>5,678.18</td></tr>
 <tr><td>高知県</td><td>高知</td><td>7,105.16</td></tr>
</table>

tr はいくつもありますが、親要素の中に唯一なのは thead の中の tr のみです。したがって、thead の中の tr の背景色が黄色になります。

表示例

(19) E:nth-of-type(N)

親要素から見て、N 番目の E 要素が対象になります。N には次のようなものが指定できます。

ただし、最初の要素が1番目ですので注意してください。

N説明
nすべて
an±ba の倍数±b (例 3n+1:3つ置き)
odd奇数 (2n+1 と同じ)
even偶数 (2n と同じ)
整数(指定された数値)番目 (1~)

また、nth-of-type(N) の対象はあくまで前から N 番目の E 要素です。.class、#ID、[attr] などが指定されていたとしても、それらによって絞り込まれた E 要素の前から数えた N 番目ではありません

記述例
スタイルシート
  tr:nth-of-type(even){color:blue;}
  td:nth-of-type(1){background-color:yellow;}

ボディ
<table border="1">
 <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 <tr><th rowspan="4">四国</th><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td class="x">徳島</td><td>4,146.67</td></tr>
 <tr><td>愛媛県</td><td>松山</td><td>5,678.18</td></tr>
 <tr><td>高知県</td><td class="x">高知</td><td class="x">7,105.16</td></tr>
</table>

偶数番目の tr 要素の文字色が青になります("四国" は2行目にあるカラムなので青になります)。、各行の1番目の td 要素の背景色が黄色になります(1行目は th なので背景色は変わりません。また、2行目は"四国" が th なので、"香川県" が1番目の td になりますので、背景色が変わります)。

3つ目の例は注意が必要です。td.x:nth-of-type(2) は、class="x" が記述された td 要素の、前から2番目が対象ではありません。2番目の td 要素に class="x" が記述されていた場合が対象になります。

表示例

(20) E:nth-last-of-type(N)

親要素から見て、後ろから N 番目の E 要素が対象になります。N には次のようなものが指定できます。

ただし、最初の要素が1番目ですので注意してください。

N説明
nすべて
an±ba の倍数±b
odd奇数
even偶数
整数(指定された数値)番目 (1~)

また、nth-last-of-type(N) の対象はあくまで後ろから N 番目の E 要素です。.class、#ID、[attr] などが指定されていたとしても、それらによって絞り込まれた E 要素の後ろから数えた N 番目ではありません

記述例
スタイルシート
  tr:nth-last-of-type(odd){background-color:yellow;}
  td:nth-last-of-type(3){color:blue;}
  td.x:nth-last-of-type(2){background-color:pink;}

ボディ
<table border="1">
 <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 <tr><td rowspan="4">四国</td><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td class="x">徳島</td><td>4,146.67</td></tr>
 <tr><td>愛媛県</td><td>松山</td><td>5,678.18</td></tr>
 <tr><td class="x">高知県</td><td class="x">高知</td><td>7,105.16</td></tr>
</table>

後ろから奇数番目の tr 要素の背景色が黄色になります("四国" は2行目にあるカラムなので背景色は変わりません)。各行の後ろから3カラム目の td 要素の文字色が青になります(1行目は th なので、文字色は変わりません)。

3つ目の例は注意が必要です。td.x:nth-last-of-type(2) は、class="x" が記述された td 要素の、後ろから2番目が対象ではありません。後ろから数えて2番目の td 要素に class="x" が記述されていた場合が対象になります。

表示例

(21) E:first-of-type

親要素から見て、子要素の内最初の E 要素が対象になります。

また、first-child の対象はあくまで前から1番目の E 要素です。.class、#ID、[attr] などが指定されていたとしても、それらによって絞り込まれた E 要素の前から数えた1番目ではありません

記述例
スタイルシート
  td:first-of-type{color:blue;}
  tr:first-of-type{background-color:yellow}
  td.x:first-of-type{background-color:pink}

ボディ
<table border="1">
 <thead title="タイトル">
   <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 </thead>
 <tr><th rowspan="4">四国</th><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td>徳島</td><td>4,146.67</td></tr>
 <tr><td class="x">愛媛県</td><td>松山</td><td>5,678.18</td></tr>
 <tr><td>高知県</td><td class="x">高知</td><td>7,105.16</td></tr>
</table>

したがって、親要素(tr)の最初の td 要素である "香川県"、"徳島県" などの文字色が青になります。

また、親要素(thead)の最初の tr 要素である1行目と table 要素の最初の tr 要素である2行目("香川県" の行)の背景色が黄色になります("四国" も2行目の1カラム目なので背景色が黄色になります)。

3つ目の例は注意が必要です。td.x:first-of-type は、class="x" が記述された td 要素の、前から1番目が対象ではありません。前から1番目の td 要素に class="x" が記述されていた場合が対象になります。

表示例

(22) E:last-of-type

親要素から見て、子要素の内最後の E 要素が対象になります。

また、last-of-type の対象はあくまで後ろから1番目の E 要素です。.class、#ID、[attr] などが指定されていたとしても、それらによって絞り込まれた E 要素の後ろから数えた1番目ではありません

記述例
スタイルシート
  td:last-of-type{color:blue;}
  tr:last-of-type{background-color:yellow}
  td.x:last-of-type{background-color:pink;}

ボディ
<table border="1">
 <thead title="タイトル">
   <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 </thead>
 <tr><th rowspan="4">四国</th><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td>徳島</td><td>4,146.67</td></tr>
 <tr><td>愛媛県</td><td>松山</td><td class="x">5,678.18</td></tr>
 <tr><td>高知県</td><td class="x">高知</td><td>7,105.16</td></tr>
</table>

親要素(tr)の最後の td 要素である "1,876.53"、"4,146.67" などの文字色が青になります("面積(km2)" は th 要素なので文字色は変わりません)。

また、親要素(thead)の最後の tr 要素である1行目と table 要素の最後の tr 要素である5行目("高知県" の行)の背景色が黄色になります("四国" は2行目の1カラム目なので背景色は変わりません)。

3つ目の例は注意が必要です。td.x:last-of-type は、class="x" が記述された td 要素の、後ろから1番目が対象ではありません。後ろから1番目の td 要素に class="x" が記述されていた場合が対象になります。

表示例

(23) E:only-of-type

親要素から見て、子要素としての E 要素が一つだけの場合、その要素が対象になります。

記述例
スタイルシート
  th:only-of-type{color:blue;}
  tr:only-of-type{background-color:yellow}

ボディ
<table border="1">
 <thead title="タイトル">
   <tr><th>&nbsp;</th><th>県名</th><th>県庁所在地</th><th>面積(km<sup>2</sup>)</th></tr>
 </thead>
 <tr><th rowspan="4">四国</th><td>香川県</td><td>高松</td><td>1,876.53</td></tr>
 <tr><td>徳島県</td><td>徳島</td><td>4,146.67</td></tr>
 <tr><td>愛媛県</td><td>松山</td><td>5,678.18</td></tr>
 <tr><td>高知県</td><td>高知</td><td>7,105.16</td></tr>
</table>

th 要素を子要素として一つだけ持つ親要素は2行目の tr 要素なので、その子要素の th 要素である "四国" の文字色が青になります。

また、tr 要素を子要素として一つだけ持つ親要素は thead 要素なので、その子要素の tr 要素である1行目の背景色が黄色になります。

表示例

(24) E:link

未訪問リンクのスタイルを指定します。

記述例
スタイルシート
  a:link {color:green;}

ボディ
<p><a href="#">未訪問リンク</a></p>

まだクリックしていないときの文字色が緑になります。

なお、この例ではクリックしてもリンク先に変わらないようにしています。

表示例

(25) E:visited

訪問済みリンクのスタイルを指定します。

記述例
スタイルシート
  a:visited {color:lightgrey;}

ボディ
<p><a href="#">訪問済みリンク</a></p>

クリックすると文字色がグレイになります。

表示例

(26) E:active

マウスでクリックしている最中のような、アクティブな状態のスタイルを指定します。

記述例
スタイルシート
  span.hilite:active {background-color:red;}

ボディ
<p>この文章の<span>特定の場所</span>をクリック(<span class="hilite">ボタン</span>は押したまま)すると、<span>背景色</span>が赤くなります。</p>

クラス名が hilite の span 要素をクリックしてボタンを離さないままにしていると、背景色が赤になります。

表示例

(27) E:hover

要素にカーソルなどが乗った状態のスタイルを指定します。

記述例
スタイルシート
  span.hilite:hover {background-color:yellow;}

ボディ
<p><span>特定の場所</span><span class="hilite">マウスポインター</span>を乗せると、<span>背景色</span>が黄色くなります。</p>

クラス名が hilite の span 要素の上にマウスポインターを乗せると、背景色が黄色になります。

表示例

(28) E:target

リンクのターゲット先となる E 要素のスタイルを指定します。

記述例
スタイルシート
  .note1:target {background-color:blue;color:white;}
  .note2:target {background-color:yellow;}
  .note3:target {background-color:red;color:white;}

ボディ
<p><span id="t1" class="note1">blue</span> <span id="t2" class="note2">yellow</span> <span id="t3" class="note3">red</span></p>
<p><a href="#t1"></a> <a href="#t2"></a> <a href="#t3"></a></p>

クリックするとターゲット先の背景に色がつきます。

表示例

(29) E:focus

フォーカスがあてられている状態のスタイルを指定します。

記述例
スタイルシート
  input:focus {background-color:yellow;}

ボディ
<form method="post" action="input.cgi">
<label>氏名:<input type="text" name="name"></label><br>
性別:
<label><input type="radio" name="gender" value="male"></label>
<label><input type="radio" name="gender" value="female"></label>
<br><br>
所持品:
<label><input type="checkbox" name="prop" value="CellPhone" checked="checked"> スマフォ</label>
<label><input type="checkbox" name="prop" value="Car"> 自動車</label>
<label><input type="checkbox" name="prop" value="Cottage"> 別荘</label>
<br>
<label>好きな果物:
<select name="fruits">
 <option>りんご</option>
 <option>みかん</option>
 <option selected="selected">バナナ</option>
 <option>パイナップル</option>
</select></label>
<br><br>
<textarea name="freeans" rows="4" cols="40" placeholder="自由に意見を記述してください"></textarea>
<br><br><input type="submit" value="送信"> <input type="reset" value="取り消し">
</form>

フォーカスがあてられている(マウスをクリックする、タブキーで移動するなどして、入力対象となっている)input 要素の背景色が黄色になります。

ただし、input 要素の type が text の文字列入力欄や submit などのボタンしか背景色は変わらないようです。

なお、この例ではボタンをクリックしても何も起きないようにしています。

表示例

(30) E:lang(L)

特定の言語 L を指定されている E 要素のスタイルを指定します。

言語については、言語コード一覧を参照してください。

記述例
スタイルシート
  q:lang(en) {color:blue;}

ボディ
<p lang="ja"><q>こんにちは</q>は日本語だけど、<q lang="en">Hello</q>は英語です。</p>

言語として en が指定されている q 要素の文字色が青になります。

表示例

(31) E:enabled

フォームにおいて入力可能に設定されている E 要素のスタイルを指定します。

記述例
スタイルシート
  input:enabled {background-color:yellow;}
  input[type="checkbox"]:enabled {outline: solid 2px blue;}

ボディ
<form action="#">
  入力欄:<input type="text" name="param" value="初期値" disabled><br>
  選択欄:<input type="checkbox" name="data" value="1" checked>チェック1
         <input type="checkbox" name="data" value="2">チェック2
         <input type="checkbox" name="data" value="3" disabled>チェック3<br>
  ボタン:<input type="submit" value="送信">  <input type="reset" value="中止" disabled>
</form>

ボタンを含めて、入力可能な input 要素の背景色が黄色になります。ただし、チェックボックスの背景色は変わらないようです。

別途、チェックボックスは枠を青くしています。

表示例

(32) E:disabled

フォームにおいて入力不可に設定されている E 要素のスタイルを指定します。

記述例
スタイルシート
  input:disabled {background-color:darkgray;}
  input[type="checkbox"]:disabled {outline: solid 2px gray;}

ボディ
<form action="#">
  入力欄:<input type="text" name="param" value="初期値" disabled><br>
  選択欄:<input type="checkbox" name="data" value="1" checked>チェック1
         <input type="checkbox" name="data" value="2">チェック2
         <input type="checkbox" name="data" value="3" disabled>チェック3<br>
  ボタン:<input type="submit" value="送信">  <input type="reset" value="中止" disabled>
</form>

ボタンを含めて、入力不可な input 要素の背景色が濃いグレイになります。ただし、チェックボックスの背景色は変わらないようです。

別途、チェックボックスは枠をグレイにしています。

表示例

(33) E:checked

フォームにおいてチェック状態の E 要素(チェックボックスやラジオボタン)のスタイルを指定します。

記述例
スタイルシート
  input:checked {outline: solid 3px red;}

ボディ
<form action="#">
  入力欄:<input type="text" name="param" value="初期値" disabled><br>
  選択欄:<input type="checkbox" name="data" value="1" checked>チェック1
         <input type="checkbox" name="data" value="2">チェック2
         <input type="checkbox" name="data" value="3" disabled>チェック3<br>
  ボタン:<input type="submit" value="送信">  <input type="reset" value="中止" disabled>
</form>

チェック状態の input 要素の枠が赤になります。

表示例

(34) E::first-line

E 要素の最初の行のスタイルを指定します。

ただし、フレージング・コンテンツに分類される要素には無効のようです。

記述例
スタイルシート
  p::first-line {color:blue;}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、<br>ちょうど<time>16:00</time>を表示していた。</p>

表示幅を狭くし、最初の文章は無理矢理に次の行に続くようにさせています。2つ目の文章は途中に改行(<br>)を入れて2行に分けています。ともに、1行目の文字色が青になっています。

表示例

(35) E::first-letter

E 要素の最初の文字のスタイルを指定します。

ただし、フレージング・コンテンツに分類される要素には無効のようです。

記述例
スタイルシート
  ::first-letter {color:red;}

ボディ
<h3>はじまり</h3>
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、<br>ちょうど<time>16:00</time>を表示していた。</p>

要素内の最初の文字色が赤になっています。改行後の文字は最初の文字とはみなされません。

表示例

ブラウザやフォントによっては、f と i や f が隣り合う場合、i の点が f の上部と結合されるなどして1文字のように合字され表示されることがあります。

例えば、最初の文字が fi だとすると、fi が1文字として扱われるため、::first-letter は f だけではなく、fi を対象としてしまうことがあります。

f と i などを合字するかどうかは、font-variant-ligatures で指定することができます。

表示例

は、fi が1文字として扱われていても f だけを対象としているようです。


(36) E::before

E 要素の内容の前に挿入する文字列や画像、そしてそのスタイルを指定します。挿入する文字列や画像などは content 要素で指定します。

content には以下のような値を指定します。空白で区切れば複数指定することもできます。

content
説明
"文字列"文字列を " や ' で囲んで指定する
ただし、&#x2605; などのように記述するとそのまま表示されてしまうので、\2605(&#x を \ にして、; をとる)のように記述する
URL(URL)画像や音声等のファイルの URL を指定する
counter(カウンタ名)
counters(カウンタ名, 区切り文字)
counter-increment で指定したカウンタ名を記述する
階層が深い場合には counters を使用する
attr(属性名)指定した属性の値が表示される
open-quote、close-quote開始引用符と終了引用符(quotes で指定されている引用符が階層に応じて挿入される)
no-open-quote、no-close-quote表示されない開始引用符と終了引用符(階層は深くなるので、quotes で指定されている引用符は変わる)
記述例
スタイルシート
  time::before {content:open-quote url("clock.png") attr(datetime) close-quote;color:red;}
  p {counter-increment: a;}
  p::before {content: "(" counter(a) ") ";}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

time 要素内の先頭に赤色で引用符で囲んで clock.png の画像を挿入しています。また、time 要素に datetime 属性がある場合はその値も表示しています。

また、p 要素にはカウンターが設定されていますので、順に番号が付けられています。

表示例

カウンターが階層になっている場合には、counters() を使用します。

記述例
スタイルシート
  ol {counter-reset: s; list-style-type: none;}
  li {counter-increment: s;}
  li::before {content: counters(s, ".") " ";}

ボディ
<ol>
  <li>item</li>
  <li>item
    <ol>
      <li>item</li>
      <li>item
        <ol>
          <li>item</li>
          <li>item</li>
          <li>item</li>
        </ol>
      </li>
      <li>item</li>
    </ol>
  </li>
  <li>item</li>
</ol>

counter-reset はカウンタを 0 にしますので、ol 要素ごとに 0 になります。ただし、"." を付加されて階層が深くなります。

li 要素の counter-increment でカウンタに 1 加算されます。そして、li 要素内の先頭に表示されます。

表示例

(37) E::after

E 要素の内容の後ろに挿入する文字列や画像など、そしてそのスタイルを指定します。挿入する文字列や画像などは content(E::before を参照)で指定します。

記述例
スタイルシート
  time::before {content:"≪";}
  time::after {content:"≫";}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

time 要素内の前後に "≪≫" を挿入しています。

表示例

(38) E:not(S)

S で指定するセレクタに当てはまらない E 要素のスタイルを指定します。

記述例
スタイルシート
  time:not([datetime]) {color:blue;}

ボディ
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

datetime 属性を持たない time 要素の文字色が青になります。

表示例

2.2.2 結合子

セレクタを演算子で結合することによって、さらに対象を限定することができます。

結合子名称説明
S1 S2子孫セレクタS1 要素の子孫となる S2 要素
S1 > S2子セレクタS1 要素の子となる S2 要素
S1 + S2隣接兄弟セレクタS1 要素の直後に隣接している S2 要素
S1 ~ S2兄弟セレクタS1 要素の後ろにある同じ階層の S2 要素
S1 , S2複数のセレクタに同じスタイルを適用する

(1) S1 S2

S1 要素の子孫として出現する S2 要素が対象になります。階層は深くても構いません。子孫セレクタとも呼ばれます。

記述例
スタイルシート
  p span time{color:blue;}

ボディ
<h3>はじまり</h3>
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、<span><em>ちょうど<time>16:00</time></em>を表示</span>していた。</p>

p 要素内のさらに span 要素内の time 要素の文字色が青になります。なお、span 要素の直下になくても、span 要素内の別の要素の中にある time 要素も対象になります。

表示例

(2) S1 > S2

S1 要素の子として出現する S2 要素が対象になります。直下である必要があります。子セレクタとも呼ばれます。

記述例
スタイルシート
  p > time{color:blue;}

ボディ
<h3>はじまり</h3>
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、<span>ちょうど<time>16:00</time>を表示</span>していた。</p>

p 要素内直下に記述されている time 要素の文字色が青になります。

2つ目の time 要素は p 要素直下ではありませんので、青くなりません。

表示例

(3) S1 + S2

S1 要素の直後に出現する S2 要素が対象になります。隣接兄弟セレクタとも呼ばれます。

記述例
スタイルシート
  h3 + p{color:blue;}

ボディ
<h3>はじまり</h3>
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

h3 要素の直後に記述されている p 要素の文字色が青になります。

2つ目の p 要素は h3 要素の直後ではありませんので、青くなりません。

表示例

(4) S1 ~ S2

S1 要素の後に S1 要素と同じ階層で出現する S2 要素が対象になります。兄弟セレクタとも呼ばれます。

記述例
スタイルシート
  h3 ~ p{color:blue;}

ボディ
<p>実は...</p>
<h3>はじまり</h3>
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

h3 要素の後に記述されている p 要素の文字色が青になります。

1つ目の p 要素は h3 要素の後ではありませんので(前なので)、青くなりません。

表示例

(5) S1, S2

S1 要素 と S2 要素が対象になります。いくつ記述しても構いません。

記述例
スタイルシート
  h3, time[datetime]{color:blue;}

ボディ
<h3>はじまり</h3>
<p>私たちが初めて会ったのは、<time datetime="2001-01-07">21世紀に入った最初の日曜日</time>だった。</p>
<p>デジタル時計は、ちょうど<time>16:00</time>を表示していた。</p>

h3 要素と datetime 属性を持つ time 要素の文字色が青になります。

表示例

2.2.3 プロパティ

CSS の一般的な形式は次のようになります。セレクタ で指定された要素のスタイルを変更するためには、変更するプロパティの名前とその値を指定します。

 セレクタ { プロパティ名: 値; }

複数のプロパティを変更する場合はセミコロン(;)で区切ります。

  p
  {
    font-size:12pt;
    color:blue;
  }

プロパティによって、値が一つのものもあれば複数のものもあります。値が複数ある場合は空白で区切ります。値に空白が含まれる場合は値を ' や " で囲みます。

  p
  {
    border:solid 1px blue;
    font-face:'Times New Roman';
  }

2.3  コメント

/* と */ の間はコメントになります。/* と */ は多重に囲むことはできません。

  p.note {color: blue;}      /* 注釈 */

2.4  CSS3 の指定方法

CSS の指定方法には下記のようなものがあります。優先順位の高い順に紹介します。もし同じ要素の同じ属性に異なる値が指定されている場合は、優先順位の高いものが採用されます。

(1) style 属性で指定する方法

要素ごとに style 属性で指定します。スタイルシートの影響は style 属性が記述してある要素だけです。

記述例
<p style="color:green;">緑の文字列</p>
<p style="color:red;">赤の文字列</p>

(2) <style>~</style> で指定する方法

<style>~</style> で、文書全体のスタイルを指定することができます。

記述例
<!DOCTYPE html>
<html>
  <head>
    <style>
      p.note {color:green;}
    </style>
  </head>
  <body>
    <p class="note">緑の文字列</p>
  </body>
</html>

(3) <link> を用いた外部 CSS ファイルで指定する方法

link 要素により、外部の CSS ファイル(sample.css)を読み込むことができます。外部 CSS ファイルを用いることで、複数の HTML文書で共通のスタイルシートを共有することができます。

記述例
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="sample.css">
  </head>
  <body>
    <p class="note">緑の文字列</p>
  </body>
</html>
sample.css
p.note {color:green;}

(4) @import を用いた外部 CSS ファイルで指定する方法

CSS ファイルや style 要素の先頭に @import を記述して、他の CSS ファイル(sample.css)を読み込むことができます。外部 CSS ファイルを用いることで、複数の HTML文書で共通のスタイルシートを共有することができます。

ただし、CSS ファイルの読み込みは link 要素より時間がかかります。

記述例
<!DOCTYPE html>
<html>
  <head>
    <style>
      @import url(sample2.css);
    </style>
  </head>
  <body>
    <p class="note">緑の文字列</p>
  </body>
</html>
sample2.css
@import url("sample.css");
p.note {font-size:12pt;}

2.5  優先順位

スタイルシートの指定方法は「2.4 CSS3 の指定方法」のように何通りかあります。このとき、同じ要素の同じ属性に異なる値が指定されている場合は、基本的には後から指定された方が優先されます。優先順位は ①②③ になります。

記述例
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="sample.css">                 ── ③
    <style>
      p {color:blue;}                                                         ── ②
    </style>
  </head>
  <body>
    <p style="color:green;">文字列</p>                                           ── ①
  </body>
</html>
sample.css
p {color:red;}
表示例

また、別々のスタルシートを同時に指定した場合は、 style属性、id指定、class指定、要素指定の順になります。

記述例
<!DOCTYPE html>
<html>
  <head>
    <style>
      #n1 { color: orange; }    /* id指定 */                  ── ②
      .c1 { color: yellow; }    /* class指定 */               ── ④
      .c2 { color: red; }   /* class指定(.c1より優先度が高い) */    ── ③
      p {color:blue;}                                       ── ⑤
    </style>
  </head>
  <body>
    <p class="c1 c2" id="n1" style="color:green;">文字列</p>
                                           
    <p class="c1 c2" id="n1">文字列</p>
    
    <p class="c1 c2">文字列</p>
    
    <p class="c1">文字列</p>
    
    <p>文字列</p>
  </body>
</html>

基本的には後から指定された方が優先されます。ただし、クラスの場合は class="c1 c2" の並びではなく、style 要素の中での後から定義されたものが優先されます。

表示例

スタルシートの定義のときに、! important を指定することによって、優先順位を一番にすることもできます。

記述例
<!DOCTYPE html>
<html>
  <head>
    <style>
      #n1 { color: orange; }    /* id指定 */                  ── ③
      .c1 { color: yellow; }    /* class指定 */               ── ⑤
      .c2 { color: red; }   /* class指定(.c1より優先度が高い) */    ── ④
      p {color:blue ! important;}   /* 最優先 */             ── ①
    </style>
  </head>
  <body>
    <p class="c2 c1" id="n1" style="color:green;">文字列</p>
                                           
  </body>
</html>

! important を指定されたスタルシートが一番に優先されます。

表示例

2.6  継承

親要素(より外側に記述された要素)に指定されたスタイルの多くは、子要素(内部に記述された要素)に継承されます。

<p style="color:green;">これは<strong>緑色</strong>の文字列</p>

strong 要素には color 属性が指定されていませんが、親要素である p 要素の color 属性が継承されます。

表示例

しかし、border 属性のように継承されない属性もあります。

<p style="border:solid 1px green;">これは<strong>黒色</strong>の文字列</p>

strong 要素には border 属性が継承されていません。

表示例

こうした継承されない属性も inherit を記述することによって継承することができます。

<p style="border:solid 1px green;">これは<strong style="border:inherit;">黒色</strong>の文字列</p>

strong 要素の border 属性に inherit を指定することによって p 要素の border 属性が継承されます。

表示例