【发布时间】:2018-04-12 21:25:01
【问题描述】:
假设我们有一个包含 7 个项目的新闻条目列表。
我用 CSS Grid 创建了一个模式,它应该在 6 个项目后重复。
@supports (display: grid)
{
.list
{
display: grid;
grid-gap: 25px;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: auto;
grid-template-areas:
"bigLeft bigLeft right1 right2"
"bigLeft bigLeft bigRight bigRight"
"left1 left2 bigRight bigRight";
}
.item:nth-of-type(6n+1)
{
grid-area: bigLeft;
}
.item:nth-of-type(6n+2)
{
grid-area: right1;
}
.item:nth-of-type(6n+3)
{
grid-area: right2;
}
.item:nth-of-type(6n+4)
{
grid-area: left1;
}
.item:nth-of-type(6n+5)
{
grid-area: left2;
}
.item:nth-of-type(6n+6)
{
grid-area: bigRight;
}
}
想要的grid-template-areas 模式:
现在我希望这种模式重复并重复添加到列表中的更多项目。 但是HERE 你可以看到,一旦添加了第 7 项,模式就不会继续而是被替换。
我也尝试过使用未命名的区域
.item:nth-of-type(6n+1) {
grid-column: 1 / 3;
grid-row: 1 / 3;
}
.item:nth-of-type(6n+2) {
grid-column: 3 / 4;
grid-row: 1 / 2;
}
.item:nth-of-type(6n+3) {
grid-column: 4 / 5;
grid-row: 1 / 2;
}
.item:nth-of-type(6n+4) {
grid-column: 1 / 2;
grid-row: 3 / 4;
}
.item:nth-of-type(6n+5) {
grid-column: 2 / 3;
grid-row: 3 / 4;
}
.item:nth-of-type(6n+6) {
grid-column: 3 / 5;
grid-row: 2 / 4;
}
但结果相同...
我在规范中找不到任何解决方案来完成“可重复的网格模板区域”
你们中有人有想法吗?
【问题讨论】:
-
我不相信你可以用纯 CSS 重复
grid-template-areas模式。您需要使用脚本来更改规则,以便为 #6 之后的项目创建新的网格区域名称和空间。 -
您是否考虑过重复网格本身而不是重复网格项的模式?换句话说,第 7 项将开始一个新的 6 项网格。
-
这是我的意思的草稿:codepen.io/anon/pen/qVdpxy?editors=1100
-
@Michael_B 感谢您的回答。在我看来,这两种可能性都不是很干净,我认为 css 网格应该能够覆盖类似的东西,也许只是没有人想出它,我在规范中没有读过类似的东西,甚至在 CSS 网格级别中也没有2.