flex-wrap控制Flex布局中子项是否换行,默认nowrap不换行;wrap允许换行且新行从主轴起点开始;wrap-reverse则反向堆叠换行。需配合justify-content、align-content等实现多行对齐与间距控制。
在Flex布局中,内容是否换行由 flex-wrap 属性控制,默认不换行,超出容器会被压缩或溢出。要让子项自动换行,只需设置 flex-wrap: wrap。
它决定主轴方向上的子项在空间不足时如何排列:
仅设 wrap 不够,换行后多行之间的对齐和分布需额外处理:
justify-content 控制每行内部子项的主轴对齐(如 space-between)align-content 控制多行整体在交叉轴上的对齐与间距(如 flex-start、center、space-around)align-items 仍影响单行内所有子项在交叉轴上的对齐(如垂直居中)设置了 flex-wrap: wrap 却不换行?可能是这些细节被忽略:
flex: 1 强制撑满)white-space: nowrap 或固定宽高,导致无法压缩换行display: flex 未生效(比如被其他样式覆盖,或写在错误选择器下)flex-direction: column,此时换行行为发生在交叉轴,flex-wrap 实际控制的是“列换行”,容易误解三列卡片在小屏自动变为单列:
.container {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.card {
flex: 0 0 calc(33.333% - 0.666rem); /* 留出 gap 余量 */
}
@media (max-width: 768px) {
.card {
flex: 0 0 100%;
}
}这里用 flex-wrap: wrap 打底,再配合媒体查询和 flex-basis 精准控制断点换行。
基本上就这些。flex-wrap 本身不复杂,但和 flex-direction、flex-basis、gap 等搭配时容易忽略细节。