如何通过css设置多个div并排显示 Flex弹性盒模型实战解析

3次阅读

并排显示需将 display: flex 设在父容器而非子元素;换行需设置 flex-wrap: wrap 并约束子项宽度;间距优先用 gap 属性;ie11 兼容需避免 flex 简写,改用三值语法。

如何通过 css 设置多个 div 并排显示 Flex 弹性盒模型实战解析

div 并排显示不生效?检查 display: flex 是否写在父容器上

很多人把 display: flex 加在每个子 div 上,结果毫无反应——Flex 是父容器的布局模式,子元素只是“被安排”的对象。父容器没设 display: flex,再多个 div 也还是默认的块级流式堆叠。

  • 正确做法:给包裹这些 div 的外层容器(比如 section 或 div class="container")加 display: flex
  • 常见错误:.item {display: flex;} —— 这会让每个 div 自己变成一个 flex 容器,和并排无关
  • 如果父容器是 inline 元素(如 span),需先确保它能容纳 flex 布局,通常改用 div 更稳妥

并排后换行错乱?重点看 flex-wrap 和子项宽度

默认情况下,flex-wrap: nowrap,所有子项会强行挤在同一行,超出就溢出或缩小。想自动换行,必须显式设置 flex-wrap: wrap;但光这样还不够,子项得有明确宽度约束,否则浏览器可能按内容撑开,导致换行不可控。

  • flex-wrap: wrap 是换行的前提,不写就永远不折行
  • 子项推荐用 flex: 1 1 auto 或固定 width(如 width: 200px),避免依赖内容宽度
  • 注意 min-width: auto(默认值)可能导致文字多的项撑宽,建议加 min-width: 0 配合 overflow: hidden 防溢出

间距不均匀?别只靠 margin,优先用 gap

gap 是 Flex 布局原生支持的间隙控制属性,比手动给每个子项加 margin 更干净、更可靠——尤其没有“首尾多出空白”的问题,也不用担心 margin-collapse 干扰。

  • gap: 12px 同时控制行内和行间间隙;row-gap 和 column-gap 可单独控制
  • 旧版浏览器(如 IE)不支持 gap,若需兼容,退回到 margin 方案时记得用 :not(:first-child) 过滤首项
  • gap 在 flex-direction: column 下依然有效,这点比 margin 更直观

IE11 兼容性踩坑:别用 flex: 1 简写,改用完整三值

IE11 对 flex 简写的解析有 Bug,flex: 1 会被当作 flex: 1 1 0%,导致子项宽度计算异常。实际项目中只要还支持 IE11,就得绕开简写。

立即学习 前端免费学习笔记(深入)”;

  • 安全写法:flex: 1 1 0px 或 flex: 0 0 auto,明确写出三个值
  • flex-basis 推荐用 0px 而非 0%,避免 IE11 把百分比解析为容器宽度的 0%,而非“无基准”
  • 另外,IE11 不支持 gap,必须用 margin + calc() 模拟,例如 width: calc((100% - 24px) / 3)(3 列,2 个 12px 间隙)

Flex 并排看着简单,真正卡住人的往往不是语法,而是父容器缺失、换行逻辑没打开、或者一个 flex: 1 在 IE 里悄悄崩了布局——这些点不验证一遍,调试时容易反复怀疑 CSS 写错了。

text=ZqhQzanResources