理解nth-child和nth-of-type

css中的nth-child和nth-of-type用于选择父元素下第n个子元素,但是对于他们的理解却不够深入,所以通过这个下面的示例详细展示一下他们的效果。

一、准备页面

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 7     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 8     <title>Document</title>
 9     <style>
10         .node,
11         .status {
12             width: 50px;
13             height: 20px;
14             line-height: 20px;
15             text-align: center;
16             margin-left: 20px;
17             margin-top: 5px;
18         }
19     </style>
20 </head>
21 <body>
22     <div class="container">
23         <div class="node">1 d-1</div>
24         <p class="status">2 p-a</p>
25         <div class="node">3 d-2</div>
26         <div class="node">4 d-3</div>
27         <p class="status">5 p-b</p>
28         <p class="status">6 p-c</p>
29         <div class="node">7 d-4</div>
30         <div class="node">8 d-5</div>
31     </div>
32 </body>
33 </html>

本次使用的都是.container下的元素,div和p统一编号为1-8,div元素有类node,会再显示d-1、d-2...文字,同样p元素有类status,会再显示p-1、p-2...文字。

页面初始显示如下图:

二、nth-child

2.1选择容器下的第二个子元素

添加如下样式:

第二个子元素被选中:

  

2.2选择容器下的第六个子元素

添加如下样式(说明每一种情况下,除基础样式外只有该部分的样式):

 

第六个子元素被选中:

 

通过2.1和2.2知道nth-child选择元素时不区分元素的标签类型,统一排序选择对应序号的元素。

 2.3选择第一个和最后一个元素的特殊选择器

 

 2.4倒序选择器,用法与nth-child一样,从后向前排序。

 

 2.5可以给伪类前加标签限定

如下是选择容器下的第一个且是div的子元素:

第一个子元素是div元素,所以被选中:

 

如下是选择容器下的第一个且是p的子元素:

 

第一个子元素是div元素,所以没有元素被选中:

 

 2.6可以给伪类前加类名限定

添加node类进行限制选中的结果:

第二、第五个子元素的类是status,所以没有被选中;第七个子元素的类是node,所以被选中:

 

添加status类进行限制选中的结果:

 

第六个子元素的类是status,所以被选中:

 

2.7参数n的特殊用法

n的取值0,1,2,3,4,5,6.....,所以2n+1命中的是第一、第三、第五、第七位

 

所以2n命中的是第二、第四、第六、第八位。

这是常见的奇数位与偶数位的选择,可以使用odd与even参数

 

 

 另外一些常见的用法:

 选择第一、第四、第七...

 n+4选择第四个之后的子元素

 

-n + 6选择前六个子元素

 

高级用法:

选择第四到第六个元素

 

  三、nth-of-type

3.1选择容器中每一类标签的第三个子元素

如图,第三个div和p元素均被选中:

 

 3.2可以给伪类前加类名限定

可以给伪类前加类名限定

有status类的子元素中第三个被选中:

 

对于倒序的选择也是一样的:

有status类的子元素中倒数第三个被选中:

 

说明一下,这个伪类选择器都是从父元素下开始查找的,所以有类名或标签名限定时可以省略父级选择器。如本例中这样写也是可以的

 3.3另外两个特殊的选择每一种标签(类)的第一个子元素和最后一个子元素

 

四、总结

nth-child是从父元素下不分类型统一排序,先选中第n个子元素,再看看是不是对应的类(或标签);

nth-of-type从父元素下先按照类名(或标签)分别排序,再选择每一排序中的第n个子元素。

原文地址:https://www.cnblogs.com/jyughynj/p/15509229.html