块级与行内:HTML文档流中两种截然不同的布局逻辑 块级元素独占一行、撑满父容器宽度、触发BFC、支持完整的盒模型;行内元素则是不换行、宽高由内容决定、只有左右margin生效、而且通常不能嵌套块级元素(a标签是个例外)。至于input和img,它们的display默认是inline-block,兼
块级元素独占一行、撑满父容器宽度、触发BFC、支持完整的盒模型;行内元素则是不换行、宽高由内容决定、只有左右margin生效、而且通常不能嵌套块级元素(a标签是个例外)。至于input和img,它们的display默认是inline-block,兼具两种特性的同时,却有个恼人的4px间隙。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
先澄清一个常见误区:块级标签和行内标签在HTML文档流中的行为差异,远不止“能不能换行”这么表面。背后藏着浏览器如何计算布局空间、如何响应CSS、以及如何嵌套的底层规则。
块级元素(比如 div、p、h1)在渲染时自动触发“块格式化上下文(BFC)”,这就带来了一个后果:前后元素强制换行。它们的 width 默认是 auto,实际算下来等于父容器内容区宽度,再减去左右 margin、padding 和 border。换句话说,它天生就要“占满一行”。
margin-top 和 margin-bottom 会实实在在地影响垂直间距,而且可能发生外边距合并(margin collapse),两个相邻块级元素的垂直外边距会取较大值,而不是相加p、h1 这类文本类块级元素,不能直接包含 divheight 是有效的;内容超出的话,按 overflow 规则处理行内元素(比如 span、a、strong)并不打断当前的行框(line box),它们的尺寸完全由字体度量、字符宽度和行高决定。换句话说,CSS里给它们设 width 或 height 会被直接忽略,margin-top 和 margin-bottom 也不会产生位移效果。
margin-left 和 margin-right 是有效的,padding 的上下部分会“撑开”行高,但不会改变元素自身的高度a 是个例外,HTML5允许它包裹块级内容,但语义上得小心input 和 img:它们其实是行内块,不是纯行内很多人误以为 input 是行内元素,其实它的默认 display 是 inline-block,属于可替换元素(replaced element)。这意味着:它既像行内元素一样能和其他元素并排,又像块级元素一样能设置 width、height 以及所有方向的 margin、padding。
input 之间会出现大约4px的空白,根源在于HTML解析器把换行/空格当作文本节点处理了font-size: 0,再给 input 单独设字体;或者用 vertical-align: top/middle/bottom 来对齐line-height 垂直居中(除非配合 vertical-align),这点和纯行内元素不一样真正容易被忽略的,其实是嵌套限制和外边距合并这些细节。比如两个 p 标签上下外边距会塌陷成一个最大值;而 span 套在 p 里时,它的 margin 并不会影响段落整体位置。这些规则不写进CSS就不会暴露,但一旦布局错乱,根源往往就在这些地方。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述