背景知识:我正在尝试实现一种布局,其中元素在一行上从左到右流动,然后在下一行从右到左流动,依此类推。 我在 CodePen 中模拟了一些东西,看看这里(它比我解释得更好!)
我已经使用 nth-child
实现了上述示例,但它是“硬编码”的,例如
HTML:
<ul>
<li>1</li>
<li>2</li>
...
<li>16</li>
</ul>
CSS:
li { float: left; }
li:nth-child(5),
li:nth-child(6),
li:nth-child(7),
li:nth-child(8) {
float: right;
}
现在,这可行,但它显然仅限于特定数量的元素(我在 CSS 中放入了多少!)。我知道我可以执行 :nth-child(4n)
来获取每四个元素,但我希望能够选择 和 接下来的 4 个元素。这几乎就像 nth-child(odd)
,但对于 4 个元素的组。
有没有办法以编程方式执行此操作?我看过调整数量查询 ( http://alistapart.com/article/quantity-queries-for-css ),但这似乎不是我想要的......
非常感谢任何帮助!!
最佳答案
是的,您可以使用一组 nth-child
选择器就像下面的代码片段一样,可以根据模式选择一组重复的元素。
需要注意的一件事是,选择每第 4 个元素及其之后的下 4 个元素相当于选择第 4 个元素之后的所有元素,因此我将样本限制为仅接下来的 2 个元素。
选择器说明(选择第 4、5、8、9 等元素等):
-
nth-child(4n+4)
- 选择第 4 (4*0 + 4)、第 8 (4*1 + 4)、第 12 (4*2 +4) 个元素 -
nth-child(4n+5)
- 选择第 5 (4*0 + 5)、第 9 (4*1 + 5)、第 13 (4*2 + 5) 个元素。
从解释中可以看出,该系列从第4个元素开始,并从那时开始重复。如果您需要从第一个元素(例如第一个、第二个、第五个、第六个等)开始的系列,那么您可以使用选择器组作为 div:nth-child(4n+1), div:nth-child(4n+2)
.
div:nth-child(4n+4), div:nth-child(4n+5){
color: red;
}
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
<div>14</div>
<div>15</div>
<div>16</div>
选择器说明(选择第4、5、12、13个元素等):
-
nth-child(8n+4)
- 选择第 4 (8*0 + 4)、第 12 (8*1 + 4)、第 20 (8*2 +4) 个元素 -
nth-child(8n+5)
- 选择第 5 (8*0 + 5)、第 13 (8*1 + 5)、第 21 (8*2 + 5) 个元素。
从解释中可以看出,该系列从第4个元素开始,并从那时开始重复。如果您需要从第一个元素(例如第一个、第二个、第五个、第六个等)开始的系列,那么您可以使用选择器组作为 div:nth-child(4n+1), div:nth-child(4n+2)
.
div:nth-child(8n+4), div:nth-child(8n+5){
color: red;
}
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
<div>14</div>
<div>15</div>
<div>16</div>
<div>17</div>
<div>18</div>
<div>19</div>
<div>20</div>
<div>21</div>
<div>22</div>
<div>23</div>
关于css - 可以使用 CSS :nth-child (or similar) to select batches of elements in HTML, 例如每隔 4 个节点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32474786/