box-sizing: content-box 下 width 只含内容区,加 pad"> box-sizing: content-box 下 width 只含内容区,加 pad"> box-sizing: content-box 下 width 只含内容区,加 pad">
面试题库 词条目录
前端Wiki/面试题库/HTML 与 CSS/CSS 高频题

CSS 盒模型与 BFC

盒模型有两种:标准盒模型 box-sizing: content-box 下 width 只含内容区,加 padding/border 会撑大元素;IE 盒模型 border-box 下 width 包含 padding 与 border,设置多少就是多少。工程实践几乎全部用 *{box-sizing:border-box},因为它的尺寸语义符合直觉,调布局的成本最低。

BFC(块级格式化上下文)是一个独立的渲染区域,内部元素不受外部影响。触发条件:float 不为 none、position 为 absolute/fixed、overflow 不为 visible、display 为 flex/grid/inline-block 等。它解决三个经典问题:父元素高度塌陷(子元素浮动时)、相邻块级元素外边距折叠、文字环绕浮动元素。

  • box-sizing: border-box 是工程默认;width 即可见宽,算尺寸不烧脑
  • BFC 是隔离的渲染区域:内部浮动参与高度计算、margin 不与外部折叠
  • 清浮动 / 防 margin 折叠 / 自适应两栏布局,本质都是“再造一个 BFC”
HTML
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<style>
  * { box-sizing: border-box; }   /* 全局 border-box,尺寸符合直觉 */
  .outer {
    overflow: hidden;             /* 触发 BFC:父盒子重新“包住”浮动子元素 */
    border: 2px solid #f0c33c;
  }
  .float { float: left; width: 100px; height: 60px; background: #ffe; }

  /* margin 折叠演示:相邻块级元素的上下 margin 会合并 */
  .a { margin-bottom: 30px; background: #eef; }
  .b { margin-top: 20px; background: #fee; }
  .bfc { overflow: hidden; }      /* 包一层 BFC,margin 不再与外界合并 */
</style>
</head>
<body>
  <div class="outer"><div class="float">浮动</div></div>
  <p>父元素没有被浮动子元素撑塌 —— BFC 生效。</p>
  <div class="a">A(margin-bottom 30px)</div>
  <div class="bfc"><div class="b">B(包在 BFC 里,margin 不折叠)</div></div>
</body>
</html>
本节要点盒模型背 border-box;BFC 记住触发条件与三大用途:清浮动、防 margin 折叠、隔离布局。
🔗 相关词条CSS自适应CSS3