遮罩层没盖住内容通常因未设置定位属性导致z-index失效,需设position:fixed/absolute并确保无父级层叠上下文干扰,同时z-index值应显著高于目标元素且body滚动需禁用。
遮罩层没盖住内容,通常不是 z-index 没设,而是它没生效——z-index 只对定位元素(position 值为 relative/ab
solute/fixed/sticky)起作用。
即使写了 z-index: 9999,如果遮罩层的 position 是默认的 static,z-index 就完全被忽略。
position: fixed(推荐,全屏覆盖且不随滚动偏移)或 position: absolute
.mask {
position: fixed;
top: 0; left: 0;
width: 100vw; height: 100vh;
background: rgba(0,0,0,0.5);
z-index: 9999;
}
如果遮罩层的某个祖先元素设置了 position: relative + z-index(哪怕只是 1),它就可能成为新的层叠上下文,导致子级的 z-index 只在该上下文内比较,无法压过同级其他模块。
z-index、opacity 、transform、filter 等会触发新层叠上下文的样式
z-index 或 transform,观察遮罩是否恢复正常被遮罩的内容本身也可能有较高的 z-index,或者它的父容器已形成更强的层叠上下文。
z-index(尤其 Modal、Header、Fixed Nav 等常用组件)用 position: fixed 的遮罩虽能稳居顶层,但如果页面本身可滚动,有时会因 body 未禁用滚动导致遮罩下仍有内容可见。
加上 overflow: hidden
overflow: auto 或原有值(可用 class 切换控制)