元素实际宽度不等于设置的width值,根本原因是CSS默认采用content-box盒模型,width仅指内容区宽度,padding和border额外增加;改为border-box可使width包含content、padding和border。
元素实际宽度不等于你写的 width 值,根本原因在于 CSS 默认采用 content-box 盒模型——它只把 width 当作内容区的宽度,而 padding 和 border 是额外加在外面的。
浏览器按这个公式算总宽度:
实际宽度 = width + 左右 padding + 左右 border
比如你写了:
那它最终占位是:200 + 10 + 10 + 3 + 3 = 226px。这不是 bug,是默认行为。
把盒模型换成 border-box,就能让 width 指代“整个盒子的总宽”:
推荐全局启用(写在样式最前面):
* { box-sizing: border-box; }有些元素天生不认 width:
、 等 inline 元素:width/height 完全无效display: inline-block 或 display: block
flex-basis,width 可能被 flex-grow 覆盖即使 box-sizing 正确,这些情况也会干扰宽度表现:
position: relative 祖先,不是 viewport
idth 冲突 → 比如 width: 300px; max-width: 200px,最终取 200px