章节摘要:每个 HTML 元素在浏览器眼中都是一个四层嵌套的盒子——内容、内边距、边框、外边距。盒模型定义了元素占位的计算方式,是理解一切布局问题的地基。本章拆解四层结构、动手验证外边距合并的怪癖、讲清
box-sizing两种模式的差别,最终让你对"元素到底占多大地方、间距到底怎么算"有精确的掌控力。
阅读完本章,你应当能够:
padding、border、margin 的简写语法和方向变体;content-box 与 border-box 的尺寸计算差异,说明为什么现代项目全局启用后者;max-width/min-height 约束和视口单位做弹性尺寸控制;盒模型四层结构与外边距合并的存在
一个思想实验开场:页面上两个按钮,一个写着"确定",一个写着"取消"。它们看起来只差几个字,但在浏览器眼里,每个按钮都是一个矩形盒子,盒子有内容区(文字)、内边距(文字到边框的留白)、边框(描边)、外边距(和邻居的距离)。所有布局问题,本质都是这些盒子的尺寸与位置的计算问题。
| 篇目 | 核心内容 | 学完能做 |
|---|---|---|
| 盒模型原理与属性 | 四层结构、内外边距、边框、外边距合并 | 精确控制元素的空间占位 |
| box-sizing 与尺寸控制 | 两种计算模式、约束属性、视口单位 | 告别尺寸计算的意外 |
从四层结构的定义入手,逐层动手实验:内边距撑开呼吸感、边框描出轮廓、外边距隔开邻居——最后直面盒模型里最反直觉的行为:垂直外边距合并不叠加而是取大。
width: 200px 的元素实际占多宽?答案取决于 box-sizing。本节对比默认模式与 border-box 模式的计算差异,给出"项目第一行重置代码"的完整理由,并补上约束属性和视口单位这两件弹性尺寸的工具。
两节是"原理"与"对策"的关系:
四层结构 + 各层属性 ──► 知道占位怎么算 │ ├─ 发现坑:默认模式加内边距会撑大元素、外边距会合并 │ └─ 对策:border-box 全局重置 + 约束属性 + 合理单位 │ ▼ 第4章 布局技术(盒子们如何排队)
box-sizing: border-box 是第 4 章一切百分比宽度布局的前提;外边距合并在 Flex/Grid 容器中不发生——这个对比会成为你选择现代布局的理由之一。问:为什么我的元素宽度量出来比声明的宽? 两个嫌疑人:一是没开 border-box,内边距和边框额外叠加在声明宽度之外;二是元素行内排布时中间的空格或换行被算进了布局。前者本章第二节解决,后者是第四章 Display 一节的"幽灵间隙"话题。先打开开发者工具的盒模型图看多出来的宽度落在哪一层,答案通常一目了然。
问:外边距设了负值会怎样? 合法且有用。负外边距把元素往相应方向"拉",常用于让重叠式头像列表(每个头像左移一部分盖住前一个)、贴边对齐(抵消父容器的内边距)。它会带来重叠,注意叠放次序和可点击区域,别让下面的元素挡住该点的东西。
问:内边距和外边距怎么选? 一句话判断:间距是"我身体的一部分"还是"我和别人的关系"。前者用内边距——按钮文字到按钮边缘的留白、卡片内容到卡片边框的距离;后者用外边距——卡片与卡片之间的空隙、段落与段落的间隔。混用也能跑,但组件的"自包含"会被破坏:复制到别处间距就散架。
盒模型是 CSS 布局的底层逻辑。每个元素都由内到外分为四层:内容区、内边距、边框和外边距。理解这四层的关系,才能精确控制元素在页面上的尺寸和间距。box-sizing: border-box 是现代 CSS 开发的标配——它让 width 和 height 包含内边距和边框,极大地简化了尺寸计算。
外边距合并(margin collapsing)是盒模型中最反直觉的行为:两个垂直相邻元素的外边距不会叠加,而是取较大值。父子之间、空元素自身也会发生合并。理解这个机制,可以避免很多"间距为什么比预期大(或小)"的困惑——更重要的是,Flex 和 Grid 容器里它根本不发生,这是现代布局"更可预测"的直接证据。
💡 动手建议:在浏览器开发者工具中选中任意元素,右侧的盒模型示意图会用不同颜色标出 content、padding、border、margin 各层及其数值,还能双击数字直接修改。这是调试布局问题时最先看的地方,比任何文字描述都直观。
⚠️ 永远在项目的第一个样式文件里写上全局的
box-sizing: border-box重置(连伪元素一起)。如果不这样做,将来用百分比或固定像素设置宽度时,内边距和边框会悄悄撑大元素,导致布局错位——而且这种错位往往差之毫厘,肉眼排查极其费时。

图:盒模型四层同心结构