【发布时间】:2019-08-19 06:14:25
【问题描述】:
我有一个响应式网格布局。根据窗口宽度,可以有任意数量的列。
我正在尝试使网格具有方格图案,因此我使用 odd 和 even 选择器为网格单元格着色。
但它只在列数为奇数时有效。当列数为偶数时,变为条纹图案。
是否有 CSS 属性/选择器来解决这个问题,或者有更好的方法来解决这个问题?
这是我的项目的简化代码,显示了问题:
.grid {
display: grid;
counter-reset: spans;
grid-template-columns: repeat(var(--cols), 1fr);
grid-gap: 1px;
}
.grid > * {
counter-increment: spans;
text-align: center;
padding: 10px 0;
color: #fff;
}
.grid > *::after {
content: counter(spans);
}
/* Coloring */
.grid > *:nth-child(odd) {
background-color: #789;
}
.grid > *:not(:nth-child(odd)) {
background-color: #567;
}
<h2>Works when columns are odd</h2>
<div class="grid" style="--cols: 5;">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
<h2>Doesn't work while even</h2>
<div class="grid" style="--cols: 4;">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
【问题讨论】:
-
如果没有 JavaScript,这将是不可能的。你每秒都在着色
span并且想知道你这样做了。 -
那么“偶数”变体应该是什么样的?如果它应该是方格的,那么必须有 2 个相互连接的浅灰色单元格,所以每一行都必须以不同的模式开始?
-
这是一个简单的数学,我猜用 evens 是不可能的
-
@empiric 似乎是这样,偶数变体应该像
0101, 1010, 0101, 1010,每4个和第5个项目具有相同的颜色。这就是为什么它很复杂,不能简单地用odd和even解决。希望有一个选择器来做这样的工作。 -
@AbhishekPandey 如果您有兴趣,我添加了一个 idea 解决方案