[6] [[CSS]] ではほとんどあらゆるところで[[文字]]を [DFN[[[escape]]]] して使うことができます。 [8] [[CSS]] の他、共通の構文を使っている、[[選択子]]や[[媒体照会]]でも [[escape]] を使えます。 * 仕様書 [REFS[ - [7] [CITE@en[Syntax and basic data types]] ([TIME[2011-06-07 22:09:52 +09:00]] 版) ]REFS] * 構文 - [15] [CODE(char)[[[\]]]] の後に[[十六進数]] ([[大文字]]または[[小文字]]) が続く場合、 -- [16] その[[十六進数]]で表される[[符号位置]]の [[ISO/IEC 10646]] の[[文字]]を表します [SRC[>>7]] --- [17] なぜかここでの定義は [[Unicode]] ではなく [[ISO/IEC 10646]] になっています --- [20] [[符号位置]]は 0 であっては[['''なりません''']] [SRC[>>7]] ---- [21] 0 であるときの解釈は未定義とされています [SRC[>>7]] --- [25] [[符号位置]]が [[Unicode]] の範囲外 ([CODE(char)[[[U-00110000]]]] [[以上]]) であるなら、 [[利用者エージェント]]は [CODE(charname)@en[[[U+FFFD]]]] に置き換えても[['''構いません''']]。 [[表示]]するときは「[[文字]]なし」[[グリフ]]など可視な[RUBYB[記号]@en[symbol]]を表示する[['''べきです''']]。 [SRC[>>7]] -- [18] [[十六進数]]は高々6桁です [SRC[>>7]] -- [19] [[十六進数]]の後に[[空白]]があれば、それは (高々1[[文字]]だけ) 無視されます [SRC[>>7]] - [12] [CODE(char)[[[\]]]] の後に[[改行]]が続く場合、 -- [13] [[文字列]]の中では、 [CODE(char)[[[\]]]] と[[改行]]は無視されます [SRC[>>7]] -- [14] [[文字列]]の外では、 [CODE(CSS)[[[DELIM]]]] [[字句]]の後に[[改行]]が続いているものとみなされます [SRC[>>7]] - [23] [CODE(char)[[[\]]]] の後にそれ以外が続く場合、その続いた[[文字]]自体を表します [SRC[>>7]] -- [24] その[[文字]]が [[CSS]] の構文上特別な意味を持っていたとしても、 [[escape]] すると打ち消されます [SRC[>>7]] - [26] これら [[escape]] は、[[文字列]]内ならその[[文字列]]の一部として、[[文字列]]外なら[[識別子]]の一部としてみなされます [SRC[>>7]] - [10] [[スタイル・シート]]の末尾の [CODE(char)[[[\]]]] は [CODE(CSS)[[[DELIM]]]] [[字句]]とみなされます [SRC[>>7]] -- [11] 実際には現時点でこれを使った構文は存在していないので、[[非妥当]]になります - [9] なお、[[注釈]]内の [CODE(char)[[[\]]]] は特別な意味を持たず、単なる[[注釈]]の中の文字列とみなされます [SRC[>>7]] ;; [22] [[CSS]] の[[改行]]は [CODE(charname)@en[[[CRLF]]]], [CODE(charname)@en[[[CR]]]], [CODE(charname)@en[[[LF]]]], [CODE(charname)@en[[[FF]]]] のいずれかです。[[空白]]はそれに加えて [CODE(charname)@en[[[HT]]]], [CODE(charname)@en[[[SP]]]] です。 * 実装 [1] [CODE(CSS)@en[[[IDENT]]]] 中、 [CODE(CSS)[[[\]]]] の直後に[[空白]]: - [CODE(char)[[[U+0020]]]] - [CODE(char)[[[U+0009]]]] - [CODE(char)[[[U+000A]]]] - [CODE(char)[[[U+000D]]]] - [CODE(char)[[[U+000D]]]] [CODE(char)[[[U+000A]]]] - [CODE(char)[[[U+000C]]]] - [CODE(char)[[[U+00A0]]]] - [CODE(char)[[[U+2000]]]] - [CODE(char)[[[U+3000]]]] - [CODE(char)[[[U+FEFF]]]] [2] >>1 [[WinIE 6]] は [CODE(char)[[[\]]]] の後に[[空白]]があると、 [[escape]] 全体を無視するようです。 ;; [CODE(char)[[[\]]]] の後が [CODE(char)[[[U+000D]]]] や [CODE(char)[[[U+000A]]]] の場合、[CODE(HTMLe)@en[[[textarea]]]] にいれた時点で [CODE(char)[[[U+000D]]]] [CODE(茶r)[[[U+000A]]]] に[[正規化]]されてしまうので、 >>1 の方法では検証できないのですが・・・。 >>1 の [CODE(char)[[[U+000D]]]] [CODE(char)[[[U+000A]]]] の例は [CODE(CSS example)[[[di]]]] ([[空白]]) [CODE(CSS example)[[[v]]]] と解釈されているようです。 ([[名無しさん]]) [3] [CODE(CSS)@en[[[IDENT]]]] 中の [CODE(char)[[[\]]]] の後に [CODE(char)[[[U+0000]]]]: ([[名無しさん]]) [4] >>3 [[WinIE 6]] では [CODE(HTMLe)@en[[[textarea]]]] に入れた時点 (or もっと前) で [CODE(char)[[[U+0000]]]] 以下が捨てられてるみたいです。。。 ([[名無しさん]]) [5] [[WinIE 6]] では [CODE(char)[[[\]]]] の後に[[数字]]や[[空白]]以外があるときは [CODE(char)[[[\]]]] を捨てるみたいです。 * 例 [EG[ [27] [CODE(CSS)[te\st]] は [CODE(CSS)[test]] と同じ意味の[[識別子]]です。 ]EG] [EG[ [28] [CODE[B&W?]] は直接[[識別子]]として書き表せませんが、 [CODE(CSS)[B\&W\?]] や [CODE(CSS)[B\26 W\3F]] のように表すことはできます。 ]EG]