浮动元素不参与层叠上下文,z-index对其无效;需配合position: relative才能生效;祖先的z-index会创建独立层叠上下文;推荐用Flex/Grid替代。
浮动元素(float)本身不参与层叠上下文(stacking context)的常规排序,z-index 对纯浮动元素无效——这是层叠顺序出错的根本原因。
设置了 float: left 或 float: right 的元素,即使加了 z-index,也不会按预期提升或压低层级。因为 z-index 只对定位元素(position 为 relative、absolute、fixed 或 sticky)生效。
float,改用 display: inline-block 或 Flex/Grid 布局更可控position: relative(哪怕不偏移),才能让 z-index 生效position: relative + z-index 就足够,无需配合 top/left 等偏移值如果浮动元素的某个祖先设置了 z-index(且 position 有效),它会创建新的层叠上下文,导致内部所有子元素的 z-index 都只在该上下文中比较,无法与外部兄弟元素竞争层级。
position + z-index
浮动元素仍属于普通文档流,其渲染顺序受 HTML 结构先后和浮动方向共同影响。比如左浮动元素会尽可能靠左上排列,后出现的浮动块可能被前一个“推下”,此时视
觉位置不等于层叠顺序。
position: relative + z-index)clear 控制浮动后的换行,防止意外覆盖浮动本就不是为复杂层叠设计的。CSS Grid 和 Flexbox 天然支持顺序控制和层级管理,推荐逐步迁移:
display: flex,通过 order 属性精确控制显示顺序display: grid,配合 z-index 和 grid-area 明确层叠关系float 降级,但核心逻辑用现代布局实现