Cascading Style Sheets
HTML |
---|
表・話・[ 編]・[ 歴] |
Cascading Style Sheets(CSS、カスケーディング・スタイル・シート、カスケード・スタイル・シート)とは、HTML や XML の要素をどのように修飾(表示)するかを指示する、W3Cによる仕様の一つ。文書の構造と体裁を分離させるという理念を実現する為に提唱されたスタイルシートの、具体的な仕様の一つ。
CSSはHTMLで表現可能と考えられるデザインの大部分を実現できる要素を取り入れつつ、新たなデザイン機能を備える。また、以下のような特徴を持つ。
- ページを表示するメディアに合わせてスタイルシートを切り替えることで、メディアごとに表示を変化させることができる。
- ユーザーエージェント(多くの場合ウェブブラウザ)、ウェブサイト制作者、ユーザがそれぞれ定義したCSSのもたらす効果を重ね合わせる(カスケードする)ことができる。[注釈 1]
CSSは、1994年にWWW生誕の地であるCERNに勤務するホーコン・ウィウム・リー氏により提唱された。
記述
スタイルの情報は読み込む内容(作成者スタイルシート)やユーザーエージェントの設定(ユーザースタイルシート)の二ヶ所に記載できる。またユーザーエージェントも独自のスタイル(デフォルトスタイルシート)を持っている。
作成者スタイルシートはマークアップ文書の中に直接記述するか、別文書として読み込ませる形で利用される。CSSの利便性を最大限発揮する為に、別文書として読み込ませる事が推奨されている。
記述方法
ここではCSS Level 2について説明する。CSSの文法は異なるレベル間でも後方互換性を持つように設計されており、例えばCSS Level 1で書かれたスタイルシートを CSS Level 2として扱う事も可能である(但し一部に解釈の相違などに伴う非互換部分も存在する)。CSSでは要素にスタイルを与えるため、次のような仕様が定められている。
以下のCSS断片を例にとる。
p#id { color : #ff3300 }
- "{" から "}" までの部分を宣言ブロックという
- "p#id" をセレクタ(選択子)といい、スタイルが適用される対象をしめす
- 宣言ブロックとセレクタを合わせて規則集合という
- "color : #ff3300" 部分を宣言という
- 宣言の内、":" より前(上例では "color")をプロパティ(特性)という
- 宣言の内、":" より後(上例では "#ff3300")を値という
上例の CSS 断片を適用すると宣言している文書のうち、セレクタが指定しているものと一致する部位(HTML 文書においては要素、要素の親子関係、特定のクラス、ID など)に、宣言ブロック内の宣言が適用される。宣言は、「プロパティ:値」か、「空(何も記述しない)」のどちらかで構成され、プロパティ、":"、値の前後には空白文字(スペース、タブ、改行など)を自由に入れられ、また";"で区切ることにより宣言を並べて書くことができる。
上例は HTML 文書に適用する場合、「id という ID を持った p 要素の文字色を赤FF(=255)、緑33(=51)、青0にせよ」という指定を意味する。
color : #ff3300;
width : 35%
color : "#0033ff";
width : '53%'
このような宣言があったとき、後者二つは""や''を付したために不正である。なぜなら、""や''で囲ったものは文字列として扱われ、colorプロパティが取りうる色の値(#rrggbb、rgb([0-255],[0-255],[0-255])、または、blackやredなどのキーワードなど)ではないからである。
p#id { color: #ff3300 }
p#id { font-size: 24px }
は、
p#id { color: #ff3300; font-size: 24px }
と等価である。;は前者のように宣言をセレクタに一つずつ書いてあるのを、ひとつのセレクタのブロックで記述するときに宣言を分けるのに使う。そのため、必ずしも宣言に;をつけるのを強制するものではない。
セレクタは、実装レベルの高いブラウザならばどの属性であってもCSSを適用することが可能であり、この場合IDに関する属性セレクタであるので、#idは[id="id"]と等価である。セレクタの簡単なマッチングが可能である。 そのほかHTMLタグに対する適用、文書構造からみた子・兄妹構造へ適用するセレクタ、更にはリンクや動的な表現・言語に関する疑似クラス(:link、:hover、:lang)などがある。
優先順位
CSSは必ずしも一つのところで一意に指定できず、そのため指定内容の衝突を避けるために優先順位がユーザーエージェントによって計算される。その結果は、以下のような条件により算出される。
- 作成者スタイルシートはユーザースタイルシートより優先される
- デフォルトスタイルシートは他のスタイルシートを優先する
- 最重要指定されている宣言はユーザースタイルシートが作成者スタイルシートより優先される(CSS1では逆)
- 外部から読み込んだものは読み込んだ先とまとめて扱う
- 詳細度によって整理する
- そのセレクタ内で指定先を一意に決められるもの(IDの類)が多い方を優先する
- IDの類による優先順位が同じ場合は、属性や擬似クラスの数が多い方を優先する
- それでも優先順位が決まらない場合は、要素の数が多い方を優先する
- これでもまだ優先順位が同一の場合、作成者スタイルシートにおいて以下の順で優先する
- インラインのもの
- 外部からのもの
- HTMLのalign属性など、CSS以外によるスタイルの指定は、それと等価なCSSによるスタイル指定が製作者スタイルシートの先頭にあるものとして扱う。ただし、これらの詳細度は最も低いものとする(CSS1においては要素名による指定を一つだけ含むセレクタと同じ詳細度)
記載可能な方法の詳細は次の通りで、一般的に優先される順位で並び替えている(CSS2で最重要指定の優先順位の仕様が変更されている、勧告6章4)。
- ユーザスタイルシート中で最重要指定された宣言 - ユーザーエージェントの設定のスタイルの中で!importantを宣言に付加する
- 作成者スタイルシート中で最重要指定された宣言 - 作成者が内容に付随させたスタイル中で!importantを宣言に付加する。
- 作成者スタイルシート中の通常の宣言
- ユーザースタイルシート中の通常の宣言
- デフォルトスタイルシートの宣言
作成者スタイルシートの記述方法による優先順位は以下の通り。
- 特定の要素にスタイルを記述する
- HTMLやXMLのヘッダ部にそのページ全体を対象にスタイルを定義する
- CSSのみを記述した外部ファイルを用意し、HTMLファイルのヘッダ部からリンクを張ってスタイルを参照させる
脚注
注釈
- ↑ ただし、拡張・修正の続いている CSS 仕様の全てを完全に実装しているユーザーエージェントは事実上皆無といってよく、実際シェアで多数を占めるユーザエージェントは部分対応にすぎない。しかし、実用上支障のないレベルの実装はされてきており、なおかつ表現のお互いの互換性についても考慮されてきている。
出典