:nth-child() | CSS属性参考

965次阅读
没有评论

共计 1682 个字符,预计需要花费 5 分钟才能阅读完成。

CSS :nth-child()伪类选择器基于索引来匹配父元素中的子元素。

:nth-child()伪类选择器的参数在 W3C 官方表示为an+b。an+ b 为一个公式. a,b 为常量, n 的取值是从 0 开始的整数。

如果将参数进行拆分,可以分为以下 5 种情况:

1、提供一个正数作为参数。

你可以为 :nth-child() 提供一个正数作为参数。它表示要选择父元素中索引为该数值的子元素(此时的索引值从 1 开始)。例如:

li:nth-child(2){background:red; /* 将第二个 li 元素的背景颜色设置为红色 */}

2、关键字表示法。

你可以使用关键字 oddeven来选择元素,even表示选择偶数项的子元素,odd表示选择奇数项的子元素。例如

table tr:nth-child(even){background:#ccc; /* 将表格中所有的偶数行的背景颜色设置为灰色 */}

3、倍数表示法。

:nth-child(an)

这种方法匹配所有倍数为 a 的元素。其中参数 an 中的字母 n 不可缺省,它是倍数写法的标志,如 2n、3n。例如:

li:nth-child(3n){background:orange; /* 把第 3、第 6、第 9、…、所有 3 的倍数的 LI 的背景设为橙色 */}

4、倍数分组匹配。

:nth-child(an+b) 
/* 或者 */
:nth-child(an-b)

先对元素进行分组,每组有 a 个,b 为组内成员的序号,其中字母 n 和加号 + 不可缺省,位置不可调换,这是该写法的标志,其中 a,b 均为正整数或 0。如 3n+1、5n+1。但加号可以变为负号,此时匹配组内的第 a - b 个。例如:

/* 浏览器解析时,n 依次等于 0、1、2...*/
/* 所以(3n+1) 就等于 1、4、7...*/
li:nth-child(3n+1){background:blue; /* 匹配所以为 1、4、7... 的 li 元素 */}

/* 浏览器解析时,n 依次等于 0、1、2...*/
/* 所以(3n+5) 就等于 1、8、11...*/
li:nth-child(3n+5){background:red; /* 匹配所以为 1、8、11... 的 li 元素 */}

5、反向倍数分组匹配。

:nth-child(-an+b)

这种表示法的一负一正符号均不可缺省,否则无意义。这时与 :nth-child(an+1) 相似,都是匹配第 1 个,但不同的是它是倒着算的,从第 b 个开始往回算,所以它所匹配的最多也不会超过 b 个。例如:

/* 浏览器解析时,n 依次等于 0、1、2...*/
/* 所以(-3n+7) 就等于 7、4、1*/
li:nth-child(-3n+5){background:blue; /* 匹配第 7、第 7 和第 1 个 li 元素 */}
示例代码

下面的代码为表格创建斑马线效果:

tr:nth-child(even) {background-color: #eee;}

下面都是有效的 :nth-child() 取值:

li:nth-child(-n+1) {}

p:nth-child(odd) {}

tr:nth-child(2n) {} /* 2n 等效于 "even" */

article:nth-child(2n+1) {} /* 2n+1 等效于 "odd" */

li:nth-child(4n+1) {}
在线演示

下面的例子使用 li:nth-child(2n+1) 来匹配 li 元素,因此,第 1、3、5、7、9 项 li 元素的背景颜色会被修改。

  • List Item 1
  • List Item 2
  • List Item 3
  • List Item 4
  • List Item 5
  • List Item 6
  • List Item 7
  • List Item 8
  • List Item 9
  • List Item 10
浏览器支持

所有的现代浏览器都支持 :nth-child() 伪类选择器,包括:Chrome, Firefox, Safari, Opera9.5+, Internet Explorer 9+ 以及 Android 和 iOS。

相关阅读
正文完
 0