3 一致性:要求和建议

内容

3.1 定义

本文档中的"MUST""MUST NOT""REQUIRED""SHALL""SHALL NOT""SHOULD""SHOULD NOT""RECOMMENDED""MAY""OPTIONAL"都按照RFC 2119(见[RFC2119])中描述的来解释。但为了可读性,这些词不以大写形式出现在本规范中的

有时,本规范会为编写者和用户代理推荐最佳实践。这些建议是非规范的,而且与本规范的一致性取决于其实现。这些建议包括“我们推荐...”,“本规范推荐...”这样的表达或者类似的措辞

实际上,一个被注明废弃的(例如,'aural'关键字)或者将在CSS3中被废弃的(例如,system colors)都不影响一致性(例如,'aural'被标记为非规范的,所以UA不需要支持它,而system colors是规范的,UA必须支持它)。

除注意事项说明的部分外,本规范的所有章节包括附录都是规范的

示例和注意事项是非规范的

示例:

示例的开头一般都有"example"之类的单词("示例:","下例…","例如"等等),而且会被显示为栗色(maroon),就像本段一样

注意事项以"Note"开始,缩进,并显示为绿色,就像本段一样

图表仅提供说明,不是参考效果图,除非有明确说明

样式表
指定文档表现的语句集

样式表可能有3个不同的来源:编写者用户用户代理。这些源之间的相互作用请查看层叠与继承.

合法的样式表
样式表的合法性取决样式表应用的CSS级别,但对CSS1的一些改动意味着一部分CSS1样式将在CSS 2.1中具有稍有差异的语义。一些CSS2特性在CSS 2.1中被移除了,所以不是所有CSS2样式表都是合法的CSS 2.1样式表

合法的CSS 2.1样式表必须根据CSS 2.1语法来编写。而且,必须只包含本规范中定义的@规则,属性名和属性值。任何非法的@规则,属性名和属性值都是无效的

源文档
应用了一条或多条样式表规则的文档,以某种语言编码,并用元素树表示文档。每个元素由元素名,元素类型标识符,一堆可选的属性和(可能为空的)内容组成。例如,源文档可以是XML或者SGML实例
文档语言
源文档的编码语言(例如,HTML,XHTML或者SVG)。CSS用来描述文档语言的表现,而不会改变文档语言的基本语义(underlying semantics)
元素
(一个SGML术语,见[ISO8879])文档语言的基本语法结构,大多数CSS样式表规则都通过元素名(例如,HTML中的P,TABLE和OL)来指定该元素应该怎样渲染
替换(Replaced)元素

内容超出CSS格式化模型的元素,例如图片,内嵌的文档,或者applet。例如,HTML中IMG元素的内容通常被其"src"属性指定的图片替换。替换元素通常拥有固有尺寸(intrinsic dimensions):固有宽度,固有高度和固有比例(intrinsic ratio)。例如,位图图片有绝对单位指定的固有宽度,固有高度(显然可以确定固有比例)。另一方面,其它文档就没有固有尺寸(例如,空白的HTML文档)

用户代理可以认为一个替换元素没有任何固有尺寸,如果觉得这些尺寸可能会泄漏敏感信息给第三方的话。例如,如果一份HTML文档是根据用户的银行余额改变固有尺寸的,那么UA可能需要假装这个资源没有固有尺寸

CSS的渲染模型不考虑替换元素的内容

固有尺寸(Intrinsic dimensions)
由元素自身定义的宽度和高度,不受环境影响。CSS不定义如何拿到这些固有尺寸。CSS 2.1中,只有替换元素有固有尺寸。因为光栅图像没有可靠的分辨率信息,假设1 px对应源图像中的1像素
属性
元素相关的值,由名和相关(文本)值组成
内容
源文档中元素相关的内容,一些元素没有内容,被称为(元素)。元素内容包括文本,或者一堆子元素,这样的元素被称为那些子元素的(元素)
忽略
本规范中该术语有两个稍有差异的含义,第一个,CSS解析器在样式表中发现未知或者非法语法时必须遵循特定的规则,解析器必须忽略样式表的某些部分。哪些部分应该被忽略的确切规则在(声明与属性处理解析错误的规则不支持的值)中有详细描述,或者术语"ignore"出现时可能被解释为文本。第二个,用户代理可能(有时必须)忽略样式表中的某些属性和值,即便语法有效。例如,表格列元素无法影响列的字体,所以字体属性必须忽略
呈现(Rendered)内容
根据相关样式表对元素进行渲染后元素的内容。关于替换元素的内容怎样渲染不由本规范定义。呈现内容可能是元素的备选文本(例如,XHTML的"alt"属性),还可能包含通过样式表隐式或显式插入的项,例如黑点(bullets),数字等等
文档树
编码在源文档中的元素树。树中的每个元素都有且只有一个父级,除了元素没有(父级)
子级(Child)
只有元素B是元素A的父级时,A才是B的子级
后代
如果(1)元素A是元素B的子级,(2)或者A是B的其它后代元素C的子级,那么A被称为元素B的后代
祖先
当且仅当元素B是元素A的后代时,A是B的祖先
兄弟
当且仅当元素B和元素A有相同父元素时,A是B的兄弟。如果文档树中A在B之前,A就是前导兄弟。如果文档树中B在A后面,B就是后继兄弟
前导元素
当且仅当(1)元素A是B的祖先,(2)或者A是B的前导兄弟时,A是B的前导元素
后继元素
当且仅当元素B是A的前导元素时,A是B的后继元素
编写者
编写者是编写文档和相关样式表的人。编辑工具是一种用来生成样式表的用户代理
用户
用户是与用户代理交互的想要看,听或者其它使用文档及相关样式表的人。用户可能提供一份个人样式表作为个人偏好
用户代理(UA)
用户代理是解释用文档语言编写的并应用了相关符合本文档术语的样式表的文档的任何程序。用户代理可能显示文档,把它读出来,打印出来,转化为其它格式等等
HTML用户代理是支持一种或多种HTML规范的用户代理。为了与本规范的目标一致,支持XHTML[XHTML]但不支持HTML的用户代理不是HTML用户代理
属性
CSS定义了一个有限的参数集,叫做属性,用来指导文档渲染。每个属性都有一个名(例如,'color','font'和'border')和一个值(例如,'red','12pt Times'和'dotted')。文档的各个部分,以及文档将通过特殊性,层叠和继承(见属性值赋值、层叠(Cascading)和继承)机制显示的页面都具有属性

一个HTML源文档示例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>   
  <TITLE>My home page</TITLE>
  <BODY>
    <H1>My home page</H1>
    <P>Welcome to my home page! Let me tell you about my favorite
		composers:
    <UL>
      <LI> Elvis Costello
      <LI> Johannes Brahms
      <LI> Georges Brassens
    </UL>
  </BODY>
</HTML>

生成的树如下:

Sample document tree   [D]

根据HTML 4定义,HEAD元素将在解析期间被推断出来并作为文档树的一部分,即便源文档里没有出现"head"标签。类似的,即便源文档中没有</p>和</li>标签,解析器也知道P和LI元素结束的位置

XHTML(和其它基于XML的语言)文档行为不同:没有元素推断,并且所有元素都要有结束标签

3.2 UA一致性

本节只定义和CSS 2.1规范的一致性。将来还会有其它CSS级别,为了保持一致,可能需要用户代理实现不同的特性集

一般情况,用户代理必须遵守以下几点一致性规范:

  1. 必须识别一个或多个CSS 2.1 媒体类型
  2. 对于每个源文档,必须试图检索适用于已识别媒体类型的所有相关样式表。如果无法获取所有相关样式表(例如,因为网络错误),必须用那些可获取的(样式表)显示文档
  3. 必须根据本规范解析样式表,特别的,必须识别所有@规则,块,声明和选择器(见CSS 2.1语法)。如果用户代理遇到一个应用于支持的媒体类型的属性,用户代理必须根据属性定义解析其值。这意味着,用户代理必须接受所有合法值并且必须忽略含有非法值的声明。用户代理必须忽略应用于不支持的媒体类型的规则
  4. 文档树中的每个元素,都必须根据属性定义和层叠与继承规则给每个属性赋值
  5. 如果源文档有可选的样式表集(例如,有HTML 4[HTML4]的"alternate"关键字),UA必须允许用户选择UA应该应用哪份样式表集
  6. UA必须允许用户去掉编写者(提供的)样式表的影响

不是所有用户代理都必须遵守每一点,然而:

由于特定设备(例如,用户代理无法在单色监视器或页面上渲染颜色)的限制,用户代理无法实现本规范的一部分并不意味着不一致

UA必须允许用户指定含有用户样式表的文件。UA面向的设备无任何写入或指定文件的方式时可以免除此要求( UAs that run on devices without any means of writing or specifying files are exempted from this requirement.)。此外,UA可以提供其它方式来指定用户偏好,例如通过GUI

CSS 2.1没有定义哪些属性适用于表单控件和frame,以及怎样用CSS给他们设置样式,用户代理可能会给这些元素应用CSS属性,建议编写者把此类支持当做实验性的,CSS后续版本可能会进一步指定这些

3.3 错误情况

一般情况,本文档通过规范说明了错误处理行为。例如,见处理解析错误的规则

3.4 text/css内容类型

独立文件中的CSS样式表会通过网络作为结合编码信息的字节序列来发送。传输的结构,术语叫消息实体,是在RFC 2045和RFC 2616(见[RFC2045][RFC2616])中定义的。一个内容类型为"text/css"的消息实体表示一个独立的CSS文档,"text/css"内容类型是在RFC 2318([RFC2318])中提出的