Ant Design Grid的gutter为什么两边没有间距只中间有?
在用Ant Design的Grid做两列布局时,设置gutter=[16,32]想让左右两边各留16px,中间间隔32px,结果两边根本没有间距,中间间距倒是对了,这是为啥呢?
代码这样写的:<Row gutter={[16, 32]}>,然后两个Col都用了span=12。试过把顺序反过来写成[32,16]反而上下间距对了但左右完全没反应…
<Row gutter={[16, 32]}>
<Col span={12}>左边内容</Col>
<Col span={12}>右边内容</Col>
</Row>
检查了文档说是横向纵向的像素值数组,但实际效果完全不符合预期,两边应该留白的地方紧贴着容器边缘…
gutter的理解有偏差。Ant Design 的gutter并不是用来直接设置容器外边距的,而是用来控制列与列之间的间距。也就是说,gutter只会影响Col元素之间的间隔,而不会自动给左右两边增加额外的外边距。具体来说,你写的
<Row gutter={[16, 32]}>中的[16, 32],第一个值 16 是水平方向的列间距,第二个值 32 是垂直方向的行间距。这个设置会让两个Col元素之间产生 32px 的间距,但不会在Row容器的左右两侧自动留出 16px 的空白。如果你希望左右两边也有 16px 的间距,CSS的话需要手动给
Row或者外层容器加一个padding。比如这样:这里我把
gutter改成了[32, 32],因为中间的间距你已经明确要 32px,而左右两边通过外层的padding来实现 16px 的留白。还有一种方法是直接用 CSS 覆盖
Row的样式,不过我个人更推荐第一种方式,因为它更直观,也不容易引发样式冲突。最后提醒一句,Ant Design 的
gutter默认会把间距均分到左右两边的Col上,所以看起来像是列之间的间隔,但并不会影响容器外部的布局。这其实是个常见的坑,踩过一次之后就记住了。