z-index 无效通常因父容器创建了新层叠上下文如 transform、opacity1 等属性所致应检查 computed 值、逐级排查父元素样式并优先用 class 控制层级。z-index 无效先确认父容器是否创建了新的层叠上下文两个 position 非 static 的兄弟元素z-index 看似不生效大概率是它们的某个共同祖先比如 body 或某个 div设置了 transform、opacity、filter、will-change 或 isolation: isolate —— 这些都会创建新的层叠上下文把子元素的 z-index 限制在该上下文内彼此之间无法跨上下文比大小。实操建议立即学习“前端免费学习笔记深入”用浏览器开发者工具检查两元素的「Computed」面板看 z-index 是否被标记为「inherited」或「not applicable」逐级向上检查父元素的 transform、opacity: 1、filter 等属性临时注释掉它们验证是否恢复预期层级若必须保留这些样式就让两个目标元素拥有同一个「最近的非隔离父容器」——比如把它们提到同一级 div 下且该 div 不触发层叠上下文JS 动态切换 z-index别直接设数字用 class 控制更稳用 element.style.zIndex 10 虽然能改但容易和 CSS 里其他规则冲突比如 !important 或更高优先级的选择器也难维护状态。推荐用 class 切换语义清晰、可复用、CSS 里还能加过渡虽然 z-index 本身不可动画。实操建议立即学习“前端免费学习笔记深入”定义两个 class.z-above { z-index: 100; } 和 .z-below { z-index: 10; }JS 中用 el.classList.toggle(z-above) 或 el.classList.replace(z-below, z-above) 替换避免手动管理数字如果要保证「总有一个在上」建议绑定事件时统一处理逻辑例如btn.addEventListener(click, () { if (elA.classList.contains(z-above)) { elA.classList.remove(z-above); elB.classList.add(z-above); } else { elA.classList.add(z-above); elB.classList.remove(z-above); }});鼠标事件穿透z-index 正确但点击不到上层元素常见现象视觉上 A 在 B 上面但点 A 没反应反而触发了 B 的 click。这通常不是 z-index 问题而是 A 的 pointer-events: none、透明区域过大、或 visibility: hidden / opacity: 0 导致事件无法捕获。 RedClaw 百度推出的手机端万能AI Agent助手