每 div 每行的交替颜色仅使用 css

Alternating colours per row per div using only css

我想知道仅使用 CSS:

是否可行
Black White
White Black
Black White
White Black

名称代表我想要的颜色背景。在此 jsfiddle 中,我对其进行了硬编码以准确显示我想要的内容,但 div 的数量将是动态的,所以我不知道会有多少。

如何实现?

你需要在这里使用:nth-child pseudo class


选项 1

第一个选项需要使用 2 select或

第一个处理网格左列中的 div 的样式。对这些进行编号得到 1,5,9,13,... 您可以表示为 4n-3 (4*1-3=1, 4*2-3=5, 4*3-3=9 , 4*4-3=13, ...)。如果您愿意,也可以表示为 4n+1

第二个 select 或者,为了处理右列中 div 的样式,更直接,因为它只是每四个 div,可以表示为 4n (4*1=4, 4*2=8, 4*3=12, 4*4=16, ...).

div{
  background:#fff;
  display:inline-block;
  height:100px;
  width:50%;
}
div:nth-child(4n-3),div:nth-child(4n){
  background:#000;
}
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>


选项 2

第二个选项使用单个 select 或使用 negation pseudo class :not().

实现相同的结果

选项一的反select离子可以用4n-14n-2(或4n+34n+2)表示,所以我们' ll select 所有 div,不包括匹配这些表达式的那些。

div{
    background:#fff;
    display:inline-block;
    height:100px;
    width:50%;
}
div:not(:nth-child(4n-1)):not(:nth-child(4n-2)){
    background:#000;
}
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>


进一步阅读 MDN


一边

我尽力想出一个适合这个的 CSS 表达式,但没能成功。如果有人成功了,请告诉我。我们要匹配的序列是:1,4,5,8,9,12,13,16,17,20,...,2n-(n%2)