4.1では,CSS2を含むCSSのどの版にも共通の文法及び前方互換な構文解析規則を示す。CSSの将来の版は,付加的な構文上の制約を追加するかもしれないが,このコア構文は厳守する。
これらの記述は,規定とする。附属書 Dで示される規定の文法規則によっても,これらの記述は補足される。
CSSのすべての水準,すなわち,水準1, 水準2, 及び将来の水準は,同じコア構文を使用する。これによって,利用者エージェントは,それが生成された時期には存在しなかったCSSの水準で記述されたスタイルシートを構文解析することができる。ただし,利用者エージェントがそのスタイルシートを完全に理解できるわけではない。設計者はこの機能を使用して,古い利用者エージェントで機能するスタイルシートを作成でき,CSSの最新の水準の可能性も検討することができる。
字句レベルでは,CSSスタイルシートはトークンの列から構成される。CSS2のトークンのリストを次に示す。定義には,Lexスタイルの正規表現を使用する。8進コードは,ISO 10646([ISO10646])を参照している。Lexの場合と同様に, 複数のものが一致する場合は,最も長く一致するものがトークンを決定する。
参考 ISO/IEC 10646における文字バックスラッシュは,日本では,しばしば"円記号(\)"として表示されることがある点に注意すること。
トークン | 定義 |
---|---|
IDENT | {ident}
|
ATKEYWORD | @{ident}
|
STRING | {string}
|
HASH | #{name}
|
NUMBER | {num}
|
PERCENTAGE | {num}%
|
DIMENSION | {num}{ident}
|
URI | url\({w}{string}{w}\)
|
UNICODE-RANGE | U\+[0-9A-F?]{1,6}(-[0-9A-F]{1,6})?
|
CDO | <!--
|
CDC | -->
|
; | ;
|
{ | \{
|
} | \}
|
( | \(
|
) | \)
|
[ | \[
|
] | \]
|
S | [ \t\r\n\f]+
|
COMMENT | \/\*[^*]*\*+([^/][^*]*\*+)*\/
|
FUNCTION | {ident}\(
|
INCLUDES | ~=
|
DASHMATCH | |=
|
DELIM | 上の規則によって一致しない他のすべての文字 |
この一覧における波括弧({})の中のマクロは,次のとおりに定義される。
マクロ | 定義 |
---|---|
ident | {nmstart}{nmchar}*
|
name | {nmchar}+
|
nmstart | [a-zA-
Z]|{nonascii}|{escape}
|
nonascii | [^\0-\177]
|
unicode | \\[0-9a-f]{1,6}[ \n\r\t\f]?
|
escape | {unicode}|\\[ -~\200-\4177777]
|
nmchar | [a-z0-
9-]|{nonascii}|{escape}
|
num | [0-9]+|[0-9]*\.[0-9]+
|
string | {string1}|{string2}
|
string1 | \"([\t !#$%&(-
~]|\\{nl}|\'|{nonascii}|{escape})*\"
|
string2 | \'([\t !#$%&(-
~]|\\{nl}|\"|{nonascii}|{escape})*\'
|
nl | \n|\r\n|\r|\f
|
w | [ \t\r\n\f]*
|
次にCSSのコア構文を示す。4.1.2以降にコア構文の使用法を記述する。附属書 Dは,さらに制限を加えた文法であって,CSS水準2の言語により近い。
stylesheet : [ CDO | CDC | S | statement ]*; statement : ruleset | at-rule; at-rule : ATKEYWORD S* any* [ block | ';' S* ]; block : '{' S* [ any | block | ATKEYWORD S* | ';' ]* '}' S*; ruleset : selector? '{' S* declaration? [ ';' S* declaration? ]* '}' S*; selector : any+; declaration : property ':' S* value; property : IDENT S*; value : [ any | block | ATKEYWORD S* ]+; any : [ IDENT | NUMBER | PERCENTAGE | DIMENSION | STRING | DELIM | URI | HASH | UNICODE-RANGE | INCLUDES | FUNCTION | DASHMATCH | '(' any* ')' | '[' any* ']' ] S*;
COMMENTトークンは,読み易さのために,この文法には出現していないが,任意個のCOMMENTトークンが,他のトークン間のどこに出現してもよい。
この文法におけるトークンSは,空白を表す。文字,"スペース(space)"(Unicode符号 32),"タブ(tab)"(9),"改行(line feed)"(10),"復帰(carriage return)"(13),及び"フォーム送り(form feed)"(12)だけが,空白に現れることができる。"em-space"(8195)及び"ideographic space"(12288)のような他のスペースに類似する文字は,空白の一部としてはならない。
キーワードは,識別子の形式をもつ。キーワードは,引用符の間("..."又は'...')に置かれてはならない。したがって,
red
はキーワードだが,
"red"はキーワードではない。これは,文字列とする。他の不正な例を次に示す。
width: "auto"; border: "none"; font-family: "serif"; background: "red";
次の規則は,常に成立するものとする。
Unicodeは,符号ごとに,ISO 10646([UNICODE]及び[ISO10646]参照)と等価であることに注意。
第1に,文字列内では,改行が続くバックスラッシュは無視される。すなわち,文字列は,バックスラッシュ又は改行のいずれも含まないと考えられる。
次に,バックスラッシュは特殊なCSS文字の意味を無効にする。16進数字を除く任意の文字は,いずれもバックスラッシュでエスケープでき,その特殊な意味を除去できる。例えば,"\""は,一つの2重引用符から成る文字列とする。スタイルシートの意味が変更されるので,スタイルシートプリプロセサは,これらバックスラッシュをスタイルシートから除去してはならない。
3番目に,バックスラッシュエスケープによって,文書作成者は,簡単には文書の中に置くことができない文字を参照できる。この場合には,バックスラッシュの後に多くとも六つの16進数字(0..9A..Fのいづれか)が続くが,これは,その数字をもつISO 10646([ISO10646])文字を表す。16進数の後に一つの数字又は字が続く場合は,その16進数の終わりを明確に示す必要がある。それには次の2通りの方法がある。
実際には,これらの二つの方法を組み合わせてもよい。16進数エスケープの後では,ただ一つの空白文字だけが無視される。これは,エスケープシーケンス後に"本当の"スペースを入れるためには,そのスペース自体をエスケープするか又は2重とするかのいずれかをしなければならないことを意味する点に注意すること。
CSSスタイルシートは,CSSのどの版でも,文のリストから構成される(上記の文法を参照)。文には2種類,
この標準情報(TR)では,"直前"又は"直後"という表現は,空白又は注釈が介入しないことを意味する。
@規則は,@キーワード,すなわち,'@'文字の直後に識別子が続くもの,から始まる。'@import','@page'などが,その例である。
@規則は,次のセミコロン(;)又は次のブロックのどちらか最初に現れるものを含むそこまでのすべてのものから構成される。認識しない@規則に出会ったCSS利用者エージェントは,@規則のすべてを無視し,その後から構文解析を継続しなければならない。
CSS2利用者エージェントは,ブロック内部に現れる,又はすべての規則集合にも先行しないあらゆる'@import'規則を無視しなければならない。
例えば,CSS2構文解析系が次のスタイルシートに出会ったとする。
@import "subs.css"; H1 { color: blue } @import "list.css";
2番目の'@import'は,CSS2に従えば不正となる。CSS2構文解析系は,その@規則全体を無視し,スタイルシートを効果的に削減し,次のようにする。
@import "subs.css"; H1 { color: blue }
次の例では,2番目の'@import'規則は'@media'ブロック内で現れるので,妥当ではない。
@import "subs.css"; @media print { @import "print-main.css"; BODY { font-size: 10pt } } H1 {color: blue }
ブロックは,左波括弧({)で始まり,対応する右波括弧(})で終わる。その間には,あらゆる文字が存在してよい。ただし,丸括弧(( )),角括弧([ ])及び波括弧({ })は,常に対応する組で現れなければならないが,入れ子になってもよい。1重引用符(')及び2重引用符(")も対応する組で現れなければならず,その間の文字は文字列として構文解析される。文字列の定義については,トークン化を参照すること。
ブロックの例を次に示す。2重引用符で括られた右波括弧は,ブロックの始まりである波括弧とは対応せず,2番目の1重引用符は,エスケープされた文字なので,最初の1重引用符とは対応しない点に注意すること。
{ causta: "}" + ({7} * '\'') }
この規則は妥当なCSS2ではない点に注意すること。ただし,ここで定義した意味ではブロックとなっている。
"規則"とも呼ぶ規則集合は,後に宣言ブロックが続く選択子からなる。
以降では{}ブロックとも呼ぶ宣言ブロックは,左波括弧({)で始まり,対応する右波括弧(})で終わる。その間には,ゼロ個以上のセミコロン(;)で区切られた宣言のリストが存在しなければならない。
選択子(選択子の節も参照)は,最初の左波括弧({)まで(ただし左括弧は含まない。)のすべてのものから構成される。選択子は,常に,{}ブロックと一緒に処理される。利用者エージェントが選択子を構文解析できない場合,すなわち,選択子が妥当なCSS2ではない場合,{}ブロックも無視しなければならない。
CSS2は,選択子のコンマ(,)に特別な意味を与える。しかし,コンマがCSSの将来の版で他の意味をもつかどうかは分からないので,選択子のどこかにエラーがある場合には,選択子の残りがCSS2の規定に合っているように見えても,そのすべての文を無視するほうがよい。
例えば,"&"はCSS2選択子において妥当なトークンではないので,CSS2の利用者エージェントは,次の例の2行目全体を無視し,H3の色を赤に設定してはならない。
H1, H2 {color: green } H3, H4 & H5 {color: red } H6 {color: black }
より複雑な例を次に示す。波括弧の最初の二つの対は文字列内部にあり,選択子の最後をマークしていない。このCSS2文は,妥当である。
P[example="public class foo\ {\ private int x;\ \ foo(int x) {\ this.x = x;\ }\ \ }"] { color: red }
宣言は,空か,又は後ろにコロン(:)更にその後に値が続く特性から構成されるもの,のいずれかとする。これらの前後には,空白が存在してもよい。
選択子の動作方法を示すために,同じ選択子に対する複数の宣言を,セミコロン(;)で区切って,グループ化してもよい。
H1 { font-weight: bold } H1 { font-size: 12pt } H1 { line-height: 14pt } H1 { font-family: Helvetica } H1 { font-variant: normal } H1 { font-style: normal }
この規則は,次の規則と等価である。
H1 { font-weight: bold; font-size: 12pt; line-height: 14pt; font-family: Helvetica; font-variant: normal; font-style: normal }
特性は,識別子とする。値にはどの文字が現われてもよいが,丸括弧("( )"),角括弧("[ ]"),波括弧("{ }"),一重引用符(')及び二重引用符(")は,対応する対で現われなければならず,文字列の中にないセミコロンは,エスケープされなければならない。丸括弧,角括弧及び波括弧は,入れ子にしてもよい。引用符内部では,文字は,文字列として構文解析される。
値の構文は,各特性に対して,個々に指定されるが,いずれの場合も,値は,識別子,文字列,数字,長さ,パーセント,URI,色,角度,時間及び周波数から構築される。
利用者エージェントは,妥当でない特性名又は妥当でない値をもつ宣言を無視しなければならない。すべてのCSS2の特性は,それが受け入れる値に対して,固有の構文上の制限及び意味上の制限をもつ。
例えば,CSS2構文解析系が次のスタイルシートに出会うとする。
H1 { color: red; font-style: 12pt } /* Invalid value: 12pt */ P { color: blue; font-vendor: any; /* Invalid prop.: font-vendor */ font-variant: small-caps } EM EM { font-style: normal }
1行目の2番目の宣言は,妥当でない値'12pt'をもつ。2行目の2番目の宣言は,未定義の特性'font-vendor'を含む。CSS2構文解析系は,これらの宣言を無視し,スタイルシートを効果的に削減して,次のとおりにする。
H1 { color: red; } P { color: blue; font-variant: small-caps } EM EM { font-style: normal }
コメントは,"/*"という文字の並びで始まり,"*/"という文字の並びで終わる。コメントは,トークンの間のどこに現われてもよく,その内容は,レンダリングに影響しない。コメントは,入れ子にしてはならない。
CSSは,SGMLコメント区切り子("<!--"及び"-->")を,一定の場所に置くことができるが,CSSコメントを区切らないものとする。SGMLコメント区切り子は,STYLE要素のHTMLソース文書に現われるスタイル規則を,HTML3.2より以前の利用者エージェントから隠ぺいしてもよいとするために,許可する。更に情報を入手したい場合は,HTML 4.0規定 ([HTML40])を参照すること。
利用者エージェントが不正なスタイルシートの一部を無視しなければならない場合もある。この標準情報(TR)は,無視の意味を,利用者エージェントが不正な部分の最初及び最後を発見するために構文解析するが,それを除けば,不正な部分がそこに存在しないものとして動作すること,と定義する。
新しい特性と既存の特性に対する新しい値とが将来確実に追加できるように,利用者エージェントは,次のシナリオに遭遇する場合,次の規則に従う必要がある。
H1 { color: red; rotation: 70minutes }
利用者エージェントは,スタイルシートが次であるものとしてこれを処理する。
H1 { color: red }
IMG { float: left } /* correct CSS2 */ IMG { float: left here } /* "here" is not a value of 'float' */ IMG { background: "red" } /* keywords cannot be quoted in CSS2 */ IMG { border-width: 3 } /* a unit must be specified for length values */
CSS2構文解析系は,最初の規則を尊重し,残りを無視し,スタイルシートが次であるものとする。
IMG { float: left } IMG { } IMG { } IMG { }
将来,CSS規定が変化すれば,それに適合する利用者エージェントは,最初の規則に加えて,他の規則の一つ以上を受け付ることになるかも知れない。
@three-dee { @background-lighting { azimuth: 30deg; elevation: 190deg; } H1 { color: red } } H1 { color: blue }
'@three-dee'@規則は,CSS2の一部ではない。そのため,(3番目の右波括弧までそれを含む)その@規則全体が,無視される。CSS2利用者エージェントはそれを無視 し,効果的にスタイルシートを削減して,次のようにする。
H1 { color: blue }
幾つかの値の型は,<integer>で表示される整数値又は<number>で表示される実数値をもってもよい。実数及び整数は,10進記法だけで指定する。<integer>は,"0"〜"9"の数字一つ以上から構成される。<number>は,<integer>か,又はゼロ個以上の数字の後にドット(.)が続き更にその後に1個以上の数字が続くもののいずれかとする。整数及び実数の両方とも,符号を示す"-"又は"+"が先行してもよい。
整数又は実数を値として許容する特性の多くが,実際には,値をある範囲に制限することに注意すること。特に,非負数値に制限することが多い。
長さは,水平方向の寸法又は上下方向の寸法を参照する。
この標準情報(TR)で<length>によって表示される長さの値のフォーマットは,オプションの符号文字('+'又は'-'だが,'+'がデフォルト)の直後に,10進小数点をもつ又はもたない<number>が続き,その直後にpx,degなど単位識別子が続くものとする。'0'の長さの後では,単位識別子はオプションとする。
負の長さの値を許容する特性もあるが,これはフォーマット化モデルを複雑にするかもしれないし,実装固有の制限が存在してもよい。負の長さの値をサポートできない場合,サポートできる最も近い値に変換することが望ましい。
長さの単位には,相対単位及び絶対単位の2種類が存在する。相対的な長さの単位は, 他の長さの特性に相対的な長さを指定する。相対単位を使用するスタイルシートは,例えば,コンピュータディスプレイからレーザプリンタへ,などの,あるメディアから他のメディアへの変倍をより簡単に行える。
相対単位を次に示す。
H1 { margin: 0.5em } /* em */ H1 { margin: 1ex } /* ex */ P { font-size: 12px } /* px */
'em'単位は,使用される要素の'font-size'特性の計算値に等しい。ただし,例外として,'em'が'font-size'特性自体の値の中に現われる場合がある。その場合には,親要素のフォントサイズを参照する。'em'は,上下方向の測定又は水平方向の測定に使用してもよい。この単位は,印刷テキストでは4倍幅(quad-width)と呼ばれることもある。
'ex'単位は,フォントの'x-height'によって定義される。xハイトは,小文字"x"の高さに等しいことが多いので,そう呼ばれる。しかし,'ex'は,"x"を含まないフォントに対しても定義される。
次の規則を検討する。
H1 { line-height: 1.2em }
これは,H1要素の行の高さがH1要素のフォントサイズの20%大きいことを意味する。
H1 { font-size: 1.2em }
これは,H1要素のフォントサイズがH1要素が継承するフォントサイズの20%大きいことを意味する。
文書ツリーのルート(HTMLの中の"HTML"など)に対して指定される場合,'em'及び'ex'は,特性の初期値を参照する。
画素単位は,視覚化装置,すなわち,多くの場合,コンピュータディスプレイ,の解像度に相対的とする。出力装置の画素密度が典型的なコンピュータディスプレイの画素密度と非常に異なる場合,利用者エージェントは,画素値をスケール化し直すことが望ましい。参照画素は,90dpiの画素密度をもち読者から腕の長さだけ離れている装置上での1画素の視覚角度とすることを推奨する。通常の腕の長さは28インチなので,その視覚角度は約0.0227度となる。
腕の長さだけ離れて読み取る場合には,1pxは,約0.28 mm(1/90 inch)に相当する。レーザプリンタで印刷する場合には,腕の長さより若干短い距離(55 cm, 21 inches)で読み取ることになるので,1pxは,約0.21 mmとなる。300 dpi(画素/インチ)のプリンタでは,3画素(0.25 mm)にまで丸め,600 dpiのプリンタでは,5画素にまで丸めることができる。
次の二つの図は,画素のサイズにおける視覚距離の効果及び装置の解像度の効果を示している。最初の画像では,読取り距離は71 cm (28 inch)であって,画素は0.28 mmとなるが,読取り距離が3.5 m(12 feet)の場合は,画素は1.4 mm必要となる。
2番目の画像では,一辺が1pxの正方形の領域を低解像度の装置(コンピュータスクリーン)では1画素でおおっているが,400 dpiレーザプリンタなどのより高解像度の装置では,同じ領域を16画素でおおっている。
子要素は,親要素に対して指定される相対値を継承しない。子要素は,一般に,計算値を継承する。
次の規則では,H1要素がBODY要素の子である場合は,H1要素の計算された'text-indent'値は36ptであって,45ptではない。
BODY { font-size: 12pt; text-indent: 3em; /* i.e., 36pt */ } H1 { font-size: 15pt }
絶対的な長さの単位は,出力メディアの物理的特性が既知の場合だけに有用となる。絶対単位を次に示す。
H1 { margin: 0.5in } /* inches */ H2 { line-height: 3cm } /* centimeters */ H3 { word-spacing: 4mm } /* millimeters */ H4 { font-size: 12pt } /* points */ H4 { font-size: 1pc } /* picas */
指定された長さがサポートできない場合には,利用者エージェントは,実際の値でそれを近似しなければならない。
この標準情報(TR)で<percentage>によって示されるパーセント値のフォーマットは,オプションの符号文字('+'又は'-'で,デフォルトは'+')に,その直後に<number>が続き,さらにその直後に'%'が続くものとする。
パーセント値は,長さなどの他の値に対して,常に相対的とする。パーセントを許容する各特性は,パーセントが参照する値も定義する。その値は,同じ要素に対する他の特性の値,祖先要素に対する特性の値,又は包含ブロックの幅などのフォーマット化文脈の値であってよい。パーセント値がルート要素の特性に対して設定され,そのパーセントがある特性の継承された値を参照するものとして定義されている場合,結果としての値は,その特性の初期値のパーセント倍となる。
子要素は,一般に,親要素の計算値を継承するので,次の例では,P要素の子は,パーセント値(120%)ではなく,'line-height'に対する12ptの値を継承する。
P { font-size: 10pt } P { line-height: 120% } /* 120% of 'font-size' */
URL(Uniform Resource Locators,統一資源ロケータ,[RFC1738]及び[RFC1808]参照)は,ウェブ上の資源のアドレスを提供する。資源を識別する期待されている新しい方法に,URN(Uniform Resouce Name,統一資源名)がある。両者はともにURI(Uniform esource Identifier,統一資源識別子,[URI]参照)と呼ばれる。この標準情報(TR)では,URIという用語を使用する。
この標準情報(TR)のURI値は,<uri>で表示される。特性値でURIを指定するために使用する機能的記法は,"url()"とする。例を次に示す。
BODY { background: url("http://www.bg.com/pinkish.gif") }
URI値のフォーマットは,'url('に,オプションの空白,オプションの1重引用符(')又は2重引用符("),URIそれ自体,オプションの1重引用符(')又は2重引用符("),オプションの空白,及び')'が続くものとする。ただし,二つの引用符は,同じでなければならない。
引用符のない例を次に示す。
LI { list-style: url(http://www.redballs.com/redball.png) disc }
URIの中に現われる,丸括弧,コンマ,空白文字,1重引用符(')及び2重引用符(")は,バックスラッシュで,'\(','\)','\,'などのように,エスケープしなければならない。
URIの型によっては,[URI]に示されているように,これらの文字をURIエスケープとして書けるかもしれない。その場合には,"(" = %28,")" = %29などとなる。
資源の絶対位置に依存しないモジュル化スタイルシートを生成するために,文書作成者は,相対URIを使用してもよい。相対URIは,[RFC1808]で示されているとおり,基底URIを使用して,完全URIに変換される。RFC 1808の 3.は,この処理のための規定としてのアルゴリズムを定義する。CSSスタイルシートに対しては,基底URIは,ソース文書のではなくて,スタイルシートの基底URIとする。
例えば,次の規則を考える。
BODY { background: url("yellow") }
この規則が,次のURIで指定されるスタイルシートの中に置かれているとする。
http://www.myorg.org/style/basic.css
ソース文書のBODYの背景は,次のURIが指定する資源で記述される任意の画像で埋めつくされる。
http://www.myorg.org/style/yellow
利用者エージェントは,利用できない資源又は適用できない資源を指定するURIを処理する方法に関しては,様々であってよい。
カウンタは識別子によって示される('counter-increment'特性及び'counter-reset'特性を参照)。カウンタの値を参照するために,'counter(<identifier>)'又は'counter(<identifier>, <list-style-type>)'という記法を使用する。デフォルトスタイルは,'decimal'とする。
同じ名前の入れ子になったカウンタの列を参照するための記法は,'counters(<identifier>, <string>)'又は'counters(<identifier>, <string>, <list-style-type>)とする。生成される内容における"入れ子カウンタ及び有効範囲"を参照のこと。
CSS2では,カウンタの値は,'content'特性だけから参照可能とする。'none'が,<list-style-type>で可能なことに注意すること。すなわち,'counter(x, none)'は,空の文字列を生成する。
各章(H1)の段落(P)を番号付けするスタイルシートを次に示す。段落は,ローマ数字で番号付けされ,そのローマ数字の後にピリオド及びスペースが続く。
P {counter-increment: par-num} H1 {counter-reset: par-num} P:before {content: counter(par-num, upper-roman) ". "}
どの'counter-reset'の有効範囲にもないカウンタは,ルート要素の'counter-reset'によって,0にリセットされたものと仮定している。
キーワード色名は,aqua, black, blue fuchsia, gray, green, lime, maroon, navy, olive purple, red, silver, teal, white, yellowとする。これらの16色は,HTML 4.0([HTML40])で定義される。これらの色キーワードに加えて,利用者は,利用者の環境のオブジェクトが使用する色に対応するキーワードを指定してもよい。更なる情報を入手したい場合は,システム色を参照すること。
BODY {color: black; background: white } H1 { color: maroon } H2 { color: olive }
RGB色モデルは,数値色指定で使用される。次の例は,すべて同じ色を指定している。
EM { color: #f00 } /* #rgb */ EM { color: #ff0000 } /* #rrggbb */ EM { color: rgb(255,0,0) } /* integer range 0 - 255 */ EM { color: rgb(100%, 0%, 0%) } /* float range 0.0% - 100.0% */
16進記法のRGB値のフォーマットは,'#'で始まり,その直後に3桁又は6桁の16進数が続くものとする。3桁の数字のRGB記法(#rgb)は,ゼロを付加するのではなく,数字を重複させることによって,6桁の形式(#rrggbb)に変換される。例えば,#fb0は#ffbb00に展開される。これによって,確実に白(#ffffff)は短い記法(#fff)で指定でき,ディスプレイの色ビット幅への依存性が除去される。
関数的記法でのRGB値のフォーマットは,'rgb('で始まり,これに三つの数値(三つの整数値又は三つのパーセント値のいずれか)をコンマで区切ったリストが続き,さらに')'が続くものとする。整数値255は100%に対応し,16進記法でのF又はFFに対応する。すなわち,rgb(255,255,255) = rgb(100%,100%,100%) = #FFFである。空白文字が,数値の前後にあってもよい。
すべてのRGB色は,sRGB色空間で指定される([SRGB]参照)。利用者エージェントがこれらの色を表示する正確さは一律でなくともよいが,sRGBを使用することによって,その色が何かという,あいまい性のない客観的に測定可能な定義が提供され,国際規格への関係付けが可能となる([COLORIMETRY]を参照)。
適合する利用者エージェントは,ガンマ補正実行の色表示努力を制限してもよい。sRGBは,指定される視覚化条件の下で,2.2という表示ガンマを指定する。利用者エージェントは,CSSで提供される色を調整し,出力装置における"自然な"表示ガンマを組み合わせることで,2.2という実効的表示ガンマを生成するなどを行うことが望ましい。さらに詳細を知りたい場合は,ガンマ補正を参照すること。CSSで指定される色だけが影響を受ける点に注意すること。例えば,画像は,それ自体の色情報をもっていると期待される。
装置の全色域外の値は,切り取るほうがよい。red,green及びblueの値は,装置がサポートする範囲内にあるように変更されなければならない。全色域がsRGBと同じである典型的なCRTモニタに対しては,次の三つの規則は等しい。
EM { color: rgb(255,0,0) } /* integer range 0 - 255 */ EM { color: rgb(300,0,0) } /* clipped to rgb(255,0,0) */ EM { color: rgb(255,-10,0) } /* clipped to rgb(255,0,0) */ EM { color: rgb(110%, 0%, 0%) } /* clipped to rgb(100%,0%,0%) */
プリンタなどの他の装置は,sRGBとは異なる全色域をもっている。すなわち,0..255のsRGB範囲外の色の幾つかはその装置の全色域内で表示できるが,0..255のsRGB範囲内の他の色は全色域外にあって,切り取られることになる。
備考 色は,相当量の情報を文書に付加し,文書をより読みやすくすることができるが,色を組み合せることによって,色覚異常のある利用者の一部には問題が生じる可能性がある点を考慮すること。背景画像を使用したり,背景の色を設定する場合は,それに応じて前景の色を調整すること。
テキストの<angle>によって表示される角度の値は,聴覚スタイルシートで使用する。
そのフォーマットは,オプションの符号文字('+'又は'-'で,デフォルトは'+')で始まり,その直後に<number>が続き,さらにその直後に角度単位識別子が続くものとする。
角度単位識別子を次に示す。
角度の値は負でもよい。利用者エージェントは,角度の値を0度〜360度の範囲に正規化することが望ましい。例えば,-10degと350degとは等しいとする。
例えば,直角は,'90deg','100grad'又は'1.570796326794897rad'である。
テキストの<time>によって表示される時間の値は,聴覚スタイルシートで使用する。
そのフォーマットは,<number>で始まり,直後に時間単位識別子が続く。
時間単位識別子を次に示す。
時間値は,負数であってはならない。
テキストの<frequency>によって表示される周波数値は,聴覚段階スタイルシートで使用する。
そのフォーマットは,<number>で始まり,直後に周波数単位識別子が続く。
周波数単位識別子を次に示す。
周波数値は,負数であってはならない。
例えば,200Hz(又は200hz)は低音であり,6kHz(又は6khz)は高音である。
文字列は,2重引用符又は1重引用符のいずれかを使って書くことができる。'\"'又は'\22'のようにエスケープする場合以外は,2重引用符は,2重引用符内に現われることができない。1重引用符も同様とする。1重引用符をエスケープする場合は,"\'"又は"\27"とする。
"this is a 'string'" "this is a \"string\"" 'this is a "string"' 'this is a \'string\''
文字列は,改行を直接に含むことができない。文字列に改行を含めるには,エスケープ"\A"(16進のAは,Unicodeでは改行文字であるが,CSSでは"改行"の一般的な概念を表す。)を使用する。例は,'content'特性を参照すること。
見た目の美しさ又はその他の理由のために,文字列を数行に渡って区切ることができるが,そういった場合には,改行それ自体をバックスラッシュ(\)を用いてエスケープしなければならない。例えば,次の二つの選択子は全く同一とする。
A[TITLE="a not s\ o very long title"] {/*...*/} A[TITLE="a not so very long title"] {/*...*/}
CSSスタイルシートは,国際文字集合(Universal Character Set,[ISO10646]参照)からの文字の列とする。伝送及び格納のためには,これらの文字は,US-ASCIIが使用可能な文字の集合をサポートする文字符号化(ISO 8859-x,SHIFT JISなど)によって,符号化されなければならない。文字集合及び文字符号化の適切な導入としては,HTML 4.0規定([HTML40]の5.)を参照すること。XML 1.0規定([XML10]の2.2,4.3.3及び附属書F)も参照すること。
スタイルシートが,HTMLのSTYLE要素又は"style"属性におけるように,他の文書に埋め込まれる場合,スタイルシートは,全文書の文字符号化を共有する。
スタイルシートが分離したファイルに存在する場合,利用者エージェントは,次の優先順位を守り,文書の文字符号化を決定しなければならない。優先順位は,高いものから順に列挙する。
外部スタイルシートには,@charset規則が多くとも一つ現われてよい。すなわち,@charset規則は,埋込みスタイルシートに現われてはならない。さらに,@character規則は,文書の真に最初に現われなければならず,いかなる文字も先行してはならない。"@charset"の後で,文書作成者は,文字符号化の名前を指定する。その名前は,IANAレジストリに記述されているとおりの文字集合名でなければならない。([IANA]参照。文字集合の完全リストについては,[CHARSETS]も参照すること。)次に例を示す。
@charset "ISO-8859-1";
この標準情報(TR)は,利用者エージェントがサポートしなければならない文字符号化を規定しない。
符号化される方法に関するあらかじめ分かっている(a priori)情報が存在しないので,@charset構成要素に依存してしまうのは,理論的には問題となる点に注意すること。しかし,実際には,インタネットで広く利用されている符号化は,ASCII,UTF-16,UCS-4又は(まれではあるが)EBCDICのいすれかに基づいている。このことは,一般に,文書の初期バイト値によって,利用者エージェントが符号化ファミリを確実に検出できることを意味する。符号化ファミリは,@characterを復号するために十分な情報を提供し,したがって文字符号化を正確に決定できる。
スタイルシートが,現在の文字符号化で表現できない文字を参照しなければならない場合もある。これらの文字は,ISO 10646文字へのエスケープされた参照として書かれなければならない。これらエスケープは,HTML文書又はXML文書における数値文字参照と同じ目的を提供する([HTML40]の5及び25を参照)。
文字エスケープ機構で表現しなければならない文字がわずかの場合は,この機構を使用することが望ましい。文書の大部分がエスケープを要求する場合には,文書作成者は,より適切な符号化を用いて,文書を符号化するほうがよい。例えば,ギリシャ文字を多く含む文書の場合には,文書作成者は,"ISO-8859-7"又は"UTF-8"を使用するかもしれない。
異なる文字符号化を使用する中間プロセサは,これらのエスケープシーケンスをその符号化のバイト列に変換してよい。一方,中間プロセサは,ASCII文字の特別な意味を無効にするエスケープシーケンスを変更してはならない。
適合する利用者エージェントは,それが認識する文字符号化におけるすべての文字をUnicodeに正確に対応付けなければならない。(そうでない場合には,対応付けたものとして振る舞わなければならない。)
例えば,ISO-8859-1(Latin-1)として伝送される文書は,直接にはギリシャ文字を含むことができない。そのために,"κουρος"(ギリシャ語の"kouros")を,"\3BA\3BF\3C5\3C1\3BF\3C2"として書かなければならない。
備考 HTML 4.0では,数値文字参照は,"style"属性値で解釈されるが,STYLE要素の内容では解釈されない。この非対称性のために,文書作成者は,"style"属性及びSTYLE要素の両方に対して数値文字参照を使うよりは,CSS文字エスケープ機構を使用するほうがよい。例えば,次の例のとおりにすることを推奨する。
<SPAN style="voice-family: D\FC rst">...</SPAN>
次の例は推奨しない。
<SPAN style="voice-family: Dürst">...</SPAN>