3 一致性:要求和推荐
    从本段开始,我们开始讨论CSS2的正式说明。首先是作者、用户和实现者之间的约定。
    本文档中的关键词“必须”,“不可以”,“要求”,“要”,“不要”,“应该”,“不应该”,“推荐”,“可以”,以及“可选”应根据RFC 2119的描述而加以解释(参见[RFC2119])。不过,考虑到可阅读性,这些词在规范中不做特别显示。
    有时,规范会向作者和用户端推荐一些好的实践。这些推荐不是标准化的,而与规范保持一致也不依赖于它们的实现。这些推荐包含了“我们推荐……”,“本规范推荐……”或类似的语句。
- 样式表
 - 规定一个文档呈现的一系列语句。
样式可能有三个不同的来源:作者,用户以及用户端。这些来源之间的相互作用的讨论请参见层叠和继承一章。
 - 有效的样式表
 - 一个样式表的有效性取决于样式表所使用的CSS级别。所有有效的CSS1样式表都是有效的CSS2样式表。不过,某些相对CSS1的语义的改进意味着一些CSS1的样式会和CSS2中的有一些语义上的差别。
有效的CSS2样式表必须根据CSS2语法来编写。进一步说,它必须只包含本规范中定义的@规则,属性名以及属性值。样式表中如果有一个非法的(无效的)@规则,属性名或属性值,那它就是一个无效的样式表。
 - 源文档
 - 一个或多个样式表引用到的文档。以将文档表示为元素树的某种语言进行编码。每一个元素包括标记元素类型的名称,可选的一些属性,以及(可能是空的)内容。
 
- 文档语言
 - 源文档的编码语言(如HTML或一个XML应用)。
 - 元素
 - (一个SGML术语,参见[ISO8879]。)文档语言的最基本的语法构造。大部分样式表规则使用这些元素的名称(如HTML中的"P","TABLE","OL")来指定它们的渲染信息。
 - 
替换元素
 - CSS格式器只知道其内在尺寸的一个元素。HTML中,IMG,INPUT,TEXTAREA,SELECT以及OBJECT元素都是替换元素的例子。例如,IMG元素的内容通常由它的"src"属性指定的图形所代替。CSS并不定义如何找到内在尺寸。
 - 内在尺寸
 - 由元素自身,而不是其周围环境所定义的元素的宽度和高度。CSS2中假定,所有的替换元素且只有替换元素才具有内在尺寸。
 - 属性
 - 与一个元素相关联的值,包括一个名字,以及相关的(文字)值。
 - 内容
 - 源文档中和元素相关联的内容;并不是所有的元素都有内容,这时就称为空。元素的内容可以包含文本,也可以包含一系列子元素,这时该元素就被称为这些子元素的父元素。
 - 经渲染的内容
 - 相应的样式表应用后,经渲染的元素的内容。替换元素经渲染的内容来自源文档之外。经渲染的内容也可以是一元素的备用文本(如HTML"alt"属性的值),还可以包含由样式显式或隐式插入的内容,如编号,符号等。
 - 
文档树
 - 源文档中元素树的编码。树中,每一个元素恰好由一个父元素。根元素是例外,它没有父元素。
 - 子元素
 - 当且仅当元素B是元素A的父元素时,元素A称为元素B的子元素。
 - 后代
 - 如果:(1)元素A是元素B的子元素;或(2)元素A是元素C的子元素,而元素C又是元素B的后代,则元素A称为元素B的后代。
 - 前辈
 - 当且仅当元素B是元素A的后代时,元素A称为元素B的前辈。
 - 同胞
 - 当且仅当元素A和元素B具有共同的父元素时,元素A称为元素B的同胞。在文档树中,如果元素A出现在元素B之前,则元素A称为元素B的胞兄;如果元素A出现在元素B之后,则元素A称为元素B的胞弟。
 - 前继元素
 - 当且仅当(1)元素A是元素B的前辈;或(2)元素A是元素B的胞兄时,元素A称为元素B的前继元素。
 - 后继元素
 - 当且仅当元素B是元素A的前继元素时,元素A称为元素B的后继元素。
 - 作者
 - 作者就是写出文档和相关样式表的人。编写工具生成文档和相关的样式表。
 
- 用户 
 - 用户就是和用户端交互,来浏览、聆听或使用一文档和相关的样式表的人。用户可以提供一个个人样式表,来指定个人喜好。
 
- 用户端(UA)
 - 用户端是一种程序,它根据本规范的条文,解释以文档语言写成的文档,并应用相关的样式表。用户端可以显示文档,阅读文档,打印文档或将它转换为另外一个格式。
 
    下面是以HTML编码的源文档的一个例子:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//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>
    它产生了如下的树:
根据HTML的定义,在解析过程中,即使源文档中不包含HEAD元素,它也被自动引入,并成为文档树的一部分。与此类似,解析器也知道P和LI结束的地方,尽管源文档中没有</P>和</LI>标记。
 
    本节只定义和CSS2规范的一致性。将来也许会有其它级别的CSS,需要用户端实现一系列不同的性能来保持与它们的一致。
    一般地,用户端要声明与本规范一致,必须遵循如下几点:
- 它必须支持一个或多个CSS2媒介类型。
 - 对于每一个源文档,它必须尝试获得对于支持的媒介类型而言合适的所有相关的样式表。如果它不可以获取所有的相关的样式表(如由于网络故障),它必须使用那些它可以获取的样式表来显示文档。
 - 它必须按照本规范来解析样式表。特别地,它必须理解所有的@规则,块,声明和选择子(参见CSS2语法)。一旦用户端碰到一个适用于某个支持的媒介类型的属性,用户端必须根据属性定义来解析并获得值。这意味着用户端必须接收所有合法的值而必须忽略带有非法值的声明。用户端必须忽略适用于不支持的媒介类型的规则。
 - 对于文档树中的每一个元素,它必须根据属性的定义以及层叠和继承为其所适用的每一个属性指定一个值。.
 - 如果源文档带有备选样式表(如HTML4.0[HTML40]中的"alternate"关键词),用户端必须允许用户从中选择一个样式表,并应用那个选择的样式表。
 
    并不是每一个用户端都必须遵循每一点,不过:
- 用户端如果接受样式,必须满足1-3点。
 - 编写工具只要求输出有效的样式表。
 - 用户端如果以相关联的样式表渲染一个文档,必须满足1-5点,并根据本规范设定的媒介相关的要求来渲染文档。在用户端的要求下,值可以是近似的。
 
    如果由于特定设备的限制(如用户端无法在单色显示器或页面上显示颜色),而使用户端无法实现本规范的某一部分,这并不意味着不一致。
    本规范推荐用户端允许用户指定用户样式表。
    一般地,本文档并不规定用户端的错误处理(如在找不到由一个URI指向的资源时,应如何处理)。
    不过,用户端必须遵守解析错误的处理规则。
    由于用户端在如何处理出错情况时可能有所不同,作者和用户不可以依赖于某一特定的错误修复方法。
    以独立文件存在的CSS样式表在Internet上传送时是以伴随着编码信息的一系列字节来进行的(参见[HTML40],第五章)。传送的结构,称为信息实体。其定义在RFC 2045及RFC 2068中(参见[RFC2045]及[RFC2068])。带有内容类型"text/css"的信息实体代表一个独立的CSS文档。"text/css"内容类型注册在([RFC2318])。