:nth-of-type()伪类选择器

130 阅读2分钟

定义: nth-of-type(N) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素.N可以是个数字,可以是个表达式,亦或者odd代表奇数even代表偶数.

注意特定类型,比如下面代码

image.png

代码中的css看似选择了类名为.left的奇数元素,按道理“左边”应该隔一个为红色,其实不然,最终他是这样的

image.png

他看似把所有的.left元素选中了,我写的:nth-of-type(odd)选择奇数元素没有生效。其实这个选择器是把他相同的兄弟元素排列进行筛选。那么结果就是,我使用了.left类名进行选择,而我的.left是一个p标签,根据相同的兄弟元素进行排列,就有了类名为.right的p标签也会选中。

再看这个是为什么

image.png

我想选中类名为.right的奇数元素,结果是任何元素没有被选中,其实是这样的。根据相同兄弟元素进行排列,他会把.left和.right的p元素进行排列,我使用的odd是选择奇数元素,那么第一个“左边”以及第二个“左边”......理应该被选择,但是!!他的类名为.left,而我们使用的是.right,所以没有任何元素被选中。

根据上面说的,下面个例子中.left:nth-of-type(even)没有生效的原因就好理解了

image.png

我看了网上大部分都是说的下面这种情况

image.png demo元素中分为两个不同的元素,一个p标签一个div标签。类名也区分开了,一个.left对应p标签,一个.right对应div标签。

为啥我突然研究了这个伪类选择器呢,因为有下面这个场景,对antd库的样式进行改造

image.png

这猛一看是选中.left的偶数元素和奇数元素分别添加不同的样式,问题是怎么选中偶数元素和奇数元素,使用odd和even的话,你想想上面说的 相同兄弟元素排列。他们都是li标签哦,肯定不行的~~ 具体怎么实现需要用到表达式

image.png

总结一句话,当相邻兄弟标签相同&&只要不是根据标签名进行选择时,注意他会把相邻的相同兄弟元素进行排列筛选

以上内容纯属个人理解,如有错误请指正。