美文网首页
为什么的我的z-index不生效了??

为什么的我的z-index不生效了??

作者: viviChen | 来源:发表于2021-11-10 16:45 被阅读0次

最近开发时遇到了一个有趣的现象z-index&transform等连用造成了z-index不生效,因此想借此机会记录一下学习成果。

本篇文章偏概念性,请在专业人士的监督下食用。

原文:https://www.yuque.com/u548790/tech/anns1h

Stacking Context 层叠上下文

这是 HTML 中的一个三维概念(举个不太合适的🌰类似皮影戏?)用图片更容易明白。

假设这是我们看到的一个页面(左图),但是实际上他是通过这样展现的(右图),我们肉眼所见的画面可能是多个层叠加展示的,由此就会涉及到不同层的层级问题。

image image

stacking context - mdn - 链接

Stacking Context 的创建

这里只简单介绍一下常用的 Stacking Context 。

  1. 天生具有 Stacking Context 的元素: HTML

  2. 常用混搭款:

    1. position的值为relative/absolute && z-index !== 'auto'会产生 Stacking Context ;
    2. position的值为fixed/sticky
    3. display: flex/inline-flex/grid && z-index !== 'auto'
    4. transform/filter !== 'none'
    5. opacity < 1
    6. -webkit-overflow-scrolling: touch

Stacking Context 的关系

  1. Stacking Context 可以嵌套,但内部的 Stacking Context 将受制于外部的 Stacking Context;
  2. Stacking Context 和兄弟元素相互独立;
  3. 元素的层叠次序是被包含在父元素的 Stacking Context 中的;
  4. 通常来说,最底层的 Stacking Context 是 <HTML>标签创建的。

层叠次序

在一个层叠上下文内,不同元素的层叠次序如下图所示(由内到外):

  1. 最底层的是当前层叠上下文的装饰性内容,如背景颜色、边框等;
  2. 其次是负值的 z-index;
  3. 然后是布局相关的内容,如块状盒子、浮动盒子;
  4. 接着是内容相关的元素,如inline水平盒子;
  5. 再接着是 z-index:auto/0/不依赖 z-index 的(子)层叠上下文;
  6. 最上面的就是 z-index 值为正的元素;

概括来说,z-index为正 > z-index:auto/z-index:0/不依赖z-index的层叠上下文 > 内容 > 布局 > 装饰。

image

选自张鑫旭《CSS世界》图7-7

回应标题:为什么我的 z-index 不生效了?

这个标题内容非常的宽泛,我们提供如下的解题思路:

  1. 是否配合使用了可用的 postion / 弹性布局 / grid布局?

    1. 没配合自然不生效。
  2. z-index: -1; 为什么没有生效?

    1. 检查你对应的父元素是否也创建了 Stacking Context,大概率是的,根据 #层叠顺序那一章可以知道,负的z-index的次序是高于当前层叠上下文的背景的;
    2. 解决方案:取消父元素的 Stacking Context / 元素外包裹一层新的元素。

相关文章

  • 为什么的我的z-index不生效了??

    最近开发时遇到了一个有趣的现象z-index&transform等连用造成了z-index不生效,因此想借此机会记...

  • z-index不生效

    今天使用了z-index,不生效的原因就是他这个是相对于父元素的z-index来说的,如果容器内部的定位元素相互遮...

  • CSS属性:z-index问题

    当定义的CSS中有position属性值为absolute、relative时,用z-index取值才能生效,z-...

  • 搞懂Z-index的所有细节

    Z-index测试网站 一 z-index 在什么情况下才生效? Z-index的运用是需要条件的,与其相关的属性...

  • CSS中z-index不起作用

    不想生命被时光遗忘,所以要一直往前奔跑. 有时候在设置div的堆叠问题时会遇到设置了z-index但是不生效的问题...

  • h5之视频播放疑难点

    流量保护,自动播放属性不生效,必须通过用户手动触发视频播放。 video层级过高,设置z-index无效。 微信端...

  • [CSS] fixed 子元素的 z-index

    1. 现象 下拉框设置了 z-index 为 1000,却没有遮住底下 z-index 为 5 的内容。 1.1 ...

  • 元素的层级

    z-index 如果没有开启定位的元素或者是定位为默认值,会忽略z-index的声明 2.父元素的层级再怎么高也不...

  • 2018-04-04

    禁用密码复杂度和密码长度为0不能同时生效,否则组策略不生效

  • 微信小程序 bindtap点击无响应的问题

    我的问题是元素的图层关系导致的:我要裱框、我要裱轴所在的view的z-index为z-index:0,该view上...

网友评论

      本文标题:为什么的我的z-index不生效了??

      本文链接:https://www.haomeiwen.com/subject/erhizltx.html