使用 css 网格区域时是否可以将单元格自动放置在下一行?
Is it possible to place cells automatically on the next row while using css grid areas?
我正在为一个新项目使用 css 网格,我遇到了一个“问题”。我已经阅读了文档,但也许我遗漏了什么。
现状
我创建了一个包含两列的 css 网格。左栏是“主”栏,右栏是“副”栏。如果我将 div 交替放置,每个单元格将自动放置到下一行。这很好用:
.grid {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 10px;
}
.grid__cell {
height: 50px;
}
.main {
background: blue;
}
.side {
background: red;
}
<div class="grid">
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
</div>
目标
现在我想为两列创建模板区域。这样更容易将某个单元格放在右列中,并且 html 中 div 的顺序不再重要。问题是当我使用模板区域时,所有单元格都将从第一行开始:
.grid {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 10px;
grid-template-areas: "main side";
}
.grid__cell {
height: 50px;
}
.main {
grid-area: main;
background: blue;
}
.side {
grid-area: side;
background: red;
}
<div class="grid">
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
</div>
我知道我可以使用 grid-row
将单元格放置到特定行,但这不是理想的情况。如果单元格将自动放置到右列的下一行,那就太好了。我是不是遗漏了什么或者这是不可能的?
不要为此使用 grid-area
,请使用 grid-column
进行自动流放置。
如果碰巧看到一些漏洞,请查看 https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow (keyword:dense)
.grid {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 10px;
}
.grid__cell {
display: flex;
align-items: center;
justify-content: center;
color: white;
min-height: 50px;
}
.main {
grid-column: 1;
background: blue;
}
.side {
grid-column: 2;
background: red;
}
<div class="grid">
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
</div>
我正在为一个新项目使用 css 网格,我遇到了一个“问题”。我已经阅读了文档,但也许我遗漏了什么。
现状
我创建了一个包含两列的 css 网格。左栏是“主”栏,右栏是“副”栏。如果我将 div 交替放置,每个单元格将自动放置到下一行。这很好用:
.grid {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 10px;
}
.grid__cell {
height: 50px;
}
.main {
background: blue;
}
.side {
background: red;
}
<div class="grid">
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
</div>
目标
现在我想为两列创建模板区域。这样更容易将某个单元格放在右列中,并且 html 中 div 的顺序不再重要。问题是当我使用模板区域时,所有单元格都将从第一行开始:
.grid {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 10px;
grid-template-areas: "main side";
}
.grid__cell {
height: 50px;
}
.main {
grid-area: main;
background: blue;
}
.side {
grid-area: side;
background: red;
}
<div class="grid">
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
</div>
我知道我可以使用 grid-row
将单元格放置到特定行,但这不是理想的情况。如果单元格将自动放置到右列的下一行,那就太好了。我是不是遗漏了什么或者这是不可能的?
不要为此使用 grid-area
,请使用 grid-column
进行自动流放置。
如果碰巧看到一些漏洞,请查看 https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow (keyword:dense)
.grid {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 10px;
}
.grid__cell {
display: flex;
align-items: center;
justify-content: center;
color: white;
min-height: 50px;
}
.main {
grid-column: 1;
background: blue;
}
.side {
grid-column: 2;
background: red;
}
<div class="grid">
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
<div class="grid__cell main">
main
</div>
<div class="grid__cell side">
side
</div>
</div>