border看起来比容器窄是因为默认box-sizing为content-box,边框在宽高外部;改用box-sizing: border-box并配合width: 100%即可使边框与容器同宽。
border 看起来比容器窄?默认情况下,border 是加在 width 和 height 外部的。比如设了 width: 200px + border: 5px solid #000,实际占用宽度是 210px(左右各+5px),导致边框“撑出”容器,视觉上不贴合边缘。
box-sizing: border-box 是关键它让 width 和 height 包含 padding 和 border,这样设置 width: 100% 时,边框自然就和容器同宽了。
*, *::before, *::after { box-sizing: border-box; }.container { width: 100%; border: 2px solid #333; box-sizing: border-box; }width: 100% 才真正“同宽”仅设 box-sizing 不够——如果元素本身没占满父容器,边框还是不会拉满。
width: 300px 或 max-width: 100%)width: 100% + box-sizing: border-box
margin 或 float 干扰流式布局width: 100% 可能被忽略,改用 flex: 1 或 grid-column: 1 / -1
即使写了 box-sizing,边框仍“缩进”或“溢出”,大概率是这些原因:
立即学习“前端免费学习笔记(深入)”;
padding,子元素 width: 100% 只占内容区,不是整个父盒 —— 改用 width: 100%; + margin: -父padding值,或更稳妥地用 calc(100% + 2 * 父padding)
display: inline-block 导致换行/空格产生间隙 —— 改为 display: block 或移除 HTML 中的空白符box-sizing
box-sizing 支持不全 —— 加前缀:-webkit-box-sizing,
-moz-box-sizing
边框和容器同宽这件事,核心就两行:确保父容器可测量,再让子元素用 box-sizing: border-box + width: 100%。其余都是围绕这两点打补丁。