css - 可以使用 CSS :nth-child (or similar) to select batches of elements in HTML, 例如每隔 4 个节点吗?

标签 css css-selectors

背景知识:我正在尝试实现一种布局,其中元素在一行上从左到右流动,然后在下一行从右到左流动,依此类推。 我在 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/

相关文章:

jQuery 对每个元素的更改函数

html - 仅将居中图像作为链接,而不是整个父 div

css - 如何在 Angular 中使用 FontAwesome 作为字体系列

CSS - 当一个元素都属于不同的 div 时,通过将鼠标悬停在另一个元素上来影响它们

javascript - Protractor/Js - 无法获得准确的表格行数和列数

html - 如果<code>的父级不是<pre>,如何设置样式?

css - 具有背景图像的元素的不透明度,例如 IE7-IE8 中的输入字段

html - 尝试使用倾斜的 div 为背景图像提供两种不同的色调

jQuery $ ("#field") 为空?

CSS 选择器 : Is there a way to select surrounding elements?