CSS选择器(中)——高级选择器续

it2022-05-13  59

  本篇随笔将紧接着上一篇随笔内容,继续讨论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-spacingletter-spacingtext-decorationvertical-aligntext-transformline-heightclear

  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

转载于:https://www.cnblogs.com/Johness/archive/2012/05/20/2505632.html


最新回复(0)