实现等比例分栏的关键是使用 flex: 1(即 flex-grow: 1; flex-shrink: 1; flex-basis: 0)并配合容器级 gap 属性,移除子项显式 width/min-width 干扰,让 flex 容器自动均分剩余空间。
子元素无法平均分布,通常是因为没理解 flex: 1 的作用机制,或忽略了容器的 gap 与子项自身宽高设置的干扰。真正实现等比例分栏,关键不是“强行设宽度”,而是让 flex 容器主动分配剩余空间。
flex: 1 是 flex-grow: 1; flex-shrink: 1; flex-basis: 0 的简写。重点在 flex-basis: 0 —— 它让子项初始宽度为 0,把全部空间交给 flex-grow 去均分。
width: 200px 或 min-width,会干扰 flex-basis: 0,导致不均分flex: 1
flex: 1,它们就会严格等宽(忽略内容宽度差异)用 margin 实现间隙容易引发边距叠加、首尾多留白等问题;gap 是容器级属性,专为 flex 和 grid 设计,自动避开首尾。
gap: 16px,子项间就有统一间隙margin-right 或伪元素清除row-gap / column-gap 精细控制(如仅水平有间隙)以下写法看似合理,实则破坏等分:
flex: 1; width: 100px → width 覆盖 flex-basis,失去弹性flex: 1; min-width: 120px → 内容少时能均分,内容多时某项撑
开,破坏比例.container { display: flex; gap: 12px; }.item { flex: 1; }
基本上就这些。flex: 1 + gap 的组合,不复杂但容易忽略基础逻辑。删掉多余宽度、信任 flex 的自动分配,等比例分栏自然就稳了。