【CSS】opacity 影响 z-index 不生效

准备知识

一般来说,z-index 不生效的原因有:

  1. 父元素的 position 属性:

    z-index 只对 position 属性为 relative、absolute 或 fixed 的元素有效。

  2. 其他元素的 z-index:

    如果页面中有其他元素也设置了较高的 z-index,可能会覆盖你的 .app 元素。

  3. CSS 特性:

    z-index 的效果可能受到 CSS 特性的影响,例如 transform、opacity 等。

    确保没有其他 CSS 特性干扰 z-index 的效果。

我的项目中就是由于第三点,opacity 影响了 z-index ,导致 z-index 不生效。

我的某个元素同时具有 link 和 download 选择器,代码如下:

css 复制代码
.link {
  display: inline-block;
  margin-right: 10px;
  color: $bgGrayColor;
  font-size: $fontSize12;
  line-height: 14px;
  padding: 0 14px;
  // 字体变暗
  opacity: 0.8;  // 该 属性 导致 z-index 不生效
  // 去掉默认样式
  text-decoration: none;
}

.download {
  //局部的相对定位使用 子绝父相
  position: relative;

  .app {
    display: none;
    position: absolute;
    top: 25px;
    left: 0;
    padding: 8px;
    box-shadow: 0 4px 8px 0 rgb(0 0 0 / 10%);
    z-index: 10000;  // 不生效

    .ecode {
      width: 140px;
      height: 140px;
    }

    .name {
      color: #000;
      margin-top: 2px;
    }
  }
}

解决方法

  • 将 opacity 应用到子元素:将 opacity 应用到 .app 的子元素而不是 .app 本身,这样不会影响 .app 的堆叠上下文。
  • 或者 去除 opacity

原因分析

  • 当一个元素的 opacity 小于 1 时,它会创建一个新的堆叠上下文(stacking context),这可能会导致 z-index 无法按预期工作。
相关推荐
小玮看世界3 小时前
[Python]从“脏”数据到优雅实现:一个IoT滑动窗口最大值问题的测试驱动优化实录
linux·前端·python
尤乐娃子3 小时前
进入大厂(厂子大)实习Day11
前端·笔记·实习
xiaoxiangsiyan3 小时前
运维之前端反调试学习
运维·前端·学习·状态模式
小徐_23334 小时前
TRAE WORK 实战,之前写一篇水文要半天,现在用 TRAE Work 摸鱼2分钟交差,真香!
前端·trae
明月_清风4 小时前
🤗 Hugging Face 模型上传完全指南:从本地到 Hub 的 4 种姿势
前端·后端·ai编程
sugar__salt4 小时前
跟着 Demo 学 Pinia:两种仓库写法 + 完整 TodoList 复现
前端·javascript·vue.js·前端框架·vue
To_OC4 小时前
从一个名字编辑组件开始,我把 React + TS 的数据流和副作用彻底搞明白了
前端·react.js·typescript
程序员黑豆5 小时前
Java入门第一步:从零开始编写你的第一个Hello World程序
java·前端·ai编程
凌涘5 小时前
前端路由(二):React Router 组件化路由实战
前端