目录
本节为非规范性内容。
在本教程中,我们将展示如何轻松设计简单的样式表。要完成本教程,你需要了解一些 HTML 知识(参见[HTML4])以及一些基本的桌面出版术语。
我们从一个小型 HTML 文档开始:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bach's home page</TITLE> </HEAD> <BODY> <H1>Bach's home page</H1> <P>Johann Sebastian Bach was a prolific composer. </BODY> </HTML>
要将 H1 元素的文本颜色设置为红色,你可以编写以下 CSS 规则:
h1 { color: red }
一个 CSS 规则由两个主要部分组成:选择器('h1')和声明('color: red')。在 HTML 中,元素名称不区分大小写,因此 'h1' 和 'H1' 都有效。声明有两个部分:属性名称('color')和属性值('red')。虽然上面的示例仅试图影响呈现 HTML 文档所需的一个属性,但它本身就算作一个样式表。结合其他样式表(CSS 的一个基本特性是样式表可以组合),该规则将决定文档的最终呈现方式。
HTML 4 规范定义了如何为 HTML 文档指定样式表规则:可以在 HTML 文档中,或通过外部样式表。要将样式表放入文档中,请使用 STYLE 元素:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bach's home page</TITLE> <STYLE type="text/css"> h1 { color: red } </STYLE> </HEAD> <BODY> <H1>Bach's home page</H1> <P>Johann Sebastian Bach was a prolific composer. </BODY> </HTML>
为了最大程度的灵活性,我们建议作者指定外部样式表;这样可以在不修改源 HTML 文档的情况下进行更改,并且可以在多个文档之间共享。要链接到外部样式表,你可以使用 LINK 元素:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bach's home page</TITLE> <LINK rel="stylesheet" href="bach.css" type="text/css"> </HEAD> <BODY> <H1>Bach's home page</H1> <P>Johann Sebastian Bach was a prolific composer. </BODY> </HTML>
LINK 元素指定了以下内容:
为了展示样式表与结构化标记之间的紧密关系,在本教程中我们继续使用 STYLE 元素。让我们添加更多颜色:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bach's home page</TITLE> <STYLE type="text/css"> body { color: black; background: white } h1 { color: red; background: white } </STYLE> </HEAD> <BODY> <H1>Bach's home page</H1> <P>Johann Sebastian Bach was a prolific composer. </BODY> </HTML>
现在样式表包含四个规则:前两个设置了 BODY 元素的颜色和背景(最好将文本颜色和背景颜色一起设置),而后两个设置了 H1 元素的颜色和背景。由于未为 P 元素指定颜色,它将继承其父元素(即 BODY)的颜色。H1 元素也是 BODY 的子元素,但第二个规则覆盖了继承的值。在 CSS 中,常常会有不同值之间的冲突,本规范描述了如何解决这些冲突。
CSS 2.2 具有超过 90 个属性,包括 'color'。让我们看看其他一些属性:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bach's home page</TITLE> <STYLE type="text/css"> body { font-family: "Gill Sans", sans-serif; font-size: 12pt; margin: 3em; } </STYLE> </HEAD> <BODY> <H1>Bach's home page</H1> <P>Johann Sebastian Bach was a prolific composer. </BODY> </HTML>
首先要注意的是,多个声明被分组在由花括号({...})包围的块内,并且用分号分隔,尽管最后一个声明后也可以跟一个分号。
BODY 元素上的第一个声明将字体家族设置为 "Gill Sans"。如果该字体不可用,用户代理(通常称为“浏览器”)将使用 'sans-serif' 字体家族,这是所有用户代理都知道的五种通用字体家族之一。BODY 的子元素将继承 'font-family' 属性的值。
第二个声明将 BODY 元素的字体大小设置为 12 磅。“磅”单位通常用于基于印刷的排版中,以表示字体大小和其他长度值。这是一个绝对单位的示例,不会相对于环境进行缩放。
第三个声明使用了一个相对单位,该单位会根据其周围环境进行缩放。“em”单位指的是元素的字体大小。在这种情况下,BODY 元素周围的边距是字体大小的三倍宽。
本节为非规范性内容。
CSS 可以用于任何结构化文档格式,例如可用于可扩展标记语言(eXtensible Markup Language)[XML11]的应用程序。事实上,XML 比 HTML 更依赖样式表,因为作者可以创建用户代理不知道如何显示的自定义元素。
下面是一个简单的 XML 片段:
<ARTICLE> <HEADLINE>Fredrick the Great meets Bach</HEADLINE> <AUTHOR>Johann Nikolaus Forkel</AUTHOR> <PARA> One evening, just as he was getting his <INSTRUMENT>flute</INSTRUMENT> ready and his musicians were assembled, an officer brought him a list of the strangers who had arrived. </PARA> </ARTICLE>
要以类似文档的方式显示此片段,我们首先必须声明哪些元素是内联级的(即,不会导致换行),哪些是块级的(即,会导致换行)。
INSTRUMENT { display: inline } ARTICLE, HEADLINE, AUTHOR, PARA { display: block }
第一个规则将 INSTRUMENT 声明为内联元素,而第二个规则使用逗号分隔的选择器列表,将所有其他元素声明为块级元素。XML 中的元素名称区分大小写,因此以小写形式编写的选择器(例如 'instrument')与大写形式(例如 'INSTRUMENT')是不同的。
将样式表链接到 XML 文档的一种方法是使用处理指令:
<?xml-stylesheet type="text/css" href="bach.css"?> <ARTICLE> <HEADLINE>Fredrick the Great meets Bach</HEADLINE> <AUTHOR>Johann Nikolaus Forkel</AUTHOR> <PARA> One evening, just as he was getting his <INSTRUMENT>flute</INSTRUMENT> ready and his musicians were assembled, an officer brought him a list of the strangers who had arrived. </PARA> </ARTICLE>
视觉用户代理可以将上述示例格式化为:
请注意,“flute”一词保持在段落内,因为它是内联元素 INSTRUMENT 的内容。
然而,文本的格式并没有达到预期效果。例如,标题的字体大小应比其余文本大,并且你可能希望将作者的名字以斜体显示:
INSTRUMENT { display: inline } ARTICLE, HEADLINE, AUTHOR, PARA { display: block } HEADLINE { font-size: 1.3em } AUTHOR { font-style: italic } ARTICLE, HEADLINE, AUTHOR, PARA { margin: 0.5em }
视觉用户代理可以将上述示例格式化为:
向样式表中添加更多规则将允许你进一步描述文档的呈现。
本节内容不包括其子部分为非规范性内容。
本节介绍了用户代理支持 CSS 工作的可能模型之一。这只是一个概念模型;实际实现可能有所不同。
在此模型中,用户代理通过以下步骤处理源文档:
请注意,在此阶段,CSS 用户代理不会更改文档树。特别是,由样式表生成的内容不会反馈给文档语言处理器(例如,用于重新解析)。
对于所有媒体,术语画布描述的是“格式化结构呈现的空间”。画布在每个维度上都是无限的,但渲染通常发生在用户代理根据目标媒体确定的画布有限区域内。例如,渲染到屏幕的用户代理通常会强制设置一个最小宽度,并根据视口的尺寸选择一个初始宽度。渲染到页面的用户代理通常会施加宽度和高度的限制。听觉用户代理可能会在音频空间中施加限制,但不会在时间上施加限制。
CSS 2.2 选择器和属性允许样式表引用文档或用户代理的以下部分:
本节为非规范性内容。
CSS 2.2,和之前的 CSS2 及 CSS1 一样,基于一组设计原则:
前向和后向兼容性。CSS 2.2 用户代理将能够理解 CSS1 样式表。CSS1 用户代理将能够读取 CSS 2.2 样式表并丢弃它们不理解的部分。此外,不支持 CSS 的用户代理也能显示样式增强的文档。当然,CSS 提供的样式增强效果将不会呈现,但所有内容都将得到展示。
与结构化文档互补。样式表与结构化文档(例如,HTML 和 XML 应用程序)互补,为标记的文本提供样式信息。更改样式表应当很容易,且对标记的影响微乎其微甚至没有影响。
厂商、平台和设备独立性。样式表使文档保持厂商、平台和设备的独立性。样式表本身也是厂商和平台独立的,但 CSS 2.2 允许你将样式表定位于一组设备(例如,打印机)。
可维护性。通过从文档中指向样式表,网站管理员可以简化站点维护并在整个站点保持一致的外观和感觉。例如,如果组织的背景颜色发生变化,只需更改一个文件。
简洁性。CSS 是一种简单的样式语言,具有可读性和可写性。CSS 属性在尽可能大的范围内保持相互独立,通常只有一种方法可以实现某种效果。
网络性能。CSS 提供了紧凑的内容呈现编码。与作者经常使用来实现某些渲染效果的图像或音频文件相比,样式表通常减少了内容大小。此外,打开的网络连接也更少,从而进一步提高了网络性能。
灵活性。CSS 可以通过多种方式应用于内容。关键特性是能够级联样式信息,这些样式信息可以指定在默认(用户代理)样式表、用户样式表、链接的样式表、文档头部以及文档主体中形成元素的属性中。
丰富性。为作者提供丰富的渲染效果集增加了 Web 作为表达媒介的丰富性。设计师一直渴望获得桌面出版和幻灯片应用程序中常见的功能。有些要求的渲染效果与设备独立性相冲突,但 CSS 2.2 在很大程度上满足了设计师的需求。
替代语言绑定。本规范中描述的 CSS 属性集为视觉和听觉呈现提供了一个一致的格式化模型。此格式化模型可以通过 CSS 语言访问,但也可以绑定到其他语言。例如,一个 JavaScript 程序可以动态更改某个元素的'color'属性值。
可访问性。几个 CSS 功能将使 Web 对残障用户更具可访问性:
注意。有关使用 CSS 和 HTML 设计可访问文档的更多信息,请参见[WCAG20]。