content-box盒模型下,width/height仅指内容区尺寸,总宽度=width+左右padding+左右border。
因为 CSS 默认使用 content-box 盒模型,padding 会额外增加元素的总宽度和高度,而不是从设定的宽高里“扣除”。
当你写:
width: 200px; padding: 20px;
浏览器实际渲染的**总宽度 = width(200px) + 左右 padding(40px) = 240px**。
同理,height 也会因上下 padding 而变高。这个“额外撑开”的效果,就是布局错位的根源。
常见于以下场景:
① 切换盒模型:box-sizing: border-box
加在需要控制的元素
上(推荐全局设置):
*, *::before, *::after { box-sizing: border-box; }
这样 width/height 就包含 content + padding + border,padding 不再“撑大”元素。
② 手动减去 padding(不推荐)
比如:
width: calc(200px - 40px); padding: 20px;
容易出错、难维护,尤其响应式中 padding 可能是 rem/em/%,计算更复杂。
margin 不参与盒模型尺寸计算,它只是外部间距,不影响 width/height;
border 在 content-box 下和 padding 一样会额外增加尺寸,但在 border-box 下会被包含进 width/height 里。