20.1.2 指定个别元素不进行插入
在代码清单20-1的示例中,因为对页面上的h2元素使用了before选择器,所以该页面上如果有多个h2元素,则所有的h2元素前面都会被插入内容。如果想让其中一个或几个h2元素的前面不要插入内容时,应该怎么指定呢?
在CSS 2.1中,针对这个问题在content属性中追加了一个none属性值,使用方法如下代码所示。
<style type="text/css">
h2.sample:before{
content: none
}
</style>
<h2>标题1</h2>
<h2 class="sample">标题2</h2>
通过这种方法,替h2元素增加一个类,然后替这个类起个名字,在这个类的样式指定中将content属性值设定为"none",然后在不需要插入内容的元素中将class属性的属性值设定为这个给定的类名就可以了。
代码清单20-2为将代码清单20-1修改后使用none属性值的示例,该页面中有三个h2元素,其中第二个h2元素前面没有被插入内容。
代码清单20-2 content属性的none属性值使用示例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title> content属性的none属性值使用示例</title>
</head>
<style type="text/css">
h2:before{
content: "COLUMN";
color: white;
background-color: orange;
font-family: 'Comic Sans MS', Helvetica, sans-serif;
padding: 1px 5px;
margin-right: 10px;
}
h2.sample:before{
content: none
}
</style>
<body>
<h2>标题文字1</h2>
<h2 class="sample">标题文字2</h2>
<h2>标题文字3</h2>
</body>
</html>
这段代码的运行结果如图20-2所示。
图20-2 content属性的none属性值使用示例
另外,在CSS 2.1中,除了none属性值外,还为content属性添加了一个"normal"属性值,其作用与使用方法none属性值的作用相同,并且使用方法也相同,读者可自行在代码清单20-2中,将none属性值修改为normal属性值,然后在浏览器中重新运行该示例,观察运行结果。
那么,既然normal属性值的作用与none属性值的作用相同,为什么CSS 3中还要追加这个normal属性值呢?它们的区别又是什么呢?这里要补充说明的是,从CSS 2.1开始,只有当使用before选择器与after选择器的时候,normal属性值的作用才与none属性值的作用相同,都是不让选择器在个别元素的前面或后面插入内容。但是none属性值只能应用在这两个选择器中,而normal属性值还可以应用在其他用来插入内容的选择器中,而在CSS 2中,只有before选择器与after选择器能够用来在元素的前面或后面插入内容,所以这两者的作用完全相同。在CSS 3草案中,已经追加了其他一些可以用来插入内容的选择器的提案,针对这一类选择器,就只能使用normal属性值了,而且normal属性值的作用也会根据选择器的不同而发生变化。