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

如何让fixed定位元素置于CSS mask-image遮罩之上?

问题:Fixed定位元素被mask-image遮罩覆盖,z-index无法解决

我有一个带mask-image的可滚动容器,用mask实现了适配任意背景色的上下透明淡出效果。现在需要将容器内的子元素设置为position: fixed并置于遮罩上方,但遮罩始终处于顶层,调整z-index也无法解决该问题。

原代码示例

CSS

.faded {
  z-index: 1;
  background: red;
  width: 150px;
  height: 100px;
  overflow: auto;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 48px, black calc(100% - 48px), transparent 100%)
}

.fixed-header {
  position: fixed;
  top: 0;
  background: green;
  left: 0;
  z-index: 99999;
}

HTML

<div class="faded">
  <div class="fixed-header">
    Fixed Header
  </div>
  1) Item 1 - Test<br />
  2) Item 2 - Test<br />
  3) Item 3 - Test<br />
  4) Item 4 - Test<br />
  5) Item 5 - Test<br />

  6) Item 6 - Test<br />
  7) Item 7 - Test<br />
  8) Item 8 - Test<br />
  9) Item 9 - Test<br />
  10) Item 10 - Test<br />

  11) Item 11 - Test<br />
  12) Item 12 - Test<br />
  13) Item 13 - Test<br />
  14) Item 14 - Test<br />
  15) Item 15 - Test<br />
</div>

原因分析

直接给容器设置mask-image会创建一个堆叠上下文,容器内的所有子元素(包括fixed定位的元素)都会被限制在这个堆叠上下文内部。无论子元素的z-index设多高,都无法突破容器的遮罩层——因为遮罩是容器本身的一部分,属于更高层级的堆叠上下文。

解决方案

把遮罩效果用容器的伪元素实现,这样遮罩作为容器的上层伪元素,不会影响子元素的堆叠层级。同时fixed定位的元素会脱离文档流,不受容器堆叠上下文的限制,就能正常显示在遮罩上方。

修改后的代码

CSS

.faded {
  z-index: 1;
  background: red;
  width: 150px;
  height: 100px;
  overflow: auto;
  position: relative; /* 让伪元素相对于容器定位 */
}

/* 用伪元素实现遮罩,替代直接给容器加mask-image */
.faded::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  pointer-events: none; /* 不阻挡容器内的滚动、点击等交互 */
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 48px, black calc(100% - 48px), transparent 100%);
  background: inherit; /* 继承容器背景色,实现适配任意背景的淡出效果 */
}

.fixed-header {
  position: fixed;
  top: 0;
  background: green;
  left: 0;
  z-index: 99999;
}

HTML

<div class="faded">
  <div class="fixed-header">
    Fixed Header
  </div>
  1) Item 1 - Test<br />
  2) Item 2 - Test<br />
  3) Item 3 - Test<br />
  4) Item 4 - Test<br />
  5) Item 5 - Test<br />

  6) Item 6 - Test<br />
  7) Item 7 - Test<br />
  8) Item 8 - Test<br />
  9) Item 9 - Test<br />
  10) Item 10 - Test<br />

  11) Item 11 - Test<br />
  12) Item 12 - Test<br />
  13) Item 13 - Test<br />
  14) Item 14 - Test<br />
  15) Item 15 - Test<br />
</div>

关键说明

  • 伪元素::after作为遮罩层覆盖在容器上方,pointer-events: none保证它不会干扰容器内内容的交互。
  • background: inherit确保遮罩层和容器背景色一致,保留了“适配任意背景色”的淡出效果。
  • fixed定位元素脱离了容器的堆叠上下文,自然能显示在遮罩层上方。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:27:10