最直接区别是换行与宽高设置:块级元素(如div、p、h1)独占一行且可设宽高,行内元素(如span、a、strong)并排显示且宽高无效;布局上块级强制换行、行内水平排列;盒模型中块级支持完整margin/padding,行内仅水平方向有效;嵌套规则上块级可含块/行内元素,行内仅能嵌套文本或行内元素。

行内元素和块级元素最直接的区别就是:一个换行,一个不换行;一个能设宽高,一个不能。
布局行为:换不换行决定结构走向
块级元素(如 div、p、h1)默认强制换行——它前面的元素结束,它就独占一行开始;后面紧跟的元素也得另起一行。行内元素(如 span、a、strong)则“挤”在当前行里,多个并排,直到行宽不够才折行。
这意味着:
- 把 div 放进 p 里会破坏 HTML 合法性(p 只允许行内内容);
- 用 span 包一段文字加样式没问题,但想让它居中或撑满宽度,就得靠 CSS 调整 display,而不是直接设 width。
盒模型控制:宽高、边距是否生效
块级元素支持完整的盒模型操作:
- width / height 有效
- margin-top / margin-bottom 推得开上下邻居
- padding 四个方向都撑得开
行内元素只认水平方向:
- width 和 height 设置无效(除非是替换元素,如 img)
- margin-top / margin-bottom 看不见效果(不影响行高或相邻元素位置)
- padding 上下虽然能加,但可能“溢出”到行框外,视觉上容易错乱
嵌套规则:哪些能包哪些
块级元素包容性强:
- 可以包含其他块级元素(如 div 里放 ul)
- 也可以包含行内元素(如 p 里放 strong)
行内元素很谨慎:
- 不能直接包含块级元素(span 里写 div 是非法 HTML)
- 只能嵌套文本、其他行内元素(如 a 里放 em),否则浏览器会自动纠错(比如把块级子元素提到外面)
display 属性不是万能钥匙
用 display: block 把 span 变成块级,或用 display: inline 把 div 压成行内,确实能改渲染表现——但语义没变,HTML 结构合法性也没变。
比如:
- 表单里 label 是行内元素,设成 block 后可以垂直对齐 input,没问题;
- 但把 li(本该在 ul 里)强行设成 inline,虽能横排,却可能破坏可访问性(屏幕阅读器仍按列表逻辑解析);
- 更隐蔽的是:某些元素(如 input、img)天生是替换元素,浏览器给它们的默认 display 是 inline,但宽高可用——这不是“行内元素能设宽高”,而是它们属于另一类机制。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











