浮动与定位元素重叠本质是层叠上下文与文档流冲突,解决核心是明确层级关系而非仅调z-index;浮动属文档流,定位元素脱离文档流,覆盖与否取决于层叠上下文。
浮动元素和定位元素重叠,本质是层叠上下文与文档流冲突导致的显示问题。解决核心在于明确谁该在上层、谁该让出空间,而不是单纯调顺序或加 z-index。
浮动元素(float)仍属于普通文档流(只是视觉上偏移),而绝对定位(position: absolute)或固定定位(position: fixed)会脱离文档流。当两者尺寸/位置重合,浏览器按默认层叠顺序渲染:定位元素通常会覆盖浮动元素——但这不是绝对的,取决于是否建立了新的层叠上下文。
如果浮动和定位本不该共存于同一区域,说明布局设计有冗余。更健壮的做法是:
z-index 只对定位元素(position 值为 relative/absolute/fixed/sticky)生效,对浮动元素无效。正确做法是:
opacity、transform、filter、will-change 等属性会触发新层叠上下文,可能导致 z-index 失效。例如:
父容器设置了 opacity: 0.99 → 它成了新层叠上下文 → 子元素的 z-index 只在该容器内比较,无法盖过外部定位元素排查时可临时移除这些样式,确认
是否为层叠上下文干扰所致。