CSS 外边距坍塌(margin collapsing)详解

本文将详细讲解 CSS 布局中遇到的外边距坍塌现象, 分析其出现的原因和场景,以及对应的处理方式。

块级元素的上外边距和下外边距有时会合并(或折叠)为一个外边距,其大小取其中的最大者,这种行为称为外边距折叠(margin collapsing),有时也翻译为外边距合并,外边距坍塌。

出现外边距坍塌的三种基本情况

  • 相邻元素之间
    毗邻的两个元素之间的外边距会折叠,除非有一个元素需要清除之前的浮动
  • 父元素与其第一个或最后一个子元素之间
    如果在父元素(更准确的说是父元素的上边距)与其第一个子元素之间不存在边框、内边距、行内内容,也没有创建块格式化上下文、或者清除浮动将两者的 margin-top 分开;或者在父元素(更准确的说是父元素的下边距)与其最后一个子元素之间不存在边框、内边距、行内内容、heightmin-heightmax-height 将两者的 margin-bottom 分开,那么这两对外边距之间会产生折叠。此时子元素的外边距会“溢出”到父元素的外面。
  • 空的块级元素
    如果一个块级元素中不包含任何内容,并且在其 margin-topmargin-bottom 之间没有边框、内边距、行内内容、heightmin-height 将两者分开(即上下边距直接相连),则该元素的上下外边距会折叠。

注意:

  • 上述情况的组合会产生更复杂的外边距折叠。
  • 即使某一外边距为0,这些规则仍然适用。因此就算父元素的外边距是0,第一个或最后一个子元素的外边距仍然会“溢出”到父元素的外面。
  • 如果参与折叠的外边距中包含负值,折叠后的外边距的值为最大的正边距与最小的负边距(即绝对值最大的负边距)的和。
  • 如果所有参与折叠的外边距都为负,折叠后的外边距的值为最小的负边距的值。这一规则适用于相邻元素和嵌套元素。
-------------本文结束感谢您的阅读-------------
0%