flex值分配需依布局意图匹配:固定尺寸设flex:0 0 240px,自适应主内容用flex:1 1 0,文字块用flex:0 1 auto,等宽按钮组用flex:1 1 0;注意flex-basis优先级高于width,auto与0行为不同,避免混用百分比basis与grow。
flex 值的合理分配,关键在于明确容器空间是否充足、各子项是否需要“争空间”或“让空间”。不是数值越大越好,而是要匹配实际布局意图:固定尺寸的不参与伸缩,内容主导的留足余地,填充区域的按需拉伸。
flex 是 flex-grow、flex-shrink、flex-basis 的简写,顺序固定为 flex: grow shrink basis。浏览器按三步走:
)算出初始总宽度不同需求对应不同写法,避免拍脑袋设 1 1 auto:
flex: 0 0 240px —— grow=0(不放大)、shrink=0(不缩小)、basis=240px(强制宽度)flex: 1 1 0 —— basis=0 让它完全从零开始分剩余空间,grow/shrink 都启用,既可撑开也能收缩flex: 0 1 auto —— 不主动放大(grow=0),但允许收缩(shrink=1),basis=auto 尊重内容本来宽度flex: 1 1 0,basis=0 + grow=1 → 均分容器宽度,无视原始内容宽窄这些点不注意,布局会突然“错位”或滚动条乱跑:
width: 100px 又写 flex-basis: 200px,最终按 200px 算 —— 不是叠加,是覆盖min-width: 0 或 overflow: hidden
flex: 1 1 50%,当容器变窄时,50% 可能已超限,shrink 又被启用,结果难以预测遇到布局异常,按这个顺序检查:
min-width: 0 或 overflow 控制,导致文本/图片强行撑开?