我正在尝试制作一个简单的CSS居中网格布局。我知道当我使用justify-items: center时,网格容器中的项应该水平对齐,但是当我像grid-template-columns: repeat(3, 100px)这样以像素为单位指定列宽时,整个网格恢复正常。那么,有没有什么方法可以使网格项居中,同时以像素为单位指定列宽呢?下面是我的示例:第一个
justify-items: center
grid-template-columns: repeat(3, 100px)
b91juud31#
将justify-items更改为justify-content,它应该可以工作。第一个
justify-items
justify-content
6g8kf2rb2#
简短回答:你要的是justify-content而不是justify-items
第一个
详细答案:
网格项目与其所在的空间之间存在差异。当你定义一个网格时,你只是定义了网格的行/列,称为tracks,而不是实际定义每个元素的位置等。DOM元素只遵循网格的流动并相应地放置,我们可以使用grid-columngrid-row之类的属性来更改这些元素你可以这样看:
tracks
grid-column
grid-row
如您所见,有The Grid container、The Grid、The Columns、The Rows和The Grid items。Grid项位于两者的交集中,称为The Grid Area(这使得css grid在某些方面优于flexbox)justify-items对齐该区域内的网格项。所以grid-template-columns: repeat(3, 1fr);,这意味着3列的宽度是网格的宽度,在它们之间平均分割。
The Grid container
The Grid
The Columns
The Rows
The Grid items
The Grid Area
grid-template-columns: repeat(3, 1fr);
演示版
第一次正如你所看到的,网格列比网格项100px宽,这意味着有空间来居中,所以justify-items: center;将它们居中。这就是为什么看起来网格是居中的,但这并不是为什么改变为grid-template-columns: repeat(3, 100px);会破坏它的原因。对于grid-template-columns: repeat(3, 100px);
100px
justify-items: center;
grid-template-columns: repeat(3, 100px);
第一个正如您所看到的,列宽度等于网格项的宽度,因此它们都可以紧密地容纳在列中,而网格仍然是空的。
jhkqcmku3#
您可以尝试在这些网格元素的顶部添加flex属性,然后使用justify-content:center;将其居中
justify-content:center;
<div class="centering_items"> <div class="container"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> </div>
.centering_items { display: flex; justify-content: center; } .container { background-color: #aa96da; display: grid; grid-gap: 20px; grid-template-rows: repeat(3, 1fr); /*Only if I change this 100px to '1fr' the justify-items will work */ grid-template-columns: repeat(3, 100px); } .item { width: 100px; height: 100px; background-color: green; }
3条答案
按热度按时间b91juud31#
将
justify-items
更改为justify-content
,它应该可以工作。第一个
6g8kf2rb2#
简短回答:你要的是
justify-content
而不是justify-items
第一个
详细答案:
网格项目与其所在的空间之间存在差异。
当你定义一个网格时,你只是定义了网格的行/列,称为
tracks
,而不是实际定义每个元素的位置等。DOM元素只遵循网格的流动并相应地放置,我们可以使用
grid-column
grid-row
之类的属性来更改这些元素你可以这样看:
如您所见,有
The Grid container
、The Grid
、The Columns
、The Rows
和The Grid items
。Grid项位于两者的交集中,称为
The Grid Area
(这使得css grid在某些方面优于flexbox)justify-items
对齐该区域内的网格项。所以
grid-template-columns: repeat(3, 1fr);
,这意味着3列的宽度是网格的宽度,在它们之间平均分割。演示版
第一次
正如你所看到的,网格列比网格项
100px
宽,这意味着有空间来居中,所以justify-items: center;
将它们居中。这就是为什么看起来网格是居中的,但这并不是为什么改变为
grid-template-columns: repeat(3, 100px);
会破坏它的原因。对于
grid-template-columns: repeat(3, 100px);
演示版
第一个
正如您所看到的,列宽度等于网格项的宽度,因此它们都可以紧密地容纳在列中,而网格仍然是空的。
jhkqcmku3#
您可以尝试在这些网格元素的顶部添加flex属性,然后使用
justify-content:center;
将其居中