嵌套越深浮动越容易“消失”是因为浮动只影响直接父容器,不向上冒泡;每层父容器都需单独触发BFC或清除浮动,否则塌陷导致布局错乱。
不是浮动本身变弱了,而是浏览器对浮动的感知是“单层穿透”的:浮动子元素只影响它的**直接父容器**,不会向上“冒泡”通知爷爷、太爷爷级容器。一旦某一层父容器没做任何处理(比如没触发 BFC、也没清除浮动),它就会塌陷成 height: 0,后续所有依赖它定位、包裹或背景渲染的样式就全乱了。
.sidebar 没清浮动,但你只在最外层 .page 加了 clearfix
.nav 的父容器(比如 .header)高度为 0,而 .nav 自己又浮动了,彻底脱离上下文outline: 1px solid red 一查,发现某层容器“看不见”——那就是它塌陷了,不是代码漏写了,是那层没被干预浮动

.card → .card-body → .tag-list),就得在 .card、.card-body、.tag-list 三层分别处理,而不是只给 .card 加个 ::after 就万事大吉。
.tag-list 浮动了子项 → 它自己必须包裹住这些子项(加 display: flow-root 或 ::after).card-body 包含 .tag-list → 它也要能正确计算高度,否则 .card 看不到内容,背景/阴影全失效.clearfix::after 放在全局,结果只生效于最后一层,中间层照样塌陷很多组件库默认给卡片、弹窗、Tab 面板加 position: relative,本意是为绝对定位子项服务,但它会让浮动子项的定位参考系突然切换——尤其当该层又没设 height 或触发 BFC 时,浮动元素可能“飘”出可视区,或者被意外裁剪。
overflow: hidden 在某中间层使用?小心它把下拉菜单、Tooltip、气泡框全截掉position: relative + float 组合,若没配 min-height 或 BFC,父容器高度仍为 0,只是你没立刻察觉Flex 和 Grid 天然不脱离文档流,父容器自动撑开,根本不存在“哪一层忘了清”的问题。这不是升级炫技,是去掉一个必须手动维护的脆弱链路。
.sidebar 和 .main 的共同父容器设为 display: flex,子项去掉 float,用 flex: 1 分配宽度 —— 嵌套再深也不用管“清不清”display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)),等高、换行、响应式全自带display: flex 和 grid 在 IE11+、所有现代浏览器稳定运行;真要保 IE9–10,display: table-cell 比 float 更可控.card {
display: flow-root; /* 推荐:语义清晰,无裁剪风险 */
}
.card-body {
display: flow-root;
}
.tag-list {
display: flow-root;
}嵌套浮动真正难的不是写清除代码,而是记住“每层都是独立战场”,稍有遗漏,错位就从 DOM 深处悄然发生。