display: flex 是让块级元素并排的最可靠方案,需作用于父容器而非子元素,配合 gap、justify-content、align-items 等属性实现精准控制,避免 float、inline-block 和 vertical-align 等误用。

用 display: flex 给父容器设布局,别碰 float
块级元素(如 div、p、h4)默认独占一行,想让它们并排,核心不是“改子元素”,而是“换父容器的布局模式”。display: flex 是当前最可靠、干扰最少的方案。
常见错误包括:
- 给每个
div单独加float: left—— 后续清浮动麻烦,响应式下易塌陷,IE 以外现代项目已淘汰 - 只设
width不设display—— 块级元素无视宽度,照样换行 - 漏掉父容器,直接在
body下堆div—— 没有共同布局上下文,对齐无从谈起
正确做法:
- 用一个语义化容器(如 或
)包裹所有要并排的块- 对该容器设置
display: flex- 用
gap控制间距(比手动写margin更干净)- 用
justify-content控制水平对齐(如space-between、center)- 用
align-items控制垂直对齐(如center防止高度不一时顶部参差)vertical-align对块级元素无效,别乱试新手常查到“用
vertical-align: middle让 div 并排居中”,这根本不起作用——vertical-align只对inline、inline-block和表格单元格生效,对flex子项或纯块级元素无意义。如果你看到并排后上下错位,真正原因是:
- 子元素默认按
align-items: stretch拉伸,但某些内容(如文字、img)自带基线或默认margin -
p标签有浏览器默认上下边距,会撑开高度 - 没设
box-sizing: border-box,导致padding或border加在宽度外,破坏等宽布局
解决建议:
- 统一重置
p、h4等标签的margin(如p { margin: 0; }) - 父容器加
align-items: center,而不是在子元素上硬套vertical-align - 所有子元素设
box-sizing: border-box,避免尺寸计算偏差
为什么不用
inline-block?它真不如flex稳display: inline-block确实能让块级元素并排,但它有一堆隐性陷阱,尤其对新手不友好:- HTML 源码中标签间的换行和空格会被渲染成约 4px 的空白间隙,必须靠注释
或字体大小归零来消除 - 默认按
vertical-align: baseline对齐,文字多的块会把其他块往下带,调半天才发现是基线惹的祸 - 无法统一控制首尾间距(
gap在flex里一行解决,在inline-block里得靠margin手动算 - 响应式折行时行为不可控,
flex-wrap: wrap是明确开关,inline-block折行逻辑模糊
除非你明确需要兼容 IE9 及更早版本(且不介意写一堆 hack),否则没必要退回到
inline-block。对齐失效?先检查嵌套和 display 类型混用
很多“明明写了
flex却不对齐”的问题,根源不在 flex 属性本身,而在嵌套结构里悄悄混入了不同display类型:- 父容器是
flex,但某个子div里又包了一层div并设了float—— 浮动元素脱离文档流,不再受 flex 控制 - 用了
figure+figcaption并排,但没给figure设display: flex,只靠vertical-align尝试对齐底部,结果标题高低不一 - 按钮组没用容器包裹,多个
button直接写在body下,HTML 换行产生不可见空隙,还误以为是样式问题
排查顺序建议:
- 打开浏览器开发者工具,选中父容器,确认 computed 样式里
display确实是flex - 逐个检查子元素是否被其他规则覆盖(比如某个
class里写了display: block) - 看子元素是否意外被
position: absolute或float脱离了 flex 上下文
真正难的从来不是“怎么写 flex”,而是 flex 容器一旦嵌套过深、或混入非 flex 子项,那些默认 margin、line-height、基线、空白符就会立刻浮出水面,把对齐搞乱。每次对齐失败,优先怀疑结构,再查样式。
- 对该容器设置
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











