当你没写 box-sizing,浏览器就用 content-box —— 这不是某种特殊模式,而是 CSS 的原始设定。它意味着:你写的 width: 200px,只管内容区那块空白,不管 padding 和 border。哪怕加了 padding: 10px 和 border: 3px,元素在页面上实际占的宽度还是:200 + 10×2 + 3×2 = 226px。
常见错误现象:
width: 50% 的两个并排盒子,结果因为 padding/border 撑出父容器,换行了flex: 1,但加了 padding 后内容被挤窄、文字换行根本原因:你控制的是“内容尺寸”,但视觉上要对齐的是“边框外沿”。两套尺寸系统混用,等于靠心算布局。
打开浏览器开发者工具(F12),选
中元素,在 Styles 面板里搜 box-sizing。如果没有这一行,或显示为 content-box,那就确认是默认模式。也可以用 JS 快速检测:
getComputedStyle(document.querySelector('.my-el')).boxSizing
// 返回 "content-box" 或 "border-box"
注意:boxSizing 是 JS 属性名(驼峰),CSS 里是连字符写法 box-sizing。
它不是 bug,是设计选择 —— 尤其适合需要精确控制内容区域尺寸的场景,比如:
真正危险的,是“不知道自己在 content-box 下,还当它是 border-box 用”。全局重置为 border-box 是行业惯例,但理解 content-box 才能读懂老项目、调试异常尺寸、甚至反向利用它做微调。