清除浮动是解决最后一个元素下移的根本方法,因父容器高度塌陷导致;box-sizing: border-box 仅防尺寸溢出间接辅助,现代布局应优先使用 flex 或 grid。
浮动布局中最后一个元素下移,通常是因为父容器没有清除浮动,导致高度塌陷,后续元素被“挤”到浮动元素下方。而 box-sizing: border-box 本身不直接解决下移问题,但它能防止因 padding/border 导致的宽度超出,间接避免因尺寸计算错误引发的浮动错位。
父容器未包裹浮动子元素,是下移的主因。必须让父容器“感知”到浮动元素的高度:
overflow: hidden 或 overflow: auto(触发 BFC)clear: both
.clearfix::after { content: ""; display: table; clear: both; }class="clearfix"
当浮动元素设置了 width: 50%,又加了 padding: 10px 和 border: 1px solid,默认盒模型下总宽 = 50% + 20px + 2px → 超出父容器,可能触发换行或挤压其他浮动项。此时:
* { box-sizing: border-box; }(全局重置)width: 50% 包含 padding 和 border,真正占满半宽有时下移看似是浮动问题,实则是:
display: inline 或 vertical-align,干扰基线对齐white-space: nowrap,但子元素未设 white-space: normal,影响换行逻辑font-size: 0 于父级再重设子级浮动本就不是为复杂布局设计的。如需多栏、响应式排列,优先考虑:
display: flex:父容器设 display: flex,天然不塌陷,无须清除display: grid:定义行列明确,完全摆脱浮动副作用
兼容老浏览器,用浮动 + 清除 + box-sizing 组合仍是稳妥选择