CSS表格中的表分条行

Cas*_*ass 3 html css css3 css-grid

我试图用基于CSS Grid的布局替换在Bootstrap中设置的数据和交互式组件的网格。

我能够复制网格,但是在使表格条带化等工作方面遇到了麻烦。据我对CSS Grid的了解,因为我知道会提前显示的列数而不是行数(动态生成)数据),我需要使用grid-template-columns: repeat(3, auto);,并且每个单元格都必须是包装div的直接子级。

我尝试使用nth-child获得所需的效果,但无法弄清楚哪个选择器可以让我定位动态范围的元素。

当行数未知时,是否有更好的方法使用CSS Grid设置网格布局?

是我到目前为止所拥有的东西,其中包括下面的所有代码。在我的真实项目中,行是动态生成的,现在有5列-尽管将来可能会更改。

.grid-table {
  display: grid;
  display: -ms-grid;
  grid-template-columns: repeat(3, auto);
  -ms-grid-template-columns: repeat(3, auto);
}

.grid-table :nth-child(-n+3) {
  background-color: red;
}
Run Code Online (Sandbox Code Playgroud)
<div class="grid-table">
  <span>Room Name</span>
  <span>Start Date</span>
  <span>End Date</span>

  <span>Room 100</span>
  <span>Tuesday</span>
  <span>Wednesday</span>

  <span>Room 200</span>
  <span>Tuesday</span>
  <span>Friday</span>

  <span>Room 200</span>
  <span>Tuesday</span>
  <span>Friday</span>

  <span>Room 200</span>
  <span>Tuesday</span>
  <span>Friday</span>
</div>
Run Code Online (Sandbox Code Playgroud)

小智 15

如今,您还可以使用带有 display:contents 的元素来包含单元格(我已按行或列对它们进行“分组”),并以这种方式将样式应用到单元格。

.r_container {
  display:grid;
  grid-template-columns: repeat(3, 1fr);
  width:200px;
  justify-content:center;
  align-items:center;
  font-family:sans-serif;
}

.r_group {
  display:contents;
}

.r_group:nth-of-type(2n) > .cell {
  background-color:dimgray;
}

.cell {
  justify-content:center;
  align-items:center;
  text-align:center;
  padding-top:0.5rem;
  padding-bottom:0.5rem;
}

.header > .cell {
  background-color:black;
  color:white;
  font-weight:500;
}
Run Code Online (Sandbox Code Playgroud)
<h1>Organized by Row</h1>
<div class="r_container">
  <div class="r_group header">
    <div class="cell">1</div>
    <div class="cell">2</div>
    <div class="cell">3</div>
  </div>
  <div class="r_group">
    <div class="cell">4</div>
    <div class="cell">5</div>
    <div class="cell">6</div>
  </div>
  <div class="r_group">
    <div class="cell">7</div>
    <div class="cell">8</div>
    <div class="cell">9</div>
  </div>
  <div class="r_group">
    <div class="cell">10</div>
    <div class="cell">11</div>
    <div class="cell">12</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。谢谢你让我发现 `display:contents` (4认同)

Mic*_*l_B 5

使用选择器以一列中的每隔一行为目标。

对于其他列,只需调整并重复。

.grid-table {
  display: grid;
  grid-template-columns: repeat(3, auto);
}

.grid-table > span:nth-child(-n+3) {
  background-color: red;
}

.grid-table > span:nth-child(6n+4),
.grid-table > span:nth-child(6n+5),
.grid-table > span:nth-child(6n+6) {
  background-color: lightgreen;
}
Run Code Online (Sandbox Code Playgroud)
<div class="grid-table">
  <span>Room Name</span>
  <span>Start Date</span>
  <span>End Date</span>
  <span>Room 100</span>
  <span>Tuesday</span>
  <span>Wednesday</span>
  <span>Room 200</span>
  <span>Tuesday</span>
  <span>Friday</span>
  <span>Room 200</span>
  <span>Tuesday</span>
  <span>Friday</span>
  <span>Room 200</span>
  <span>Tuesday</span>
  <span>Friday</span>
  <span>Room Name</span>
  <span>Start Date</span>
  <span>End Date</span>
  <span>Room 100</span>
  <span>Tuesday</span>
  <span>Wednesday</span>
  <span>Room 200</span>
  <span>Tuesday</span>
  <span>Friday</span>
  <span>Room 200</span>
  <span>Tuesday</span>
  <span>Friday</span>
  <span>Room 200</span>
  <span>Tuesday</span>
  <span>Friday</span>
</div>
Run Code Online (Sandbox Code Playgroud)