

新闻资讯
技术学院盒子模型由content、padding、border、margin四层构成,浏览器渲染时天然存在;标准模型下width仅指content宽度,实际尺寸需加上padding和border;box-sizing: border-box可使width包含padding和border。
CSS 盒子模型就是每个元素在页面中占据的矩形空间,它由内到外严格分为四层:content(内容区)、padding(内边距)、border(边框)、margin(外边距)。这四层不是可选配置,而是浏览器渲染时**天然存在**的布局单元——哪怕你没写任何样式,它们也都在那儿。
常见误解是以为“没设 padding 就没有内边距”,其实默认值是 0,不是“不存在”。同理,border 默认为 none,但它的位置和计算逻辑仍在;margin 默认非零(如 有上下 margin),这点尤其容易被忽略。
box-sizing
默认使用的是**标准盒子模型**:你写的 width: 200px 仅代表 content 宽度,不包含 padding 和 border。所以当设置:
div {
width: 200px;
padding: 10px;
border: 3px solid #000;
}该 div 实际占
用的水平空间是 200 + 10×2 + 3×2 = 226px。很多布局错位、响应式失效,根源就在这里。
width 包含 padding 和 border?加一句:box-sizing: border-box
* { box-sizing: border-box; }(注意:伪元素需单独加)box-sizing: content-box 是默认值,显式写出仅用于覆盖或调试padding 是“往里撑”,影响背景色、阴影、点击热区;margin 是“往外推”,透明且不继承背景,但会触发**外边距折叠(margin collapse)**——这是最常踩的坑。
margin-top 和 margin-bottom 会合并为两者中较大的那个值,而不是相加padding 永远不会折叠,也不会塌陷,它老老实实增加盒子自身尺寸)的 margin-top/bottom 无效,但 padding 有效(只是不推挤其他行内元素)border 不仅决定视觉边界,还直接影响盒子尺寸、圆角渲染(border-radius)、甚至是否触发硬件加速(比如带 border 的元素更易被提升为独立图层)。
border: 1px solid transparent 占位——它仍参与 layout 计算,且可能引发重排border-bottom: none,而应直接移除该声明,减少 CSS 解析开销dashed/dotted)比实线(solid)渲染成本略高,高频动画中慎用真正卡住人的从来不是记不住四层名字,而是改了 padding 却忘了调 width,写了 margin 却没意识到它正在和上一个元素悄悄合并——盒子模型的“模型”二字,强调的是它是一套**可预测、可计算、有副作用**的物理系统,不是画布上的静态图层。