gap 已取代 grid-gap,是 row-gap 和 column-gap 的简写,支持单值(统一行列间距)和双值(分别设行、列间距),且在现代 Grid 和多行 Flex 中均适用,语法更简洁、语义更清晰。
grid-gap 是 CSS Grid 布局早期草案中的属性,在现代浏览器中已被 gap 完全取代。所有支持 Grid 的主流浏览器(Chrome 66+、Firefox 63+、Safari 14+、Edge 79+)都只推荐使用 gap。继续写 grid-gap 不会报错,但属于冗余写法,且无法触发某些新行为(如与 row-gap/column-gap 的级联逻辑)。
gap 是 row-gap 和 column-gap 的简写,接受一个或两个值:
gap: 12px):同时设置行间距和列间距为 12px
gap: 12px 24px):第一个是 row-gap,第二个是 column-gap
这比分别写 grid-row-gap 和 grid-column-gap 更直观,也避免了旧属性名带来的语义混淆。
/* 推荐:现代写法 */
.container {
display: grid;
gap: 1rem 2rem;
}
/ 不推荐:过时写法,且不支持单值缩写 /
.container {
display: grid;
grid
-gap: 1rem 2rem; / 虽然还能用,但已非标准 /
}
从 Chrome 84 / Firefox 63 / Safari 14.1 开始,gap 也被扩展到了 Flexbox 布局中,但仅适用于 flex-direction: row 或 column 的**单行/单列**场景。多行 Flex(flex-wrap: wrap)下,gap 行为才完全等价于 Grid 中的含义。
立即学习“前端免费学习笔记(深入)”;
flex-direction: row; flex-wrap: nowrap → gap 只影响元素间横向间距flex-direction: column; flex-wrap: nowrap → gap 只影响纵向间距flex-wrap: wrap(无论方向)→ gap 同时生效于行与列,行为与 Grid 一致注意:gap 在 Flex 中对 justify-content 或 align-items 无影响,它只是插入在 flex item 之间的空白,不参与对齐计算。
如果必须支持极老浏览器(如 IE 或旧版 Android WebView),要注意:grid-gap 和 gap 并非简单别名关系。它们在解析优先级、继承行为和与 row-gap/column-gap 的交互上存在差异。
grid-gap: 10px; gap: 10px —— 后者会覆盖前者,但旧浏览器会忽略 gap,导致无间距grid-gap 并放弃 gap,或借助 Autoprefixer(它会把 gap 编译为 grid-gap + gap,但仅限 Grid 上下文)gap,无需任何前缀或 fallback最容易被忽略的一点:当父容器同时设置了 gap 和子项设置了 margin,两者不会合并或抵消——它们是独立存在的空白区域,可能造成意外的“双倍间距”。这时候得靠视觉调试确认实际布局效果。