目录
本节讨论了对于任一版本的CSS(包括CSS2)都相同的语法(及向下兼容的解析规则)。CSS以后的版本将保持这一核心语法,尽管它们可以加入额外的语法限制。
这些描述是标准化的。在附录 D中的语法规则是它们的补充和完善。
CSS的所有级别——级别1,级别2以及将来的级别——都使用相同的核心语法。这就可以让用户端解析(尽管不是完全理解)样式表,而这些样式表可能是以用户端出现时还没有的CSS级别写成的。设计者以此来创建可以在老的用户端上工作的样式表,同时又保持使用最新级别的CSS。
在词汇级别,CSS样式表包含一系列的表征。CSS2的表征见下表所列。定义采用Lex样式规范表达式。八进制数参见ISO 10646([ISO10646])。在Lex中,如果出现多重匹配,则最长的那个匹配决定了表征。
表征 | 定义 |
---|---|
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 | any other character not matched by the above rules |
上述包含在花括号({})中的宏的定义如下:
宏 | 定义 |
---|---|
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的核心语法。接下去的一节讨论了如何使用它。附录 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表征不在语法中出现(为了使语法更容易读)。不过,任意数目的这些表征可以出现在其它表征间的任何地方。
上述语法中的S表征表示空白。只有字符“空格”(Unicode编码32),“制表符”(9),“换行”(10),“回车”(13)以及“换页”(12)可以出现在空白中。其它类似空格的字符,如“em-space”(8195)和“表意空格”(12288)肯定不是空白的一部分。
关键字以标识符的形式出现。关键字不可以放置在引号("..."或'...')之间。因此,
red
是一个关键字,而
"red"则不是。(它是一个字符串。)其它不合法的例子如:
width: "auto"; border: "none"; font-family: "serif"; background: "red";
下面的规则总是有效:
注意,Unicode和ISO 10646是码码对应的(参见[UNICODE]及[ISO10646])。
首先,在字符串中,反斜杠后接一个新行将被忽略(即,好象字符串既不包含反斜杠,也不包含新行)。
第二,它取消了特殊的CSS字符的含义。任何字符(除了十六进制数)都可以由反斜杠转义而消除了它本来的含义。例如,"\""是一个包含双引号的字符串。样式表的处理器不可以在样式表中去除这些反斜杠,否则会改变样式表的含义。
第三,反斜杠转义允许作者引用在文档中不易输入的字符。在这种情况下,反斜杠后接最长为六位的十六进制数(0..9A..F),表示ISO 10646([ISO10646])中对应于该数值的字符。 如果在十六进制数后跟着数字或字母,那么该十六进制数的结束要标记清楚。有两个方法可以做到:
事实上,这两个方法可以结合起来。在十六进制后只忽略一个空白字符。这就意味着转义之后的真正的空白必须转义或重复一次。
任何版本的CSS的CSS样式表,包含一系列的语句(见上面的语法)。有两种语句:@规则和规则集。语句周围可以有空白。
本规范中,术语“紧接在前”或“紧跟在后”表示其中没有插入空白或注解。
@规则以一个关键字@开始,紧跟在后的是一个标识符(如'@import','@page')。
一个@规则包括到下一个分号(;)或下一个块间的所有内容(以先出现的为分界)。CSS用户端一旦遇上不认识的@规则,它必须忽略这一规则,并继续其后的解析。
CSS2用户端必须忽略在块内出现或在其它任何一个规则集之后出现的任何'@import'规则。
假定一个CSS2解析器遇到如下的样式表:
@import "subs.css"; H1 { color: blue } @import "list.css";
根据CSS2,第二个'@import'是非法的。CSS2解析器忽略整个@规则,从而有效的样式表缩减为:
@import "subs.css"; H1 { color: blue }
下面这个例子中,第二个'@import'规则是无效的,因为它出现在一个'@media' 块中。
@import "subs.css"; @media print { @import "print-main.css"; BODY { font-size: 10pt } } H1 {color: blue }
A 块以一个左花括号({)开始,并以相匹配的右花括号(})结束。在其间,可以是任何字符。但是,括号(( )),方括号([ ])和花括号({ })必须成对出现,并可以嵌套。单引号(')和双引号(")也必须成对出现,其间的字符被解析为一个字符串。字符串的定义参见上面的表征化。
这里是一个块的例子。注意,双引号内的右花括号并不匹配本块开始的花括号。而第二个单引号是在转义字符中,从而不匹配第一个单引号:
{ causta: "}" + ({7} * '\'') }
注意,上例尽管不是有效的CSS2,但还是一个块的定义。
一个规则集(也称为“规则”)包含一个选择子,以及随后的声明块。
一个声明块(下文中也称为{}块)以左花括号开始({),以与之匹配的右花括号(})结束。其间是零个或多个以分号(;)分割的声明的列表。
选择子(参见选择子一节)包含延伸到(但是不包含)第一个左花括号({)的所有内容。 一个选择子总是和一个{}块相随。如果用户端无法解析选择子(例如,它不是有效的CSS2),它也必须忽略{}块。
CSS2赋予选择子中的逗号(,)以特殊的含义。不过,由于还不知道在将来的CSS版本中逗号是否会获得其它的含义,当选择子中任何地方出错后,即使选择子的其它部分可能看起来和CSS2吻合,但是整个语句将被忽略。
例如,由于"&"在CSS2中不是一个有效的表征,CSS2用户端必须忽略整个第二行,也不把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 } /* 无效值:12pt */ P { color: blue; font-vendor: any; /* 无效属性:font-vendor */ font-variant: small-caps } EM EM { font-style: normal }
第一行中,第二个声明带有一个无效值'12pt'。第二行的第二个声明包含未定义的属性'font-vendor'。CSS2解析器将忽略这些声明,从而有效的样式表缩减为:
H1 { color: red; } P { color: blue; font-variant: small-caps } EM EM { font-style: normal }
注解以字符"/*"开始,并以字符"*/"结束。它们可以在表征之间的任何位置出现,它们的内容对渲染没有任何影响。注解不能嵌套。
CSS也允许SGML注解的分割符("<!--"及"-->")出现在某些特定的地方,但是它们不分割CSS的注解。允许SGML注解的分割符可以使样式规则出现在HTML源文档中的STYLE元素内,并且对于3.2版本以前的HTML用户端是不可见的。更多的信息,请参见HTML 4.0规范([HTML40])。
某些情况下,用户端必须忽略一个不合法的样式表的一部分。本规范定义忽略的含义是用户端解析不合法的部分(以找到它的开始和结束),但是不加以任何处理,就如同它不存在那样。
为了保证在将来能为已有的属性加入新的值或加入新的属性,用户端在碰到如下情形时,必须遵循如下规则:
H1 { color: red; rotation: 70minutes }
用户处理这一样式表时,如同
H1 { color: red }
IMG { float: left } /* 正确的CSS2 */ IMG { float: left here } /* "here"不是'float'的值 */ IMG { background: "red" } /* CSS2中关键字不可以加引号 */ IMG { border-width: 3 } /* 长度值必须指定单位 */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的一部分。因此整个@规则(直到并包括第三个右花括号)都被忽略。CSS2用户端忽略它,从而有效的样式表为:
H1 { color: blue }
某些值的类型可以包括整型值(表示为<integer>)或实型值(表示为<number>)。实型和整型数都只以十进制符号表示。<integer>包括一个或多个数字"0"到数字"9"。<number>可以是一个<integer>,或者在点号(.)后接零个或多个数字。整数和实数可以前缀一个"-"或"+"来表示符号。
注意,很多接受整数和实数作为其值的属性实际上会有取值范围的限制,通常是非负值。
长度是指水平或垂直方向的度量。
长度值的格式(本规范中表示为<length>)为:一个可选的符号字符('+'或'-','+'是缺省的符号),紧接在后的是一个<number>(小数点可有可无),紧接在后的是一个单位标识符(如px,deg等等)。在'0'长度之后,单位标识符可以省略的。
某些属性允许负的长度值,不过这将使格式化模型变得复杂,并可能伴随着与实现相关得限制。如果不能支持负的长度值,它应该被转换到最接近的可以被支持的值。
有两种类型的长度单位:相对的和绝对的。 相对长度单位规定一个长度相对于另外一个长度属性。使用相对单位的样式表在从一个媒介转移到另一个媒介(如从计算机显示器到激光打印机)时,定比会相对简单一些。
相对单位有:
H1 { margin: 0.5em } /* em */ H1 { margin: 1ex } /* ex */ P { font-size: 12px } /* px */
'em'单位等于应用该单位的元素的经计算的'font-size'属性。例外情况是'font-size'值本身出现了'em',这时它参考其父元素的字体尺寸。它可以用作垂直和水平的度量。(在印刷文本中,这个单位也有时被称为四方宽度。)
'ex'单位定义为字体的'x-height'。之所以叫x-height,是因为它通常等于小写字母'x'的高度。不过,即使字体中没有x字母,'ex'还是会有定义。
规则:
H1 { line-height: 1.2em }
指H1元素的行高比H1元素的字体尺寸大20%。另一方面:
H1 { font-size: 1.2em }
指H1元素的字体尺寸比H1元素继承来的字体尺寸大20%。
如果出现在文档树根节点(如HTML中的"HTML")时,'em'和'ex'参考属性的初始值。
像素点单位相对于浏览设备的分辨率。在大多数情况下是指计算机的显示器。
如果输出设备与典型的计算机显示器相比,像素点密度有很大的差别,用户端应该重新定比像素点值。 我们推荐将参考像素点定义为具有90dpi像素点密度的设备上的一个像素点,离开读者有一臂的长度时的视角。通常的手臂长度有28英寸,因此视角大约为0.0227度。
如果阅读距离是一个手臂的长度,那么1px相应于大约0.28毫米(1/90英寸)。如果打印到激光打印机,意味着阅读距离比手臂长度短(55厘米或21英寸),1px大约是0.21毫米。在300dpi的打印机上,大概会占据三个点(0.25毫米);在600dpi的打印机上,大概会占据五个点。
下面的两个图形演示了视距对于像素点的尺寸的影响,以及设备分辨率的影响。在第一个图形中,阅读距离为71厘米(28英寸)时,一个像素点大小为0.28毫米;如果阅读距离为3.5米(12英尺)时,一个像素点大小为1.4毫米。
在第二个图形中,一个大小为1px宽,1px高的区域在低分辨率的设备(计算机屏幕)上由一个点覆盖,而同样的区域在高分辨率设备(如400 dpi的激光打印机)上,需要16个点来覆盖。
子元素并不继承由其父元素指定的相对值,它们(通常)继承计算值。
下面的规则中,计算出的H1元素的'text-indent'值是36pt,而不是45pt,如果H1是BODY元素的子元素的话。
BODY { font-size: 12pt; text-indent: 3em; /* i.e., 36pt */ } H1 { font-size: 15pt }
绝对长度单位只有在其输出媒介的物理特性已知的情况下才有用。绝对单位有:
H1 { margin: 0.5in } /* 英寸 */ H2 { line-height: 3cm } /* 厘米 */ H3 { word-spacing: 4mm } /* 毫米 */ H4 { font-size: 12pt } /* 点 */ H4 { font-size: 1pc } /* picas */
如果指定的长度不被支持,用户端必须将其近似为实际值。
百分比值的格式(本规范中表示为<percentage>)为:一个可选的符号字符('+'或'-','+'是缺省值),紧接在后的是一个<number>,紧接在后的是'%'。
百分比值总是相对于另外一个值,如长度。允许百分比值的每一个属性也定义了百分比所参考的值。这个值可以是同一元素的另外一个属性的值,其前辈元素的属性值,或者格式化上下文的值(如包含块的宽度)。如果根元素的属性指定了百分比值,而百分比值又被定义为参考某个属性的继承值,那么结果值就是百分比乘以那个属性的初始值。
由于子元素(通常)继承其父元素的计算值,下例中,P元素的子元素的'line-height'将继承12pt的值,而不是百分比值(120%)
P { font-size: 10pt } P { line-height: 120% } /* 120% of 'font-size' */
URL(统一资源定位,参见[RFC1738]及[RFC1808])提供了网络上一个资源的地址。可以预见的一个定位资源的新方法称为URN(统一资源名称)。两者结合称为URI(统一资源标识符,参见[URI])。本规范使用术语URI。
本规范中,URI值表示为<uri>。用来在属性值中指定URI的函数符号是"url()",如:
BODY { background: url("http://www.bg.com/pinkish.gif") }
URI值的格式是:'url(',后跟可选的空白,后跟可选的单引号或双引号,后跟URI本身,后跟可选的单引号或双引号,后跟可选的空白,后跟')'。两个引号字符必须一致。
没有引号的例子:
LI { list-style: url(http://www.redballs.com/redball.png) disc }
括号,逗号,空白字符,单引号和双引号如果出现在URI中,则必须用反斜杠转义:'\(','\)','\,'。
根据URI的类型,也可能将上述字符写成URI转义(其中"(" = %28,")" = %29,等等)。参见[URI]。
为了创建不依赖于资源的绝对位置的模板样式表,作者可以使用相对URIs。相对URI(定义见[RFC1808])根据基准URI解析为完全URI。RFC 1808的第3节定义了这一过程的标准化算法。对于CSS样式表,基准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) } /* 整数值范围 0 - 255 */ EM { color: rgb(100%, 0%, 0%) } /* 实数值范围 0.0% - 100.0% */
以十六进制表示的RGB值的格式为:'#'号,紧接在后的是三个或六个十六进制字符。三位的RGB表示通过重复数字(而不是加零)转化到六位的RGB表示。例如,#fb0扩展为#ffbb00。这样保证了白色(#ffffff)可以简缩表示为#fff,并消除了对于显示的颜色深度的依赖性。
在函数表示中的RGB值的格式为:'rgb(',紧接在后的是用逗号分割的,三个数值(可以是三个整数值或三个百分比值),后接')'。整数值255代表100%,相当于十六进制表示的F或FF:rgb(255,255,255) = rgb(100%,100%,100%) =#FFF。数值周围可以有空白字符。
所有的RGB颜色都定义在sRGB颜色空间中(参见[SRGB])。用户端呈现这些颜色的忠实度可能会有差异。但是使用sRGB给颜色呈现提供了一个没有歧义的、客观的、可衡量的定义,也可以和国际标准相关联(参见[COLORIMETRY])。
与规范一致的用户端可以通过执行伽玛校正,来限制它们显示颜色的尝试。sRGB规定了在特定浏览条件下,显示伽玛系数为2.2。用户端应该调整在CSS中给出的颜色,和输出设备的“自然”显示伽玛系数相结合,而使有效的显示伽玛系数为2.2。更多的细节,请参见伽玛校正一节。注意,只有在CSS中规定的颜色才受影响;例如,图形可能会自带颜色信息。
超出设备范围的值要加以修正:必须修改红、绿、蓝的值,使之和设备支持的范围相吻合。对于一个典型的CRT显示器,其设备范围和sRGB相同,下面三个例子的效果一样:
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的范围的颜色使可以呈现的(在设备范围之内),而其它一些在0..255范围内的颜色会在设备范围之外,从而被加以修正。
注意:尽管颜色给文档带来可观的信息,并使文档更加容易阅读,但是也要考虑到某些颜色的组合会给色盲的读者带来困难。如果你使用背景图形或设置了背景色,请相应地调整前景颜色。
其格式为:一个可选的符号字符('+'或'-','+'使缺省值),紧接在后的是一个<number>,紧接在后的是一个角度单位标识符。
角度单位标识符为:
角度值可以是负数。用户端应该将它们规范到0-360度。如-10度和350度是一样的。
例如,一个直角是'90度'或 or '100梯度'或'1.570796326794897弧度'。
它们的格式是一个<number>,紧跟在后的是一个时间单位标识符。
时间单位标识符有:
时间值不可以为负数。
频率值(文本表示为<frequency>)使用在语音样式表中。
它们的格式是一个<number>,紧跟在后的是一个频率单位标识符。
频率单位标识符有:
频率值不可以是负数。
例如,200Hz(或200hz)是低音,而6kHz(或6khz)是高音。
字符串可以包含在双引号或单引号中。在双引号对中不可以再出现双引号,除非将其转义(如'\"'或'\22')。单引号与此类似("\'"或"\27")。
"this is a 'string'" "this is a \"string\"" 'this is a "string"' 'this is a \'string\''
一个字符串不可以直接包含新行。要在字符串中包含新行,可以使用转义字符"\A"(十六进制的A在Unicode中表示换行字符,在CSS中表示通用的"newline")。参见'content'属性的例子。
为了美观或其它别的原因,可以将字符串分成几行。不过在这种情况下,换行本身要加以转义。例如,下面的两个选择子是一样的:
A[TITLE="a not s\ o very long title"] {/*...*/} A[TITLE="a not so very long title"] {/*...*/}
CSS样式表是通用字符集(参见[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"之后,用户指定字符编码的名称。名称必须是在IANA注册表(参见[IANA]。完整的字符集列表也参见[CHARSETS])中描述的字符集名。例如:
@charset "ISO-8859-1";
本规范并不强制用户端必须支持哪些字符编码。
注意,依靠@charset结构在理论上存在问题,因为对于字符集如何编码没有任何先验信息。不过在实际应用中,在Internet上广泛应用的编码都基于ASCII,UTF-16,UCS-4或者(很少见)EBCDIC。这就意味着一般而言,一个文档的开始几个字节值可以让用户端可靠低检测出编码家族,从而提供足够的信息来解码@charset规则,并确定确切的字符编码。
样式表可能引用那些在当前字符编码中无法表示的字符。这些字符必须写成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>