CSS3 Transform 引起的 z-index "失效"
两个页面使用的css3 Transform动画之后,页面下子元素的z-index就失效了,就算设置的再大的值也不会起作用,但是一个页面的时候是没有问题的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
两个页面使用的css3 Transform动画之后,页面下子元素的z-index就失效了,就算设置的再大的值也不会起作用,但是一个页面的时候是没有问题的
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
这里涉及到一个
stacking context
(有人翻译为层叠上下文
)的概念。给元素设置
transform
属性会创建一个新的stacking context
。请看下面的具体讲解:
注:以下两个例子最好先想象一下预览效果,再查看结果预览页面。
先上一个小例子:
http://jsfiddle.net/2tss9rp3/embedded/html,css,result
上面这个例子中,两个div都没有设置任何
position
,如果没有给test-1
添加transform
属性的话,第二个div将会覆盖第一个div。但是如果设置了transform
的话呢?由于transform
会创建一个新的stacking context
。在层级关系上就要比test-2
高一级,因此,显示在上面。再来一个例子,
http://jsfiddle.net/2tss9rp3/1/embedded/html,css,result
这个例子了是对上面那个例子作了个简单的修改。我们给
test-1
添加了一个position: relative
,test-2
没有任何position
属性,只是添加了一个transform
的属性。如果不看预览页面的话,可能会以为test-1
会显示在test-2
上方,其实不然。由于transform
会创建新的stacking context
,同时test-2
在文档中又处于test-1
的后面,所以最终的效果是test-2
显示在test-1
的上方。那么问题来了,哪些情况下会创建新的
stacking context
呢?MDN上有相关的介绍:
其中,第二条是我们平时最常见的,另外几条加粗的会随着CSS3的普及越来越常见。令我感到惊奇是,
opacity
竟然也会创建新的stacking context
,你可以试着将上面两个例子中的transform
换成opacity
,会得到同样的效果。值得注意的是,介绍
stacking context
的文章显然不像介绍CSS中另外一个“上下文”——Block formatting context
(块级格式上下文)的文章多,原因可能是,我们在平常很少遇到stacking context
相关的问题,但是随着CSS3的普及,这方面的问题可能会多起来的。这也算是CSS中一个比较有趣而且有用的知识点,之前在工作中遇到过一次,正好此处有人问到,特整理了一下,供参考。
补充
说了这么多,回到你这个具体的问题上来,由于你没有提供具体的代码,不好说出具体的问题所在,但可以推测出你的代码中可能有类似下面这个例子中的结构。你给
.child
设置再大的z-index
都没有用。但是如果将.inner
的transform
去掉就不一样了。试试看。http://jsfiddle.net/2tss9rp3/4/embedded/html,css,result
参考链接
transform是插件定义的父元素引起子元素z-index失效 怎么办~~
我也知道去掉transform 没别的办法么
刚好遇到了这个问题
对于此问题,我的解决方法是
{
position:absolute;
z-index:1
}
联合使用,手动指定图形位置。
在绑定transform元素的父级的上一层父级写: transform-style: preserve-3d;如何呈现3d空间里面的子元素,然后就可以用z-index了
给绑定z-index属性的元素添加 transform: translateZ(1px);就可以了,亲测有效
动画的父级加上overflow:hidden,我出现这个问题的情况是需要有一个卡片翻转的效果 结果背景把卡片给遮挡住了