内容
本节内容是非规范的
本教程中,我们展示了设计简单样式表是多么容易。为了(阅读)本教程,你需要知道一点HTML(见[HTML4])和一些基本的桌面排版术语(desktop publishing terminology)
我们从一个短小的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>
现在样式表有了4条规则:前2条设置BODY元素的颜色和背景(同时设置颜色和背景色是个不错的选择),而后2条设置H1元素的颜色和背景。因为没有给P元素指定颜色,它将从父元素继承,也就是BODY。H1元素也是BODY元素的子元素,但第二条规则重写了继承来的值。CSS中不同值之间经常有这样的冲突,本规范描述了怎样处理它们
CSS 2.1有超过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'字体族(所有用户代理都应该提供的5个一般字体族之一)。BODY的子元素将继承'font-family'属性的值
第二条声明把BODY元素的字体大小设置为12磅(point)。"磅"这个单位一般用在印刷字体中来描述字体大小和其它长度值,是一个不会根据环境缩放的绝对单位
第三条声明用了相对单位,会根据环境缩放。"em"这个单位指的是元素的字体大小。这种情况下,BODY元素的margin是字体大小的3倍宽
本节内容是非规范的
CSS可以用在任何结构化文档格式中,例如可扩展标记语言(eXtensible Markup Language)[XML10]应用程序。实际上,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>
为了用一种类文档的风格(fashion)显示这段内容,我们必须先声明哪些元素是行内的(也就是说,不会造成换行),哪些是块级的(也就是说,会造成换行)
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用户代理不会在这个阶段改变文档树,特别的,由样式表生成的内容生成不会被反馈给文档语言处理器(例如,重新解析)
对于所有媒体而言,术语 canvas都表示“格式化结构将被渲染的地方”。canvas对每个维度的空间来说都是无限的,但渲染通常出现在canvas上一块有限的区域中,由用户代理根据目标媒体建立。例如,用户代理渲染到屏幕通常限定一个最小宽度并根据视口的尺寸选择初始宽度。用户代理渲染页面时通常强制加上宽度和高度约束。听觉用户代理可能对音频空间加以限制,但并不及时(Aural user agents may impose limits in audio space, but not in time.)
CSS 2.1 选择器和属性允许样式表引用文档或用户代理的以下部分:
本节内容是非规范的
CSS 2.1和CSS2,以及在它之前的CSS1,都是基于这些设计原则的:
向前与向后兼容 CSS 2.1用户代理能够理解CSS1样式表。CSS1用户代理能够读取CSS 2.1样式表并且抛弃那部分无法理解的。而不支持CSS的用户代理将无法显示样式增强的(style-enhanced)文档。当然,通过CSS实现的样式增强将不会被渲染,但所有内容仍然会被显示。
对结构化文档的补充 样式表补充了结构化文档(例如,HTML和XML应用程序),为标记文本提供样式信息。它应该能够轻易改变样式,在对标记产生较少或者零影响的前提下。
供应商,平台和设备的独立性 样式表让文档对供应商,平台和设备保持独立性。样式表本身也是供应商和平台独立的,但CSS 2.1允许为一组设备(例如,打印机)设定样式表
可维护性 通过从文档指向样式表,网站管理员可以简化站点维护工作并让整个站点保持一致的外观和感觉。例如,如果机构的背景色变了,只需要修改一个文件
简洁 CSS是一种简单的样式语言,有良好的可读可写性,CSS属性彼此之间很大程度上保持独立,并且一般只有一种方式去实现一种特定效果
网络性能 CSS为如何展现内容提供了紧凑编码。比起图片或者音频这些经常被编写者用来实现特定渲染效果的文件,样式表大大减小了内容大小。而且,为了进一步提高网络性能,减少了打开的网络连接数量
灵活性 CSS可以以几种方式应用于内容,关键特性是层叠默认(用户代理)样式表、用户样式表、link样式表、文档head以及构成文档body的元素的属性中的样式信息的能力
丰富性 为编写者提供一堆丰富的渲染效果,增加了Web作为一种媒介表达的的丰富性。设计者渴望已久的功能通常已经在桌面排版和幻灯片中出现了。一些需要的渲染效果与设备独立性有冲突,但CSS 2.1给予了充分的空间让设计师们提出他们的要求(goes a long way toward granting designers their requests)
可选的语言绑定 规范中描述的CSS属性集来自视觉和听觉表现一致的格式化模型,该格式化模型可以通过CSS语言来访问,但也能绑定到其他语言。例如,一个JavaScript程序可能动态改变某些元素的'color'属性的值
可访问性 以下几个CSS特性将会让Web对有残疾的用户来说可读性更好:
注释 关于用CSS和HTML设计易访问文档的更多信息请查看[[-WCAG20]]