我必须放置7个div
(图像)在两行中,3个在第一行,4个在第二行。顶部3个div
应该居中,底部4个可以占据所有空间。
我是这么做的:
.content {
display: grid;
grid-gap: 10px;
grid-template-columns: 1fr repeat(3, 170px) 1fr;
grid-template-areas: ". item1 item2 item3 ."
"item4 item5 item6 item7";
grid-template-rows: 1fr 1fr;
}
.content .box {
width: 170px;
height: 170px;
border: solid 1px #000;
}
.content.box:nth-child(1) {
grid-area: box1;
}
.content.box:nth-child(2) {
grid-area: box2;
}
.content.box:nth-child(3) {
grid-area: box3;
}
.content.box:nth-child(4) {
grid-area: box4;
}
.content.box:nth-child(5) {
grid-area: box5;
}
.content.box:nth-child(6) {
grid-area: box6;
}
.content.box:nth-child(7) {
grid-area: box7;
}
<div class="content">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
<div class="box">6</div>
<div class="box">7</div>
</div>
3条答案
按热度按时间w8f9ii691#
一个网格,顾名思义,必须是网格的形状。这意味着列数必须是所有行的空间。
因此,浏览器不接受您的区域样式,因为它的第一行有5列,第二行有4列。
@kukkuz已经发布了一个更正这个问题的答案。在这里你有另一种可能性,在我的vies更适应你的要求。
无论如何,可能这种布局的最佳解决方案是使用flex(因为布局不是真正的网格)
crcmnpdw2#
CSS变更:删除所有CSS代码(在你的问题中),并将其替换为以下内容。使用
grid-template-columns: 1fr repeat(3, 170px) 1fr;
会使事情变得混乱,因为它不能表示两行框。使用grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
允许浏览器/系统确定特定行的实际位置。***而且***它允许每行做自己的事情。使用place-items: end center;
表示您希望所有内容居中,但您希望系统从末尾开始,然后居中。这样可以防止内容粘在最左边。注意:你不需要任何其他的CSS来达到你想要的效果。只需要.content
和.box
类。没有其他的。HTML变更:用(下面的)替换你的html。这将把盒子分成两行。我用
.content
Package 了每一行,这样它们就可以包含不同数量的盒子而没有问题。我希望我的解释能帮助你更好地理解CSS网格布局。:)
e5njpo683#
可以使用
grid-template-columns: repeat(12, 1fr)
创建 * 12柱网轴线 *:1.将第一行的 * 列跨度 * 调整为4,第二行调整为3。
1.使用
justify-items: center
将容器 * 对齐 * 到中心,以获得中心对齐。1.现在您可以 * 调整**跨距 * 或使用
justify-self
作为所需布局。请看下面的演示:
一个二个一个一个