1 关于CSS 2.1规范

内容

1.1 CSS 2.1与CSS 2

CSS社区从1998年的CSS2推荐规范中获得了重要经验,虽然CSS2规范中的错误已经陆续通过发布一系列勘误纠正了,但仍然没有机会根据这些经验作出修改

尽管其中很多问题都将在接下来的CSS3规范中处理,目前的状况阻碍了CSS2的实现与互用性。CSS 2.1规范尝试通过以下方法来处理这种局势:

因此,不是说CSS2样式表必须与CSS 2.1保持向前兼容(forwards-compatible),而是符合CSS 2.1规范的样式表更可能兼容现有用户代理(user agent),并在将来保持向前兼容。虽然破坏向前兼容不好,但我们相信(换来的)CSS 2.1修订版本的优点是值得的

CSS 2.1源于CSS2,并将代替它。一部分CSS2内容在CSS 2.1中没变,一部分被修改了,还有一部分被删掉了。删掉的部分可能会在CSS3规范中出现,将来的新规范应该参考CSS 2.1(除非他们需要CSS2中那些已经在CSS 2.1被移除的特性,然后应该仅参考CSS2的这些特性,或者优先参考包含这些特性的CSS3模块)。

1.2 本规范的阅读

本节是非规范的内容

本规范编写时考虑了两种读者:CSS编写者和CSS实现者。我们希望本规范能为编写者们提供工具,他们需要编写有效、有吸引力、可访问的文档,不把CSS的实现细节暴露给他们。而实现者们,应该从中寻找构建符合标准的用户代理所需的所有内容。规范开篇是CSS的一般描述,然后越来越技术化和具体化。为了快速获取信息,电子版和打印版每章开头都有速查表和内容详情表,以及索引导航

本规范编写时考虑了两种表现形式:电子版和打印版。虽然这两种形式无疑是相似的,读者仍将发现一些区别。例如,打印版中链接将失效(废话),并且电子版没有页码。存在差异时,电子版是文档的权威版本。

1.3 本规范是如何组织的

本节是非规范的内容

本规范的章节组织方式如下:

第2章:CSS 2.1简介
简介包括CSS 2.1的简单教程和对CSS 2.1背后的设计原则的讨论
第3 - 18章:CSS 2.1参考手册
参考手册主要由CSS 2.1语言参考组成,本参考定义了CSS 2.1样式表中会出现的东西(语法,属性,属性值),以及用户代理该怎样解释这些样式表才能保证一致性
附录:
附录包含关于听觉(aural)属性(非规范),HTML 4的样例样式表, 对CSS2的改动CSS 2.1语法,规范性与信息性参考列表,以及两份索引目录:一个是属性索引另一个是总索引

1.4 约定

1.4.1 文档语言元素和属性

1.4.2 CSS属性定义

每个CSS属性定义都从关键信息总结开始,就像这样:

'property-name'
Value:  合法值&语法
Initial:  初始值
Applies to:  该属性适用于的元素
Inherited:  该属性继承与否
Percentages:  百分比值如何应用
Media:  该属性适用于的媒体组(media group)
Computed value:  计算值的计算方式

1.4.2.1

指定名为'property-name'的属性的合法值集合。属性值可以有一个或者多个分量,分量的值类型通过以下几种方式来指定:

  1. 关键字值(例如,auto, disc等等)
  2. 出现在"<"与">"之间的基本数据类型(例如,<length>, <percentage>等等),电子版中,每个基本数据类型实例都链接到其定义
  3. 有相同范围的值类型,与属性名相同(例如,<'border-width'> <'background-attachment'>等等)。这种情况下,出现在"<"和">"之间的类型名就是属性名(例如,<'border-width'>),这样的类型包括'inherit'值。电子版文档中,每个该类型的实例的非终结符名(non-terminal)都链接到相应的属性定义
  4. 非终结符中不会出现同名属性,即出现在"<"和">"之间的非终结符名,例如<border-width>,注意<border-width>和<'border-width'>的区别,后者是根据前者定义的。非终结符定义在它在规范中首次出现的地方。电子版文档中,每个该类型的值都链接到相应的值定义

这些定义中的其它单词都是必须以字面量形式出现的关键字,没有引号(例如,red)。斜线(/)和逗号(,)也必须以字面量形式出现

分量的值可能被这样安排到属性值中:

并列比双和号优先级高,双和号比双竖线优先级高,双竖线比单竖线优先级高,因此,下面这两行是等价的:

    a b   |   c ||   d &&   e f
  [ a b ] | [ c || [ d && [ e f ]]]

每个类型、关键字、或者方括号分组(后面)都可能跟着下面的修饰符:

下面的示例描述了不同的值类型:

Value: N | NW | NE
Value: [ <length> | thick | thin ]{1,4}
Value: [<family-name> , ]* <family-name>
Value: <uri>? <color> [ / <color> ]?
Value: <uri> || <color>
Value: inset? && [ <length>{2,4} && <color>? ]

分量的值是根据附录 G.2中的token指定的。因为语法允许expr产生式的token之间有空格,空格可以出现在属性值中的token间

注意:多数情况下,为了把token区分开,实际上token之间的空格是必不可少的。例如,'1em2em'将被解析为一个带有数字'1'和标识符'em2em'(非法的单位)的DIMEN。这种情况下,为了解析为2个长度'1em'与'2em','2'前面的空格是必不可少的

1.4.2.2 初始值(Initial)

这部分指定了属性的初始值,关于样式表指定(值)(style sheet-specified),继承(值)以及初始属性值之间的相互作用,请查看层叠(cascade)

1.4.2.3 应用

这部分列出属性适用于的元素。任何元素都具有所有属性,但一些属性在某些元素上没有渲染效果,例如,'clear'属性只对块级元素起作用

1.4.2.4 继承(Inherited)

这部分说明了属性值是不是从祖先元素继承的。关于样式表指定(值)(style sheet-specified),继承(值)以及初始属性值之间的相互作用,请查看层叠(cascade)

1.4.2.5 百分比值

这部分说明了如果百分比出现在属性值中,应该被怎样解释。如果出现的是"N/A",表示该属性不接受百分比值

1.4.2.6 媒体类型组

这部分说明了属性适用于的媒体类型组,关于媒体类型组的信息是不规范的

1.4.2.7 计算值

这部分描述了计算后的属性值,关于为什么使用这个定义,请查看计算值

1.4.3 简写属性

一些属性是简写属性,表示它们允许编写者用一个属性指定几个属性值

例如,'font'属性是一个用来一次性设置'font-style''font-variant''font-weight''font-size''line-height''font-family'的简写属性

当简写形式中的值被省略时,每个“缺失”的属性会被赋值为其初始值(见层叠(cascade)

示例:

本例中的多条样式规则:

h1 { 
  font-weight: bold; 
  font-size: 12pt;
  line-height: 14pt; 
  font-family: Helvetica; 
  font-variant: normal;
  font-style: normal;
}

可以用一条简写属性改写:

h1 { font: bold 12pt/14pt Helvetica }

本例中,'font-variant''font-style'取了各自的初始值

1.4.4 注意事项和示例

所有描述非法用法的示例都被清楚地标记为"ILLEGAL EXAMPLE"

缺少DOCTYPE声明的HTML示例是SGML(标准通用标注语言)文本实体都与HTML 4.01 Strict DTD [HTML4]一致,其它HTML示例与示例中给出的DTD一致

所有注意事项都只是信息性的

规范中的示例和注意事项都在HTML源码中标记出来了,CSS用户代理将会做特别呈现

1.4.5 图片与长描述信息

本规范电子版中的大多数图片都附有说明其内容的“长描述信息”,长描述信息的链接用图片后面的"[D]"来表示

图片和长描述信息都只是信息性的

1.5 致谢

本节内容是非规范的

CSS 2.1基于CSS2,对CSS2做出贡献的人见CSS2的致谢部分

我们要感谢下列人士,他们在www-style邮件列表上的的输入和反馈,帮助我们完成了本规范:Andrew Clover, Bernd Mielke, C. Bottelier, Christian Roth, Christoph Päper, Claus Färber, Coises, Craig Saila, Darren Ferguson, Dylan Schiemann, Etan Wexler, George Lund, James Craig, Jan Eirik Olufsen, Jan Roland Eriksson, Joris Huizer, Joshua Prowse, Kai Lahmann, Kevin Smith, Lachlan Cannon, Lars Knoll, Lauri Raittila, Mark Gallagher, Michael Day, Peter Sheerin, Rijk van Geijtenbeek, Robin Berjon, Scott Montgomery, Shelby Moore, Stuart Ballard, Tom Gilder, Vadim Plessky, Peter Moulder, Anton Prowse, Gérard Talbot, Ingo Chao, Bruno Fassino, Justin Rogers, Boris Zbarsky, Garrett Smith, Zack Weinberg, Bjoern HoehrmannOpen eBook Publication Structure Working Group的编辑们。我们还要感谢Gary Schnabl, Glenn AdamsSusan Lesch帮助我们校对了本文档的早期版本

此外,我们要特别感谢Elika J. Etemad, Ada ChanBoris Zbarsky为CSS 2.1贡献了宝贵时间,以及Kimberly Blessing帮助编辑

还要多谢下列人士帮助完成测试集: Robert Stam, Aharon Lanin, Alan Gresley, Alan Harder, Alexander Dawson, Arron Eicholz, Bernd Mielke, Bert Bos, Boris Zbarsky, Bruno Fassino, Daniel Schattenkirchner, David Hammond, David Hyatt, Eira Monstad, Elika J. Etemad, Gérard Talbot, Gabriele Romanato, Germain Garand, Hilbrand Edskes, Ian Hickson, James Hopkins, Justin Boss, L. David Baron, Lachlan Hunt, Magne Andersson, Marc Pacheco, Mark McKenzie-Bell, Matt Bradley, Melinda Grant, Michael Turnwall, Ray Kiddy, Richard Ishida, Robert O'Callahan, Simon Montagu, Tom Clancy, Vasil Dinkov…以及所有为CSS1测试集做出贡献的人

本规范制定期间积极的工作组成员: César Acebal (Universidad de Oviedo), Tab Atkins Jr. (Google, Inc.), L. David Baron (Mozilla Foundation), Bert Bos (W3C/ERCIM), Tantek Çelik (W3C Invited Experts), Cathy Chan (Nokia), Giorgi Chavchanidze (Opera Software), John Daggett (Mozilla Foundation), Beth Dakin (Apple, Inc.), Arron Eicholz (Microsoft Corp.), Elika J. Etemad (W3C Invited Experts), Simon Fraser (Apple, Inc.), Sylvain Galineau (Microsoft Corp.), Daniel Glazman (Disruptive Innovations), Molly Holzschlag (Opera Software), David Hyatt (Apple, Inc.), Richard Ishida (W3C/ERCIM), John Jansen (Microsoft Corp.), Brad Kemper (W3C Invited Experts), Håkon Wium Lie (Opera Software), Chris Lilley (W3C/ERCIM), Peter Linss (HP), Markus Mielke (Microsoft Corp.), Alex Mogilevsky (Microsoft Corp.), David Singer (Apple Inc.), Anne van Kesteren (Opera Software), Steve Zilles (Adobe Systems Inc.), Ian Hickson (Google, Inc.), Melinda Grant (HP), Øyvind Stenhaug (Opera Software)Paul Nelson (Microsoft Corp.).