我正在尝试构建一个div
个width
遵循特定模式的网格。在网格中,前3个div应该将width
作为33.333%
,接下来的2个应该width
作为50%
,接下来的3个width: 33.3333%
后跟width: 50%
下一个2与nth-child
等等(无限)。
CSS3 :nth-child
似乎非常适合这种情况,但无论我做什么,都会将其作为编号,因为我必须使用width
两次。这必须以巧妙的CSS方式解决?有没有一种方法可以根据这种模式分配width
,而无需为每个div
逐个手动设置-vvv
?
答案 0 :(得分:5)
从您的问题来看,似乎每5个元素中你需要前3个元素,width
为33.33%,接下来的两个元素为width
为50%。
因此,您应使用nth-child
乘数作为5n
。每组五个中的前三个元素将是5n-4
,5n-3
,5n-2
,而接下来的两个元素将是5n-1
和5n
。在nth-child
选择器中使用这些,如下面的代码段所示,可以实现您的目标。
div {
float: left;
height: 50px;
border: 1px solid;
}
div:nth-child(5n-4),
div:nth-child(5n-3),
div:nth-child(5n-2) {
width: 33.33%;
}
div:nth-child(5n-1),
div:nth-child(5n) {
width: 50%;
}
* {
box-sizing: border-box;
}
<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>
正如Abhitalks in comments所指出的,可以通过将width
之一设置为所有div
元素的默认值然后覆盖它来进一步简化。例如,我们可以将width: 33.33%
设置为所有div
元素的默认值,然后将其覆盖为width: 50%
,仅适用于5n
和5n-1
。
div {
float: left;
height: 50px;
width: 33.33%;
border: 1px solid;
}
div:nth-child(5n-1),
div:nth-child(5n) {
width: 50%;
}
* {
box-sizing: border-box;
}
<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>