3 一致性:要求和建议

内容

3.1 定义

关键词 “MUST”“MUST NOT”“REQUIRED”“SHALL”“SHALL NOT”“SHOULD”“SHOULD NOT”“RECOMMENDED”“MAY”“OPTIONAL” 在本文档中的解释方式应按照RFC 2119中描述的进行(参见 [RFC2119])。 但是,为了便于阅读,这些词在本规范中未全部使用大写字母。

有时,本规范会为作者和用户代理推荐良好的实践。这些建议不是规范性的,遵守本规范不依赖于它们的实现。这些建议包含表达“我们推荐...”、“本规范建议...”或类似的措辞。

某个特性被标记为弃用(如 'aural' 关键字)或将在CSS3中被弃用(如 系统颜色),对一致性没有影响。(例如,'aural' 被标记为非规范性的,因此用户代理不需要支持它;系统颜色是规范性的,因此用户代理必须支持它们。)

本规范的所有章节,包括附录,都是规范性的,除非另有说明。

示例和注释不具规范性。

示例:

示例通常在其开头附近带有“示例”一词(“示例:”、“以下示例…”、“例如”等),并显示在彩色背景上,如本段所示。

注释以“注意”一词开头,缩进并以绿色显示,如本段所示。

图示仅供参考。除非明确说明,否则它们不是参考渲染。

样式表
指定文档呈现的一组语句。

样式表可能有三个不同的来源:作者用户用户代理。这些来源的相互作用在层叠和继承章节中描述。

有效样式表
样式表的有效性取决于样式表使用的CSS级别。所有有效的CSS1样式表都是有效的CSS 2.2样式表,但CSS1中的一些更改意味着某些CSS1样式表在CSS 2.2中会有略微不同的语义。CSS2中的某些特性不属于CSS 2.2,因此并非所有CSS2样式表都是有效的CSS 2.2样式表。

有效的CSS 2.2样式表必须根据CSS 2.2的语法编写。此外,它必须仅包含本规范中定义的at规则、属性名称和属性值。 非法(无效)的at规则、属性名称或属性值是指不合法的内容。

源文档
应用一个或多个样式表的文档。该文档以某种语言编码,表示为一棵元素树。每个元素由一个标识元素类型的名称、可选的多个属性,以及(可能为空的)内容组成。例如,源文档可能是XML或SGML实例。
文档语言
源文档的编码语言(例如,HTML、XHTML或SVG)。CSS用于描述文档语言的呈现,CSS不会改变文档语言的底层语义。
元素
(一个SGML术语,参见[ISO8879]。)文档语言的主要语法构造。大多数CSS样式表规则使用这些元素的名称(如HTML中的P、TABLE和OL)来指定元素的呈现方式。
替换元素

内容超出CSS格式化模型范围的元素,例如图像、嵌入文档或小程序。例如,HTML IMG元素的内容通常由其“src”属性指定的图像替换。替换元素通常具有固有尺寸:固有宽度、固有高度和固有比例。例如,位图图像具有以绝对单位指定的固有宽度和固有高度(由此可以显然确定固有比例)。另一方面,其他文档可能没有任何固有尺寸(例如,一个空白的HTML文档)。

如果用户代理认为这些尺寸可能泄露敏感信息,则可能将替换元素视为没有任何固有尺寸。例如,如果一个HTML文档根据用户的银行余额更改固有尺寸,则UA可能会将该资源视为没有固有尺寸。

替换元素的内容在CSS呈现模型中不被考虑。

固有尺寸
由元素本身定义的宽度和高度,不受周围环境影响。CSS未定义如何确定固有尺寸。在CSS 2.2中,只有替换元素可以具有固有尺寸。 对于没有可靠分辨率信息的光栅图像,必须假定每个图像源像素的大小为1 px单位。
属性
与元素关联的值,由名称和相关(文本)值组成。
内容
源文档中与元素关联的内容。某些元素没有内容,在这种情况下,它们被称为。元素的内容可能包括文本,也可能包括多个子元素,在这种情况下,该元素被称为这些子元素的元素。
忽略
在本规范中,此术语有两个略有不同的含义。首先,当CSS解析器在样式表中发现未知或非法语法时,必须遵循某些规则。然后解析器必须忽略样式表的某些部分。有关必须忽略哪些部分的确切规则在这些章节中描述(声明和属性, 处理解析错误的规则, 不支持的值),或可能在出现“忽略”一词的文本中解释。其次,用户代理可能(并且在某些情况下必须)忽略样式表中的某些属性或值,即使语法是合法的。例如,表列元素不能影响列的字体,因此字体属性必须被忽略。
呈现内容
应用了相关样式表后元素的内容。替换元素内容的呈现方式未在本规范中定义。呈现内容也可能是元素的替代文本(例如,XHTML “alt” 属性的值),并且可能包括样式表中隐式或显式插入的项目,如项目符号、编号等。
文档树
源文档中编码的元素树。此树中的每个元素都有一个父元素,唯一例外的是元素,它没有父元素。
元素A被称为元素B的子元素,当且仅当B是A的父元素。
后代
元素A被称为元素B的后代,如果(1)A是B的子元素,或(2)A是B某个后代元素C的子元素。
祖先
元素A被称为元素B的祖先,当且仅当B是A的后代。
兄弟
元素A被称为元素B的兄弟元素,当且仅当B和A共享相同的父元素。元素A是前面的兄弟,如果它在文档树中位于B之前。元素B是后面的兄弟,如果它在文档树中位于A之后。
前面的元素
元素A被称为元素B的前面的元素,当且仅当(1)A是B的祖先,或(2)A是B的前面的兄弟。
后面的元素
元素A被称为元素B的后面的元素,当且仅当B是A的前面的元素。
作者
作者是编写文档及相关样式表的人。 创作工具是生成样式表的用户代理
用户
用户是与用户代理交互以查看、收听或以其他方式使用文档及其相关样式表的人。用户可能提供一个编码个人偏好的个人样式表。
用户代理 (UA)
用户代理是任何解释以文档语言编写的文档并根据本规范的条款应用相关样式表的程序。用户代理可以显示文档、朗读文档、打印文档、将文档转换为其他格式等。
HTML用户代理是支持一个或多个HTML规范的用户代理。支持XHTML的用户代理[XHTML],但不支持HTML的用户代理在符合本规范方面不被视为HTML用户代理。
属性
CSS定义了一组有限的参数,称为属性,它们指导文档的呈现。每个属性都有一个名称(例如,'color'、'font'或'border')和一个值(例如,'red'、'12pt Times'或'dotted')。通过特异性、层叠和继承机制(参见章节分配属性值、层叠和继承)将属性附加到文档的各个部分以及要显示文档的页面上。

下面是一个用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>

这将产生以下树结构:

示例文档树   [D]

根据HTML 4的定义,即使文档源代码中没有"head"标签,HEAD元素也会在解析过程中推断出来,并成为文档树的一部分。同样,即使源代码中没有</p>和</li>标签,解析器也知道P和LI元素在哪里结束。

用XHTML(及其他基于XML的语言)编写的文档表现不同:没有推断的元素,所有元素必须有结束标签。

3.2 UA 一致性

本节仅定义与CSS 2.2规范的一致性。未来可能会有其他CSS级别,可能要求用户代理实现一组不同的功能以符合要求。

通常,声称符合本规范的用户代理必须遵守以下几点:

  1. 它必须识别一个或多个CSS 2.2 媒体类型
  2. 对于每个源文档,它必须尝试检索所有与识别的媒体类型相关联的样式表。如果无法检索所有相关样式表(例如,由于网络错误),则必须使用能够检索到的样式表来显示文档。
  3. 它必须按照本规范解析样式表。特别是,它必须识别所有at规则、块、声明和选择器(参见CSS 2.2的语法)。如果用户代理遇到适用于受支持媒体类型的属性,则用户代理必须根据属性定义解析该值。这意味着用户代理必须接受所有有效值,并且必须忽略无效值的声明。用户代理必须忽略适用于不受支持的媒体类型的规则。
  4. 对于文档树中的每个元素,它必须根据属性的定义和层叠和继承规则为每个属性分配一个值。
  5. 如果源文档附带有备用样式表集(例如在HTML 4中使用"alternate"关键字[HTML4]),则UA必须允许用户选择UA应该应用的样式表集。
  6. UA必须允许用户关闭作者样式表的影响。

然而,并非每个用户代理都必须遵守每一点:

由于特定设备的限制(例如,用户代理无法在单色显示器或页面上渲染颜色)而导致用户代理无法实现本规范的一部分,这并不意味着不符合标准。

用户代理必须允许用户指定包含用户样式表的文件。运行在无法编写或指定文件的设备上的用户代理不受此要求的约束。此外,用户代理可以提供其他方式指定用户偏好,例如通过GUI。

CSS 2.2未定义哪些属性适用于表单控件和框架,或如何使用CSS来设置它们的样式。用户代理可以将CSS属性应用于这些元素。建议作者将此类支持视为实验性的。未来的CSS级别可能会对此进一步规定。

3.3 错误条件

通常,本文件在整个规范中指定了错误处理行为。例如,参见处理解析错误的规则

3.4 text/css 内容类型

存在于单独文件中的CSS样式表通过互联网作为一系列字节传输,并附有编码信息。传输的结构,称为消息实体,由RFC 2045和RFC 2616定义(参见[RFC2045][RFC2616])。内容类型为"text/css"的消息实体代表一个独立的CSS文档。"text/css"内容类型已由RFC 2318注册([RFC2318])。