css 外边距合并

问题

当两个块级元素的上外边距和下外边距发生合并为一个外边距,取值为其中的最大值,这是情况叫外边距合并margin 崩塌 折叠

什么时候发生崩塌

相邻的两个节点的外边距会合并

下面例子中两个相邻的元素的外边距发生合并

父元素与其第一个或最后一个子元素之间

下面例子中子元素的 margin 溢出并覆盖了父元素的 margin

空的块级元素

可以通过盒模型查看,空的元素发生合并

解决崩塌

  • 浮动元素不会和任何元素发生折叠。
  • 创建 BFC 元素不会和他的子元素发生折叠。
  • 绝对定位元素不会和其他元素发生折叠。
  • inline-block 元素不会和其他元素发生折叠。

浮动元素解决崩塌

设置浮动元素可以避免 margin 崩塌,元素之间的间隔重新变为 30px

创建 BFC

BFC(块格式化上下文)是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。

以下方法创建 BFC

  • 根元素或包含根元素的元素
  • 浮动元素(float 不是 none)
  • 绝对定位元素(position 为 absolut 和 fixed)
  • display 属性为 inline-block 和与 table 相关的一系列属性
  • overflow 不为 visible

创建了块格式化上下文的元素中的所有内容都会被包含到该 BFC 中。

参考