Home / Blog / it

CSS选择器之nth-child详解

Author: Vic.Wang 2015/11/18 Tags:csscss3selectornth-child伪类伪类选择器css选择器高级选择器

语法:E:nth-child(n){}

说明:nth-child() 是CSS3的一个伪类选择器,匹配父元素的第n个子元素E,假设该子元素不是E,则选择符无效。

效果实例:

一、数字序号写法

        E:nth-child(5){}   //数值
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

E表示标签,div, li, span等,下同。

注意:数字的序号是从1开始的哦,不像很多编程语言中索引是0开始的,参数是必须大于0的整数。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二、关键字写法

        E:nth-child(even){}  //偶数
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
        E:nth-child(odd){}  //奇数
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

关键字写法中,只有 even 和 odd 两种,匹配序号为偶数与奇数的元素。

三、倍数写法:

        E:nth-child(2n){}   //2倍
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
        E:nth-child(3n){}   //3倍
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3n 4n 5n

n是固定要写的,n从0开始遍历,直到找到所有匹配元素,n前加数值,加2就是2倍,可以任意的,1n, 2n, 3n, 4n, 5n... 依次类推。一般用到的就2n、3n比较多,再大也没什么意义了。

四、倍数分组写法:

倍数可以视为一组,比如3n,可以理解为3个li为一组,然后相加相减都是在这一组里面筛选的,相加、相减的值都是正整数的。n和+号n和-号是必须写的。

        E:nth-child(2n+1){}   //倍数分组+值
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2n+1 2n+2 2n+3

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3n+1 3n+2 3n+3

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

4n+1 4n+2 4n+3

这种写法简单理解就是“隔几取几”,比如 3n+1 表示“隔二取一”,其余类推。

        E:nth-child(2n-1){}   //倍数分组-值
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2n-1 2n-2 3n-2

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3n-1 4n-1 4n-2

五、反向倍数分组写法:

        E:nth-child(-n+2){}   //倍数负值
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

-n+2 -n+3 -n+4

反向倍数是从最后一个开始往回算的。可以选取序号小于某个值的元素,比如 -n+2 可以选取前2个元素。

其他一些效果:

        E:nth-child(n+3){}   //选取序号大于3的元素 也就是除前2个元素外的元素
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

能有这篇文章,是因为聪聪问了我个问题,li隔行怎么弄,想了半天才想到将li6个一组,每组里面再减去相应的,试了下还真的可以,效果如下:

        li:nth-child(6n-5),li:nth-child(6n-4),li:nth-child(6n-3){}
                    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

通过上面的效果实例,可以发现不同写法出来的效果有些是一样的,比如:

E:nth-child(2n){}E:nth-child(even){}一样,

E:nth-child(2n+1){}E:nth-child(odd){}一样。

兼容方面,现代浏览器完全没问题,但IE浏览器仅支持IE9及以上哦,要想在低版本上使用,另外想办法吧,臣妾做不到呀o(>﹏<)o!

总结:nth-child选择的是子元素,如果只想选择同类的子元素,那应该使用nth-of-type选择器。nth-child 的同类选择器还有first-childlast-childonly-childnth-last-child