标准答案

  1. margin 塌陷指普通文档流里,块级元素的垂直 margin 可能合并成一个 margin,而不是简单相加。
  2. 它只发生在垂直方向,水平 margin 不会塌陷。
  3. 常见场景有相邻兄弟块、父元素和第一个或最后一个子元素、空块元素自身的上下 margin。
  4. 避免方式可以是给父元素加 padding 或 border,让父元素创建 BFC,比如 display: flow-root,或者改用 flex/grid。
  5. 工程里更推荐用容器 gap 或统一 spacing 规则管理间距,减少子元素 margin 互相碰撞。

题目解析

这题的重点是“垂直 margin 合并”,不是 margin 失效。浏览器这样设计是为了让普通文档流里的段落间距更自然。

Flex 和 Grid 容器里的子项不会发生传统的父子 margin 塌陷,现代布局里可以优先使用 gap。

代码示例

父元素创建 BFC 后,子元素 margin 不会再穿透到父元素外部。

CSS
.panel {
  display: flow-root;
}

.panel-title {
  margin-top: 24px;
}

常见误区

  • 认为两个垂直 margin 会相加,忽略它们可能合并。
  • 把 margin 穿透父元素当作浏览器 bug。
  • 靠给子元素随意加 padding 修补,导致组件间距越来越不可控。

作者信息