CSS选择器(中)——高级选择器续
本篇随笔将紧接着上一篇随笔内容,继续讨论CSS高级选择器。值得一提的是:虽然很多选择器是CSS3.0的新特性,但由于主流浏览器的支持性比较好,我并未做出严格区分和说明。
④通用样式(或者说通用选择器)。
顾名思义,通用样式是所有元素(当然,这里指标签)都能够使用的样式,而实际上它默认是被所有元素引用的。请看下面的例子:
1 <html> 2 <head> 3 <title> 通用选择器示例 </title> 4 <style> 5 *{color:red;background-color:blue} 6 </style> 7 </head> 8 9 <body> 10 测试文字 11 <h1>测试文字</h1> 12 </body> 13 </html>
意思就是:通用选择器里的样式是默认被所有标签引用。凡是有利就有弊,那么我们一般是用作微调。比如我们可能会在cs文件或网页内嵌样式中添加下列代码:
1 *{ 2 margin:0; 3 padding:0;}
内容一般就是这种。
⑤伪类。
1).锚伪类(以下内容大部分摘自W3CSchool)。
锚伪类是CSS1中就存在的伪类,主要有以下四个可设置样式:
1 a:link {color: #FF0000} /* 普通情况下的链接样式 */ 2 a:visited {color: #00FF00} /* 被访问过的链接样式 */ 3 a:hover {color: #FF00FF} /* 鼠标悬停上时链接样式 */ 4 a:active {color: #0000FF} /* 被选中时链接样式 */
使用过的朋友们都知道,这种样式是非常灵活的。除了颜色,还有下划线、鼠标形状等格式样式,您一定能使用以上伪类样式做出非常绚丽的效果。
以下是W3CSchool对于锚伪类的几点提示:
在 CSS 定义中,a:hover 必须被置于 a:link 和 a:visited 之后,才是有效的。
在 CSS 定义中,a:active 必须被置于 a:hover 之后,才是有效的。
伪类名称对大小写不敏感。
很简单,和其他样式一样,某些样式设置需要遵循一定的顺序规则。
2):first-child 伪类。
W3CSchool的原话为:“:first-child 伪类对另一个元素的第一个子元素进行匹配”。
这句话是什么意思呢?估计大家会误解,因为我开始也误解了。请看下面的例子:
1 <html> 2 <head> 3 <title> :first-child伪类示例 </title> 4 <style> 5 ul:first-child{color:red} 6 </style> 7 </head> 8 9 <body> 10 <ul> 11 <li> 12 测试1 13 </li> 14 </ul> 15 <ul> 16 <li> 17 测试2 18 </li> 19 </ul> 20 </body> 21 </html>
大家是不是认为ul下的第一个li就会默认引用我们设置的样式?实际上并非如此,:first-child是指作为第一个子元素而被赋予的样式。比如上面的例子,第一个ul作为body的第一个子元素而引用了我们设置的样式,第二个就没有。又如下面的例子:
1 <html> 2 <head> 3 <title> :first-child伪类示例 </title> 4 <style> 5 div > ul:first-child{color:red} 6 </style> 7 </head> 8 9 <body> 10 <ul> 11 <li> 12 测试1 13 </li> 14 </ul> 15 <div> 16 <ul> 17 <li> 18 测试2 19 </li> 20 </ul> 21 </div> 22 </body> 23 </html>
IE9没有效果……上面的例子证明了该伪类也可以和子选择器配合使用,当然,该伪类也可以在其他地方使用,比如特定匹配。请看下面的例子(摘自W3CSchool)。
在这个例子中,选择器将对 p 元素中的第一个子元素为 em 的元素进行匹配 - 并且将 p 元素中的第一个 em 元素设置为粗体:
1 <title> :first-child伪类示例 </title> 2 <style> 3 p em:first-child 4 { 5 font-weight:bold 6 } 7 </style> 8 </head> 9 10 <body> 11 <p>I am a <em>strong</em> man.</p> 12 </body> 13 </html>
有时候:first-child被写在p的后面,实际上是一样的,大家注意一下,另外IE9似乎不支持该伪类样式。
3):lang伪类。
首先我们要知道lang是元素的属性,意思是表示语言。比如“zh”、“zh-cn”、“us”、“us-en”。
使用方式如下:
1 <html> 2 <head> 3 <title></title> 4 <style type="text/css"> 5 q:lang(no) 6 { 7 quotes: "~" "~" 8 } 9 p:lang(no){background-color:red} 10 </style> 11 12 </head> 13 14 <body> 15 <p lang="no">文字<q lang="no">段落中的引用的文字</q>文字</p> 16 </body> 17 </html>
当然,既然语言(lang)是一种属性,我们何不试试属性选择器呢?
1 <html> 2 <head> 3 <title></title> 4 <style type="text/css"> 5 q[lang="no"] 6 { 7 quotes: "~" "~" 8 } 9 p[lang="no"]{background-color:red} 10 </style> 11 12 </head> 13 14 <body> 15 <p lang="no">文字<q lang="no">段落中的引用的文字</q>文字</p> 16 </body> 17 </html>
效果和上面的一样,当然IE9没戏。
那么我们是不是可以使用得更加高级一些呢?比如下面这样:
1 <html lang="zh"> 2 <head> 3 <title> 语言伪类示例 </title> 4 <style type="text/css"> 5 *[lang|="zh"]{background-color:red} 6 *[lang|="en"]{background-color:blue} 7 </style> 8 9 </head> 10 11 <body> 12 <div lang="en"> 13 <p>文字<q lang="zh-cn">段落中的引用的文字</q>文字</p> 14 </div> 15 </body> 16 </html>
这个例子要复杂一些,大家可以在火狐浏览器里观看效果。我先将网页语言设置为“zh”,默认地,它的子元素会继承它的属性,整个页面呈现出red背景色,而页面内有一个div有自己的语言,会呈现出设置的背景色,这个例子顺便复习了属性选择器。
:first-child伪类和:lang伪类是CSS2的新特性。
值得注意的是:在CSS2中,还新引入了:focus。大家可以自己看一下。
⑥伪元素。
1):first-line 伪元素。
"first-line" 伪元素用于向某个选择器中的文字的首行添加特殊样式。
我不做过多示例,不过有几点需要注意:
:first-line 伪元素仅能被用于块级元素。
下面的属性可以被应用到 first-line 伪元素。
- font 属性
- color 属性
- background 属性
- word-spacing
- letter-spacing
- text-decoration
- vertical-align
- text-transform
- line-height
- clear
2):first-letter 伪元素。
同上。
3):before和:after。
用于在某个元素之前或之后插入某些内容。如W3CSchool的举例:
1 h1:after 2 { 3 content: url(beep.wav) 4 }
1 h1:before 2 { 3 content: url(beep.wav) 4 }
以上例子将会在标题之前或之后播放音频。
:fisrt-line和:first-letter是CSS1就有,:before和:after是CSS2的新特性。
在CSS3中很多新的伪类被添加,也有很多选择器被添加新特性。他们是以下途图中所示:
我们在下一篇在进行探讨。
值得说明的是:我的IE9可能真的有问题……
2012-05-20 22:07:45