外边距合并是 CSS 中一个特殊的概念。当两个外边距相邻时,它们会合并为较大的那一个。 无论是相邻元素的上下边距,还是父子元素的上边距,甚至是同一元素的上下边距。

相邻元素

当两个元素上下相邻时,上面的下外边距会与下面元素的上外边距会合并。

contain@2x

如果元素左右相邻呢?一个典型的场景是几个 inline-block 元素并排显示。 但 inline-block 元素的外边距是不合并的,它们会保持自己的间隔。

inline-block 的上下外边距仍然是不起作用的,因为它们是行内元素呀!

父子元素

父子元素如果都有上边距,会合并为其中较大的那一个。

top-bottom@2x

当然,只有两个外边距直接相邻时才会合并。如果父元素有内边距(padding)或边框(border),那么它们不会被合并。

单个元素

如果一个元素没有内容,也没有内边距和边框,那么它的上下外边距也会合并。

self

很奇怪对吧,还有更奇怪的:连续相邻的外边距都是可以合并的。 空元素的上下边距合并时,如果紧接着另一个元素的外边距,它们都会合并到一起。

all

这就是为什么连续的 <p></p> 其实占位很小。它们的上下边距会合并, 空元素的上下边距也会合并。这一布局行为在这个场景下是非常有用的。

本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2016/01/24/margin-collapsing.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。