CSS 网格是否可以在行和列上自动布置 "staggered" 的项目?
Is a CSS grid with automatically laid out items that are "staggered" on rows and columns possible?
我正在尝试确定 CSS 网格是否可以自动布置在列和行级别上相互交错的项目。
很难准确描述我想要什么,所以这里有一个这样的网格的例子,假设这些项目的顺序是正确的(所以不一定按照我在HTML 目前):
.grid{
display: grid;
grid-template-columns: repeat(auto-fill, 100px);
grid-auto-rows: 100px;
column-gap: 20px;
row-gap: 20px;
justify-content: center;
}
.grid div{
background-color: gray;
display: flex;
justify-content: center;
align-items: center;
font-size: 30px;
color: white;
}
.grid-item-1{
grid-row-start: 1;
grid-row-end: 2;
grid-column-start: 1;
grid-column-end: 3;
}
.grid-item-2{
grid-row-start: 1;
grid-row-end: 3;
grid-column-start: 3;
grid-column-end: 4;
}
.grid-item-3{
grid-row-start: 2;
grid-row-end: 3;
grid-column-start: 2;
grid-column-end: 3;
}
.grid-item-4{
grid-row-start: 2;
grid-row-end: 4;
grid-column-start: 1;
grid-column-end: 2;
}
.grid-item-5{
grid-row-start: 3;
grid-row-end: 4;
grid-column-start: 2;
grid-column-end: 4;
}
<div class="grid">
<div class="grid-item-1">1</div>
<div class="grid-item-2">2</div>
<div class="grid-item-3">3</div>
<div class="grid-item-4">4</div>
<div class="grid-item-5">5</div>
</div>
我希望能够为项目提供像素高度和宽度,并让网格自动按照这种排列方式对它们进行布局,而无需对每个项目的网格区域进行硬编码。
我到处寻找解决方案,但无济于事。我只是想知道这是否可能,或者这样的布局是否仅适用于每个项目的硬编码网格区域。
您只需设置行数或列数
.grid{
display: grid;
grid-template-columns: repeat(3, 100px); /* only 3 here */
grid-auto-rows: 100px;
grid-auto-flow:dense; /* don't forget this */
column-gap: 20px;
row-gap: 20px;
justify-content: center;
}
.grid div{
background-color: gray;
display: flex;
justify-content: center;
align-items: center;
font-size: 30px;
color: white;
}
.grid-item-1,
.grid-item-5{
grid-row: span 2;
}
.grid-item-2,
.grid-item-4{
grid-column: span 2;
}
<div class="grid">
<div class="grid-item-1">1</div>
<div class="grid-item-2">2</div>
<div class="grid-item-3">3</div>
<div class="grid-item-4">4</div>
<div class="grid-item-5">5</div>
</div>
我正在尝试确定 CSS 网格是否可以自动布置在列和行级别上相互交错的项目。
很难准确描述我想要什么,所以这里有一个这样的网格的例子,假设这些项目的顺序是正确的(所以不一定按照我在HTML 目前):
.grid{
display: grid;
grid-template-columns: repeat(auto-fill, 100px);
grid-auto-rows: 100px;
column-gap: 20px;
row-gap: 20px;
justify-content: center;
}
.grid div{
background-color: gray;
display: flex;
justify-content: center;
align-items: center;
font-size: 30px;
color: white;
}
.grid-item-1{
grid-row-start: 1;
grid-row-end: 2;
grid-column-start: 1;
grid-column-end: 3;
}
.grid-item-2{
grid-row-start: 1;
grid-row-end: 3;
grid-column-start: 3;
grid-column-end: 4;
}
.grid-item-3{
grid-row-start: 2;
grid-row-end: 3;
grid-column-start: 2;
grid-column-end: 3;
}
.grid-item-4{
grid-row-start: 2;
grid-row-end: 4;
grid-column-start: 1;
grid-column-end: 2;
}
.grid-item-5{
grid-row-start: 3;
grid-row-end: 4;
grid-column-start: 2;
grid-column-end: 4;
}
<div class="grid">
<div class="grid-item-1">1</div>
<div class="grid-item-2">2</div>
<div class="grid-item-3">3</div>
<div class="grid-item-4">4</div>
<div class="grid-item-5">5</div>
</div>
我希望能够为项目提供像素高度和宽度,并让网格自动按照这种排列方式对它们进行布局,而无需对每个项目的网格区域进行硬编码。
我到处寻找解决方案,但无济于事。我只是想知道这是否可能,或者这样的布局是否仅适用于每个项目的硬编码网格区域。
您只需设置行数或列数
.grid{
display: grid;
grid-template-columns: repeat(3, 100px); /* only 3 here */
grid-auto-rows: 100px;
grid-auto-flow:dense; /* don't forget this */
column-gap: 20px;
row-gap: 20px;
justify-content: center;
}
.grid div{
background-color: gray;
display: flex;
justify-content: center;
align-items: center;
font-size: 30px;
color: white;
}
.grid-item-1,
.grid-item-5{
grid-row: span 2;
}
.grid-item-2,
.grid-item-4{
grid-column: span 2;
}
<div class="grid">
<div class="grid-item-1">1</div>
<div class="grid-item-2">2</div>
<div class="grid-item-3">3</div>
<div class="grid-item-4">4</div>
<div class="grid-item-5">5</div>
</div>