选择CSS中的每N个元素


242

例如,是否可以选择一组元素中的每个第四个元素?

例如:我有16个<div>元素...我可以写类似的东西。

div:nth-child(4),
div:nth-child(8),
div:nth-child(12),
div:nth-child(16)

有一个更好的方法吗?


1
希望每个人都还活着,只是为新手而不是新手,甚至每隔n个元素和更棘手的事情选择一个数量:nthmaster.com
gengns

Answers:


419

顾名思义,它允许您使用除常数以外的变量构造算术表达式。您可以执行加法(),减法()和系数乘法(其中是整数,包括正数,负数和零)。:nth-child()n+-ana

这是重写上面的选择器列表的方法:

div:nth-child(4n)

有关这些算术表达式如何工作的解释,请参阅我对这个问题的回答以及规范

请注意,此答案假定同一父元素内的所有子元素都具有相同的元素类型div。如果您还有其他不同类型的元素,例如h1p,则需要使用:nth-of-type()代替,:nth-child()以确保仅对div元素进行计数:

<body>
  <h1></h1>
  <div>1</div>  <div>2</div>
  <div>3</div>  <div>4</div>
  <h2></h2>
  <div>5</div>  <div>6</div>
  <div>7</div>  <div>8</div>
  <h2></h2>
  <div>9</div>  <div>10</div>
  <div>11</div> <div>12</div>
  <h2></h2>
  <div>13</div> <div>14</div>
  <div>15</div> <div>16</div>
</body>

对于其他所有内容(类,属性或这些的任何组合),如果要查找与任意选择器匹配的第n个子代,则无法使用纯CSS选择器来完成此操作。请参阅我对这个问题的回答


顺便说一下,关于,4n和4n + 4之间没有太大区别:nth-child()。如果使用该n变量,它将从0开始计数。这是每个选择器都将匹配的内容:

:nth-child(4n)

4(0) = 0
4(1) = 4
4(2) = 8
4(3) = 12
4(4) = 16
...

:nth-child(4n+4)

4(0) + 4 = 0  + 4 = 4
4(1) + 4 = 4  + 4 = 8
4(2) + 4 = 8  + 4 = 12
4(3) + 4 = 12 + 4 = 16
4(4) + 4 = 16 + 4 = 20
...

如您所见,两个选择器都将匹配与上面相同的元素。在这种情况下,没有区别。


我只是想补充一下,如果您只执行第四项操作,则需要执行tr td:nth-child(4)请注意,括号中没有任何n
WORMSS,2014年

2
请注意:这仅适用于元素选择(DIV,TD,IMG等),而不是类选择像。这
SLIQ

1
我创建了一个交互式演示以直观地解释nth-child(n)的工作原理:xengravity.com/demo/nth-child。我发现w3规范对于允许使用语法的初学者而言尤其令人畏惧;特别是他们的“词法扫描器”部分。
xengravity 2015年

1
@xengravity:感谢您的分享!我同意,该语法不是针对初学者的,因为它是针对实现者而非作者编写的。该规范确实提供了许多有关如何编写语法的示例,但没有附带的视觉效果。
BoltClock

1
:我也有类似的工具,与第n个孩子表达玩salman-w.googlecode.com/svn/trunk/css/...
萨尔曼一个



10

您需要nth-child伪类的正确参数。

  • 该参数的形式应an + b为匹配从b开始的每个 a 孩子。

  • 这两个ab是可选的整数,既可以是零或负数。

    • 如果a为零,则没有“每次孩子”的条款。
    • 如果a为负,则从开始向后进行匹配b
    • 如果b为零或负,则可以使用正写等效表达式,b例如4n+0与相同4n+4。同样4n-1是相同4n+3

例子:

选择每个第4个孩子(4、8、12,...)

li:nth-child(4n) {
  background: yellow;
}
<ol>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
</ol>

从1(1、5、9,...)开始选择每个第4个孩子

从4(3和4、7和8、11和12 ...)组中选择每个第3和第4个孩子

选择前4个项目(4、3、2、1)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.