本节简单地介绍CSS Level 1和CSS Level 2匹配XML的规则。关于CSS的属性、属性取值等内容不在本书的讨论范围中,在万维网联合会的网站上,可以读到关于CSS的规范说明:http://www.w3.org/Style/CSS/。
注意:微软的Internet Explorer 6.0仅支持CSS Level 1,尚未实现CSS Level 2的匹配规则;Internet Explorer 7.0部分支持CSS Level 2。目前对CSS支持较好的浏览器是Opera 9和Mozilla FireFox 2。
CSS匹配规则的格式如下:
ElementName {
Property1: value1;
Property2: value21 value22;
}
其各部分分述如下。
(1)代码中“{”和“}”花括号中间的内容表示一条CSS规则(rule)。
(2)花括号前的内容称为“选择子”(Selector),用于指定规则的作用范围。如上述代码的“ElementName”表示这条规则将用于匹配“ElementName”元素。
(3)在规则中,“Property1:”为样式属性(Property)名称,后面的“value1”表示样式属性的值。
(4)一条规则中可以包含多个属性,每个属性以分号“;”结束。规则中的最后一个属性可以省略其分号标记。
(5)某些CSS属性可包含多个值,每个值之间用空格分隔(如“value21 value22”)。
(6)属性的名称和值一般不区分大小写。
说明:由于XML是区分大小写的,所以CSS中的元素名也区分大小写。但CSS的属性和属性值不区分大小写。CSS属性中的URL文件路径则根据URL所指向的文件所在的操作系统而异。
如以下CSS代码表示匹配XML文档中所有“abbr”元素,其字体样式(font-style)属性为斜体(italic)。
abbr {
font-style: italic;
}
以下CSS代码表示匹配XML文档中所有“book”元素,其边框(Border)属性包含3个值,分别指定边框的宽度、样式和颜色。
book {
border: 3pt double black;
}
先代元素被某个CSS规则匹配后,后代元素将继承(Inheritance)先代元素的某些呈现属性。对于以下XML文档片段:
<book>
<chapter>Chapter1</chapter>
<paragraph>Paragraph1</paragraph>
</book>
使用以下CSS代码匹配“book”元素:
book {
text-decoration: underline;
}
“book”元素的下划线(underline)属性将被其后代元素“chapter”和“paragraph”继承,因此“chapter”元素和“paragraph”元素都以下划线文本的方式呈现。
说明:不同的CSS属性有不同的继承特性,请参阅CSS建议规范。
在选择子中,可以同时书写多个元素,各元素之间以空格分开,表示按层次匹配后代元素。CSS样式将作用于该层次列表的最后一级元素,如以下的“ElementName3”元素(该元素为“ElementName2”的后代元素,而“ElementName2”元素又为“ElementName1”的后代元素)。
ElementName1 ElementName2 ElementName3 {
Property1: value1;
Property2: value21 value22;
}
注意:层次匹配具有比元素匹配更高的优先级。如在层次匹配和元素匹配中定义了冲突的规则属性,则以层次匹配中定义的优先。
如以下CSS代码中有两条规则,第1条规则匹配“title”元素,第2条规则匹配“chapter”元素的“title”后代元素。这样,“chapter”的“title”后代元素会同时被这两条规则匹配。在这两条规则中,都指定了“text-align”属性。由于“chapter title”比“title”更具体,具有更高的优先级,因此,“text-align”属性的实际取值为“chapter title”中的取值“left”,即所有“chapter”元素内的“title”元素都以左对齐方式显示。
title {
text-align: center; /* 居中显示文本 */
font-size: 24pt;
font-weight: bold;
color: brown;
}
chapter title {
font-size: 14pt;
text-align: left; /* 左对齐显示文本 */
}
层次匹配的元素列表中,后面的元素只要是前面元素的后代元素,即被规则匹配。如上述“chapter title”规则同时匹配下面XML代码的两个“title”元素。
<chapter>
<title>Title1</title>
<sub-chapter>
<title>Title2</title>
</sub-chapter>
</chapter>
如果将相同的规则应用于多个匹配条件,可以用逗号将各个匹配条件分开。其形式如下:
ConditionElement1,
ConditionElement21 ConditionElement22 {
Property1: value1;
Property2: value21 value22;
}
以下CSS代码同时匹配“book”、“title”、“author”元素,以及“body”元素内的“paragraph”元素。
book, title, author, body paragraph {
display: block;
}
通配符是CSS Level 2中的特性,匹配所有元素。形式如下:
* {
Property1: value1;
Property2: value21 value22;
}
/* 匹配“Element1”元素内的所有后代元素 */
Element1 * {
Property1: value1;
Property2: value21 value22;
}
以下CSS代码匹配“body”元素下的所有后代元素。
body * {
font-size: 14pt;
text-align: left;
}
子元素匹配是CSS Level 2中的特性,格式是在父元素和子元素之间添加一个“>”号。形式如下:
ParentElement1 > ParentElement2 {
Property1: value1;
Property2: value21 value22;
}
以下CSS代码匹配“chapter”元素的“title”子元素。
chapter > title {
font-size: 14pt;
text-align: left;
}
上述CSS代码匹配下面XML代码的第1个“title”元素。
<chapter>
<title>Title1</title>
<sub-chapter>
<title>Title2</title>
</sub-chapter>
</chapter>
兄弟元素匹配是CSS Level 2中的特性,格式是在前导兄弟元素和后继兄弟元素之间添加一个“+”号。形式如下:
PrecedingElement1 + Element2 {
Property1: value1;
Property2: value21 value22;
}
以下CSS代码匹配紧随“title”元素之后的“paragraph”子元素。
title + paragraph {
font-size: 14pt;
}
上述CSS代码匹配下面XML代码中“title”元素后的第1个“paragraph”元素。
<body>
<chapter>
<title>Title2</title>
<paragraph>Paragraph 1</paragraph>
<paragraph>Paragraph 2</paragraph>
</chapter>
</body>
第一子元素匹配是CSS Level 2中的特性,格式是在子元素后添加“:first-child”伪类(Pseudo-class)。形式如下:
ChildElement:first-child {
Property1: value1;
Property2: value21 value22;
}
以下CSS代码匹配位于第一子元素位置的“title”元素。
title:first-child {
font-size: 24pt;
}
上述CSS代码匹配下面XML代码中“chapter”元素下的第1个“title”元素。
<body>
<chapter>
<title>Title 1</title>
<paragraph>Paragraph 1</paragraph>
<paragraph>Paragraph 2</paragraph>
<title>Title 2</title>
</chapter>
</body>
元素属性匹配是CSS Level 2中的特性,格式是在元素后添加一对“[]”号,中间写上所匹配的属性列表。形式如下:
/* 匹配具有“attribute”属性的“Element1”元素 */
Element1[attribute] {
Property1: value1;
Property2: value21 value22;
}
/* 匹配具有“attribute”属性,且该属性值等于“attrValue1”的“Element1”元素 */
Element1[attribute="attrValue1"] {
Property1: value1;
Property2: value21 value22;
}
/* 匹配具有“attribute”属性,且该属性值是空格分隔的列表形式(如:“attribute="attrValue1 attrValue2 attrValue3"”),同时其中某一个等于“attrValue1”的“Element1”元素 */
Element1[attribute~="attrValue1"] {
Property1: value1;
Property2: value21 value22;
}
/* 匹配具有“lang”属性,且该属性值是减号“-”分隔的形式(如:“lang="zh-cn"”)和
“zh”开始的“Element1”元素 */
Element1[lang|="zh"] {
Property1: value1;
Property2: value21 value22;
}
/* 匹配同时具有“attribute1”和“attribute2”属性,且名称为“Element1”的元素 */
Element1[attribute1][attribute2] {
Property1: value1;
Property2: value21 value22;
}
/* 匹配具有“attribute1”属性,其值为“attrValue1”,
另还具有“attribute2”属性,其值为“attrValue2”,
名称为“Element1”的元素 */
Element1[attribute1="attrValue1"][attribute2="attrValue2"] {
Property1: value1;
Property2: value21 value22;
}
/* 匹配所有具有“attribute”属性的元素(“[”前的“*”可省略) */
*[attribute] {
Property1: value1;
Property2: value21 value22;
}
以下CSS代码匹配具有“class="important"”属性的“paragraph”元素。
paragraph[class="important"] {
font-size: 24pt;
color: red;
}
上述CSS代码匹配下面XML代码中具有“class="important"”属性的“paragraph”元素。
<body>
<chapter>
<title>Title 1</title>
<paragraph>Paragraph 1</paragraph>
<paragraph class="important">Paragraph 2</paragraph>
</chapter>
</body>
类选择子和ID选择子是比较特殊的属性选择子,常用于HTML和XHTML的CSS,在XML的CSS中比较少用。
在HTML或XHTML中,“class”属性有特别的含义,可以用CSS的类选择子匹配。类选择子的语法是一个“.”号。如下示例匹配具有“class="important"”属性的“table”元素。
table.important {
font-size: 24pt;
color: red;
}
在HTML或XHTML中,元素的“id”属性是ID属性,可以用CSS的ID选择子匹配。ID选择子的语法是一个“#”号。如下示例匹配具有“id="k456"”属性的元素。
#k456 {
font-size: 24pt;
color: red;
}
在XML中,元素的ID属性在DTD中指定。如已用DTD指定“chapter”元素的“name”属性为ID属性,则可以用如下CSS代码匹配具有“name="c12"”属性的“chapter”元素。
chapter#c12 {
font-size: 24pt;
color: red;
}
如果XML DTD被浏览器忽略,或XML文档没有DTD,则上述匹配形式将无效。为稳妥起见,应采用属性选择子匹配元素。
chapter[name="c12"] {
font-size: 24pt;
color: red;
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有