重新学习CSS后的第三天,学习制作阴影的过程中,发现的问题:
设置了box-shadow后展现的阴影:

添加transform:rotate(10deg);后的效果:

查看CodePen例子:阴影效果

一脸懵逼!再修改z-index完全没有效果。

百度之后,找到了问题的答案,也自己摸索着找到了这个问题的解决办法。下面与大家分享。

一、原因

  • 给元素设置transform属性会创建一个新的stacking context,译作层叠上下文的一个区域。
  • 原本的层叠规则就会发生变化,导致了设置了transform的元素变成了一个层叠上下文容器,也就相当于最底层。
  • 与其他兄弟元素或者外层元素依然保持原来的层叠规则,影响的只是其子元素。

二、什么是层叠上下文

相信大家都知道,css是层叠样式表,层叠上下文就是html文件渲染的时候,各个元素的堆叠规则,是css中非常重要的潜在规则。

详细规则请点击:层叠上下文和层叠顺序

三、什么情况会创建新的区域

MDN上有相关的介绍:

  • 根元素(HTML)
  • 设置了position为absolute或relative,且z-index不是auto的元素
  • 设置了z-index,且不为auto的流动元素
  • 设置了opacity,且不为1的元素
  • 设置了transform,且不为none的元素
  • 设置了mix-blend-mode值,且不为normal的元素
  • 设置了isolation 为 isolate的元素on mobile WebKit and Chrome 22+,
  • 设置position为fixed的元素

四、解决办法

不使用transform是不可能的了,那么该如何解决呢?我想到的办法是再覆盖,覆盖掉不让看见的东西。

1. 首先在元素里再创建一个标签
因为元素的before、after伪类都被占用了,只能再创建标签覆盖。

2. 应用新标签的before伪类

.shadow5 p::before {
content: "";
position: absolute;
z-index: -1;
background: #fff;
box-shadow: 0 0 40px rgba(0, 0, 0, 0.1) inset;
top:;
bottom:;
right:;
left:;
}

设置定位,以原来的元素为基准,top、bottom、right、left为0,以充满整个容器
注意:z-index的设置与原来元素的before、after中的z-index有关,必须比它的值大,不然after伪类又会显示在上面。

原文链接:https://www.jianshu.com/p/29623f046063

Transform 引起的 z-index "失效"的更多相关文章

  1. QAbstractItemView::setRootIndex(const QModelIndex & index) 失效

    问题: 在逻辑中使用了, QAbstractItemView::setRootIndex(const QModelIndex & index), 第一次设置生效, view 进入了model ...

  2. transform子元素,绝对定位失效

    公司项目需要上拉刷新功能, mui下拉刷新组件采用固定布局,无法触发浏览器自带的隐藏地址栏功能. 思路: touchmove事件监听程序中,判断滚动位置:上下顶点使用transform 移动最外层容器 ...

  3. NULL字段对于UNIQUE INDEX失效

  4. CSS3的变形transform、过渡transition、动画animation学习

    学习CSS3动画animation得先了解一些关于变形transform.过渡transition的知识 这些新属性大多在新版浏览器得到了支持,有些需要添加浏览器前缀(-webkit-.-moz-.- ...

  5. 变形transform的副作用

    前面的话   变形transform本来是一个用来处理移动.旋转.缩放和倾斜等基本操作的CSS3属性,但该属性除了完成其本职工作之后,还对普通元素造成了意想不到的影响,本文将详细介绍transform ...

  6. transform 的副作用

    transform是一些效果的集合,主要是移动.旋转.缩放和倾斜这四种基本操作,还可以通过设置matrix矩阵来实现更复杂的效果. 变形transform可以实现2D和3D两种效果. 变形transf ...

  7. 深入剖析GPU Early Z优化

    最近在公司群里同事发了一个UE4关于Mask材质的优化,比如在场景中有大面积的草和树的时候,可以在很大程度上提高效率.这其中的原理就是利用了GPU的特性Early Z,但是它的做法跟我最开始的理解有些 ...

  8. # Unity 游戏框架搭建 2019 (十六、十七) localPosition 简化与Transform 重置

    在上一篇我们收集了一个 屏幕分辨率检测的一个小工具.今天呢再往下接着探索. 问题 我们今天在接着探索.不管是写 UI 还是写 GamePlay,多多少少都需要操作 Transform. 而在笔者刚接触 ...

  9. 来看看css3中的box-shadow

    不谈IE,只谈谈box-shadow的具体使用方法 语法: E {box-shadow: <length> <length> <length>?<length ...

  10. hexo的next主题个性化教程:打造炫酷网站

    看到有些next主题的网站很炫酷,那么是怎么配置的呢?接下来我会讲一讲如何实现一些炫酷的效果 主要有以下32种: 在右上角或者左上角实现fork me on github 添加RSS 添加动态背景 实 ...

随机推荐

  1. 在IE中检查控件是否安装成功

    步骤: 1.打开图片上传页面   2.打开IE加载项   3.在加载项中可以看到加载的控件 4.点击详细信息,查看文件名称和文件位置

  2. java 七牛上传图片到服务器(采用的html5 压缩 传输base64方式)

    //html 页面如下<div class="form-group"> <label class="col-sm-2 control-label&quo ...

  3. 在云主机后台进行python程序运行

    nohup python main.py & nohup liunx自带的命令 注意:后面(&)!

  4. mvc 高并发解决方案之一---存储过程

    MVC用户访问多线程,一般的lock是无法造成单例的. 存储过程既是一种解决方案,先来看看存储过程优缺点: A. 存储过程允许标准组件式编程 存储过程创建后可以在程序中被多次调用执行,而不必重新编写该 ...

  5. angular 模板表单

  6. asp.netcore+jenkins+docker+svn+centos7.2 持续集成,每天凌晨获取最新代码打包发布

    运行环境: centos7.2服务器或则虚拟机 可以是腾讯云也可以是内网服务器,(如果是内网服务器需要用frp做内网穿透,这样才可以通过外网访问该服务器) svnserver 来托管代码 一.安装je ...

  7. pycharm设置连接

    https://blog.csdn.net/u013088062/article/details/50100121

  8. 趣图:TCP 与 UDP 的差别

      趣图:程序猿和运维狗的工作日常…… 趣图:Java 和 PHP 之间的战斗

  9. 【bzoj4514】: [Sdoi2016]数字配对 图论-费用流

    [bzoj4514]: [Sdoi2016]数字配对 好像正常的做法是建二分图? 我的是拆点然后 S->i cap=b[i] cost=0 i'->T cap=b[i] cost=0 然后 ...

  10. 在Delphi中获取和修改文件的时间

    转载自 http://www.cnblogs.com/jieke/archive/2013/01/11/2855782.html 本文介绍了在Delphi中利用系统函数和Windows API函数调用 ...