选择潜在无限子元素列表中的第n个子元素

4

我有一个表格布局 - 每行4列。我正在使用CSS网格布局。

假设可能有无限数量的项目。

<div class="grid">
    <div class="item"></div>
    <div class="item"></div>
    <!-- ... -->
</div>

如果项目数量可能是无限的,我该如何选择每行的两个中间项目。例如,对于前三行,我需要选择:nth-child(2)nth-child(3)nth-child(6)nth-child(7)nth-child(10)nth-child(11)。如果硬编码样式到一个特定数字上,假设没有无限数量,则可以解决问题。但是,如果有一种动态实现的方法,我更倾向于使用它。请参考下图进行操作:enter image description here
3个回答

6

您可以使用 .item:nth-child(4n+2) 来选择每个四个子元素中的第二个子元素,并使用 .item:nth-child(4n+3) 来选择每个四个子元素中的第三个子元素。以下是示例:

.item:nth-child(4n+2),
.item:nth-child(4n+3) {
  color: red;
  background-color: yellow;
}
<div class="grid">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
    <div class="item">7</div>
    <div class="item">8</div>
    <div class="item">9</div>
    <div class="item">10</div>
    <div class="item">11</div>
    <div class="item">12</div>
</div>


2
使用nth-child(xN+y)语法...

.container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 25px;
}

.box {
  padding: 1em;
  border: 1px solid grey;
}

.container :nth-child(4n+2) {
  background: red;
}

.container :nth-child(4n+3) {
  background: blue;
}
<div class="container">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>


1
以下是一个JS解决方案:

var items = document.getElementsByClassName('item');
for (i = 0; i < items.length; i++) {
  if(i % 2 === 0 && i % 4 === 0) {
    var el1 = items[i + 1];
    var el2 = items[i + 2];
    if (el1)
      el1.style.backgroundColor = "red";
    if (el2)
      el2.style.backgroundColor = "red";
  }
}
.grid {
  display:grid;
  grid-template-columns: 100px 100px 100px 100px;
}

.item {
  border:1px solid black;
  padding:20px;
  margin:4px;
}
<div class="grid">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接