浮动导致父容器塌陷时,首选 clearfix 清除浮动(兼容性好、无裁剪副作用),次选 overflow: hidden(触发 BFC 但会裁剪溢出内容);现代布局应直接用 flex 或 grid 替代浮动。
父容器高度塌陷、子元素跑出可视区域,本质是浮动脱离文档流导致的。直接给父容器加 overflow: hidden 最快,但会意外裁剪溢出内容(比如下拉菜单、阴影、定位偏移);用 clearfix 更稳妥,兼容性好,不干扰视觉表现。
它触发了 BFC(块级格式化上下文),BFC 容器会包含内部浮动元素的高度计算。但副作用明显:
position: absolute 偏移、box-shadow、transform 位移)会被强制裁剪touch-action 时)overflow: hidden 触发 BFC 的某些边界情况.container {
overflow: hidden; /* 触发 BFC,父容器重新计算高度 */
}本质是在父容器末尾插入一个清除浮动的伪元素,不依赖 BFC,也不影响溢出渲染。主流框架(Bootstrap、Ant Design)都内置类似逻辑:
.clearfix::after {
content: "";
display: table;
clear: both;
}
/ 使用时只需加 class /
左栏
右栏
::after 必须设 display: table 或 block,clear: both 才生效display: inline-block,它无法触发清除行为display: flex 或 grid,根本不需要清除浮动——浮动在这些上下文中自动失效浮动本就不是为布局设计的,CSS3 布局方案已完全可替代。遇到浮动溢出,优先考虑重构而非“修复”:
display: flex
flex: 1 更可控display: grid 配合 fr 单位更简洁float 加 display: inline-block 或 flex 反而更稳.container {
display: flex;
}
.left { flex: 0 0 200px; }
.right { flex: 1; }浮动溢出问题背后,往往暴露的是布局思路滞后。真正难的不是选 clearfix 还是 overflow,而是判断此刻该不该继续用浮动。