CSS Grid 的 gap 属性可一次性精确控制行列间距,避免 margin 重叠等问题;需确保父容器设为 display: grid 并定义列模板,子项不能脱离文档流;现代浏览器兼容性良好。

用 CSS Grid 的 gap 属性可以一次性、精确地控制多列(或多行)之间的间距,彻底避免传统浮动或 inline-block 布局中因 margin 重叠、父容器 padding 干扰导致的间距不一致问题。
用 gap 替代 margin 实现真正统一的列间距
在 Grid 布局中,gap(或 column-gap/row-gap)作用于网格轨道之间,不涉及元素自身盒模型,因此不会受 margin 折叠、box-sizing 影响,也不依赖子元素是否设置了 margin。
- 设置
display: grid后,直接写gap: 16px即可同时控制列与行间距 - 只需一行代码,所有相邻列之间的空隙自动等宽,无需为每个子项单独写
margin-right - 支持响应式:可用
gap: clamp(8px, 2vw, 24px)或媒体查询动态调整
避免常见陷阱:gap 不起作用的几个原因
如果写了 gap 却没看到效果,大概率是布局未真正进入 Grid 上下文。
- 确认父容器已声明
display: grid且设置了列模板(如grid-template-columns: repeat(3, 1fr)) - 子元素不能是
float或display: inline-block—— 这些会脱离 Grid 流,gap 对其无效 - 注意
gap不作用于第一列左侧和最后一列右侧,它只在“列与列之间”生效
兼容性足够好,放心使用
现代浏览器(Chrome 66+、Firefox 63+、Safari 16.4+、Edge 79+)均原生支持 gap。如需支持旧版 Safari(-webkit-column-gap 和 -webkit-row-gap,或降级用 column-gap/row-gap 单独设置。
立即学习“前端免费学习笔记(深入)”;
- 多数项目已可忽略 IE,无需额外 hack
- Vue/React 等框架组件中用 Grid + gap 更稳定,不受状态更新引发的 margin 重排干扰
基本上就这些 —— 放弃靠 margin 拼凑列距,拥抱 gap,布局更干净、可控、易维护。










