You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于background overlay与z-index的疑问:z-index:-1遮罩为何仍可见?

背景遮罩效果的z-index疑问解答

实现代码

HTML 代码

<section id="hero">
        <div class="hero container">
            <div>
                <h1>Hello, My Name is </h1>
                <a href="#" type="button" class="cta">Porfolio</a>
            </div>
        </div>
</section>

CSS 代码

.container {
    background-image: url(./img/someimg.jpg);
    background-size: cover;
    background-position: top center;
    position: relative;
    z-index: 1;
}

.container::after {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    height: 100%;
    width: 100%;
    background-color: black;
    opacity: .7;
    z-index: -1
}

疑问解答

  • 为什么遮罩(.container::after)的z-index设为-1还能显示?
    伪元素是.container的子元素,z-index的层级是相对父元素的堆叠上下文而言的。.container设置了position: relative和z-index:1,相当于创建了一个独立的堆叠上下文(可以理解为专属的“层级舞台”)。在这个舞台里,伪元素的z-index:-1是舞台内的最底层,但父元素的背景图片本身属于元素的“背景层”,比舞台内所有子元素的层级都低。所以伪元素哪怕z-index为-1,也会盖在背景图片之上,同时低于父元素内的文本、按钮等内容,因此能正常显示遮罩效果。

  • 为什么只有文本和锚点标签能在遮罩之上(看起来像是获得了z-index:1的层级)?
    首先,.container的z-index:1是用来和页面中其他同级元素(比如相邻的section、div)比拼层级的,不是直接传给子元素。而父元素内的文本、锚点等子元素,默认处于父元素堆叠上下文的“内容层”,这个层级在父元素内部天然高于伪元素(z-index:-1)。加上伪元素是绝对定位但z-index在父元素的堆叠上下文里更低,所以文本和锚点能显示在遮罩上方,并且不会被伪元素遮挡,保持可点击状态。

内容的提问来源于stack exchange,提问作者JJ Cha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:52:08