Flex 布局子元素间距不均应优先使用 gap 而非 margin,因 gap 由容器控制、均匀可靠且不干扰布局流;需确保父容器为 display: flex,注意兼容性及避免与对齐方式混淆。
Flex 布局中子元素间距不均,通常是因为误用了 margin(尤其首尾元素多加了边距),或容器未启用 gap。优先用 gap,它专为容器内项目间距设计,干净、可控、不干扰布局流。
gap 是 Flex(以及 Grid)原生支持的间距属性,作用于容器,自动在相邻子项之间插入等距空隙,不会影响首项前、末项后,也无需额外类名或选择器。
column-gap,纵向用 row-gap,简写统一用 gap(如 gap: 12px 表示行列均为 12px)display: flex; gap: 16px;,所有相邻子项间立刻获得一致间距@supports 回退靠给每个子项加 margin-right 或 margin-bottom 模拟间隔,容易导致首尾多出空白,需要额外清除。
.item { margin-right: 16px; } → 最后一项右侧也会有 16px 空白:last-child { margin-right: 0; },但响应式换行时失效(Flex 换行后 last-child 不再是视觉末尾)nth-child 计算,维护成本高且易出错gap 在 Flex 中虽简单,但有前提条件:
display: flex(不能是 inline-flex 以外的其他 display 值)flex: 0 0 auto 且内容溢出导致换行异常(此时可加 flex-wrap: wrap 并确认 gap 在多行中是否按预期工作)justify-content: space-between 等对齐方式混用造成视觉混淆——gap 和对齐是正交控制,但效果叠加时需留意整体节奏若必须兼容不支持 gap 的环境,可用“伪边距”技巧替代:
margin: 0 -8px;,子项设 padding: 0 8px;
.item + .item { margin-left: 16px; }(仅适用于水平排列,且需确保 HTML 结构连续)margin-left 配合 :first-child 清除,逻辑反直觉且易漏