《HTML 5与CSS 3 权威指南(第4版·下册)》 —16.3.4 选择器nth-of-type和nth-last-of-

举报
华章计算机 发表于 2019/11/21 18:31:58 2019/11/21
【摘要】 本节书摘来自华章计算机《HTML 5与CSS 3 权威指南(第4版·下册)》一书中第16章,第16.3.4节,作者是陆凌牛。

16.3.4 选择器nth-of-type和nth-last-of-type

1.使用选择器nth-child和nth-last-child时会产生的问题

之前,我们介绍过将nth-child选择器与nth-last-child选择器用于某些元素时,会产生一些问题,这里我们首先来看一下究竟会产生什么问题。

在代码清单16-15中,我们给出一个HTML页面代码,在该页面中,存在一个div元素,在该div元素中,又给出几篇文章的标题与每篇文章的正文。

image.png

代码清单16-15 nth-of-type选择器与nth-last-of-type选择器使用示例的HTML页面


image.png

为了让第奇数篇文章的标题与第偶数篇文章的标题的背景色不一样,我们首先使用nth-child选择器来进行指定,指定第奇数篇文章的标题背景色为黄色,第偶数篇文章的标题背景色为浅蓝色,书写方法如下所示。

<style type="text/css">

h2:nth-child(odd){

    background-color: yellow;

}

h2:nth-child(even){

    background-color: skyblue;

}

</style>

将上面这段指定样式的代码添加到如代码清单16-15所示的HTML页面中,然后在浏览器中查看该页面的运行结果,如图16-19所示。

运行结果并没有如预期的那样,让第奇数篇文章的标题背景色为黄色,第偶数篇文章的标题背景色为浅蓝色,而是所有文章的标题都变成了黄色。

这个问题的产生原因在于:nth-child选择器在计算子元素是第奇数个元素还是第偶数个元素时,是连同父元素中的所有子元素一起计算的。

换句话说,“h2:nth-child(odd)”这行代码的含义,并不是指“针对div元素中第奇数个h2子元素来使用”,而是指“当div元素中的第奇数个子元素如果是h2子元素时使用”。

所以在上面这个示例中,因为h2元素与p元素相互交错,所有h2元素都处于奇数位置,所以所有h2元素的背景色都变成了黄色,而处于偶数位置的p元素,因为没有指定第偶数个位置的子元素的背景色,所以没有发生变化。

当父元素是列表时,因为列表中只可能有列表项目一种子元素,所以不会有问题,而当父元素是div时,因为div元素中包含多种子元素,所以出现了问题。

2. 使用选择器nth-of-type和nth-last-of-type

在CSS 3中,使用nth-of-type选择器与nth-last-of-type选择器来避免这类问题的发生。使用这两个选择器时,CSS 3在计算子元素是第奇数个子元素还是第偶数个子元素时,就只针对同类型的子元素进行计算了。这两个选择器的使用方法如下所示。

<style type="text/css">

h2:nth-of-type(odd){

    background-color: yellow;

}

h2:nth-of-type(even){

    background-color: skyblue;

}

</style>

把以上这段代码添加到代码清单16-15所示页面中,然后运行该页面,运行结果如图16-20所示。

            image.png

图16-19 在代码清单16-15所示的HTML页面中使用nth-child选择器       图16-20 nth-of-type选择器使用示例

 

另外,如果计算是奇数还是偶数时需要从下往上倒过来计算,则可以使用nth-last-of-type选择器来代替nth-last-child选择器,进行倒序计算。

nth-of-type选择器与nth-last-of-type选择器都是从CSS 3开始被提供,目前为止被Firefox、Safari、Google Chrome、Opera浏览器所支持,到IE 8为止,还没有获得IE浏览器的支持。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。