关键在于三步:启用flex-wrap: wrap实现换行,设置子项flex与min-width(如flex: 1 1 calc(50% - 8px)和min-width: 240px)防止塌缩,使用gap替代margin实现统一响应式间距。
让 flex 布局在小屏幕上自动换行且间距合理,关键在于三步:启用换行、控制子项尺寸、合理设置间隙。默认情况下 flex 容器是 flex-wrap: nowrap,所以必须显式开启换行,并配合响应式断点调整子项的 flex 基础宽度和 margin/gap。
确保容器允许换行,并避免子项被强行压缩:
flex-wrap: wrap(默认是 nowrap)justify-content: flex-start 或 space-between 控制首行对齐,避免换行后末尾留大片空白justify-content: space-around 或 space-evenly,它们会在每项两侧加等量间隙,换行后可能造成上下行间距不均小屏下如果子项没有宽度约束,可能被压成一条细线或文字折行混乱:
flex: 1 1 calc(50% - 8px)(双列)、calc(33.333% - 12px)(三列),其中减去的是 gap 总和的一半min-width,例如 min-width: 240px,再配 flex: 1,让其在空间足够时伸展、不足时换行flex: 1 而无最小宽度,否则在窄屏下可能塌缩到不可读gap 是 flex 和 grid 的原生间距属性,比手动加 margin 更干净、不触发 margin 折

gap: 16px,会同时作用于行内和行间间距@media (max-width: 768px) { .container { gap: 12px; } }
margin + :nth-child 模拟,但推荐优先用 gap + 适当降级换行后最后一行子项少于其他行时,容易出现左右不对齐。可这样优化:
justify-content: flex-start 保持左对齐(最常用且自然)justify-content: center,但整体会偏中,首行不再贴左