本文主要是介绍z-index负值深入理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
补充点小知识:
CSS3与新时代的层叠上下文:
css3之前,可能我们说会影响层叠上下文的也就position属性了,那CSS3时代的到来,对层叠上下文规则带来了新的影响,css3时代会影响层叠上下文的除了定位还有:
- 元素为flex布局元素(父元素display:flex|inline-flex),同时z-index值不为auto
- 元素的opacity值不是1
- 元素transform值不是none
- 元素的filter值不是none
除了上面的还有别的,这里暂时先提这些哈!
其实我以前没有考虑过z-index负值的情况,也没有用上过,但了解过之后,发现有些时候,z-index设置为负值也还挺好用的,所以自己就查了一些资料,现在整理出来
z-index为负值的最终表现并不一致,它与“层叠上下文”和“层叠顺序”密切相关
层叠上下文和层叠顺序:(下图是来自参考张鑫旭大神的7阶层叠顺序图)
在上图中我们也可以看出z-index负值元素的层级是在层叠上下文元素上面、block元素的下面,也就是说z-index虽然名为负数层级,但依然无法突破当前层叠上下文所包裹的小世界
嗯,然后我们看个小例子:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>.box{background:url("3.jpg");}</style>
</head>
<body>
<div class="box box1" style="width:200px; height:100px; margin-bottom:10px; "><img title="胡歌" src="0.jpg" style="width:200px; height:100px; position:relative; z-index:-1; left:150px;"/>
</div><div class="box box2" style="width:200px; height:100px;opacity:0.8;"><img title="胡歌" src="0.jpg" style="width:200px; height:100px; position:absolute; z-index:-1; left:150px;"/>
</div>
</body></html>
在上面的例子中,box1没有创建层叠上下文,而box2我们为其添加了opacity:0.8,根据我前面补充的知识,它是会创建层叠上下文的,所以我们看最后的呈现结果如下图:
默默的图是背景图,胡歌的图是div的子元素
从上面的图中我们可以明显的看到,第一张是背景图在上面,而第二个是背景图在下,这也就和上面的层叠顺序图相符,即z-index负值应该在层叠上下文元素的背景色之上
注:我测试了为box2设置position:relative;去让box2创建层叠上下文,但此时背景图还是在上面,并不能达到上面的效果,我想了想,推测是因为我们之前说过,当我们为元素设置为定位(除position:static外),即便我们不为其添加z-index值,它的默认值也为z-index:auto;所以看上面的层叠顺序表也就好解释为什么了
那z-index负值在实际项目中有什么用呢?
- 可访问性隐藏
- 定位在元素的后面:
看一个模拟纸张效果的例子:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>边角效果</title><style>.box{background-color: #666;width:300px;height:200px;position: relative;z-index: 0;}.content{width:100%;height:100%;background-color: #e15671;position: relative;}/*边角卷边阴影*/.content:before,.content:after{content: '';width:90%;height:20%;box-shadow:0 8px 16px rgba(0,0,0,.3);position: absolute;z-index: -1;}.content:before{transform: skew(-15deg) rotate(-5deg);transform-origin: left bottom;left:0;bottom: 0;}.content:after{transform: skew(15deg) rotate(5deg);transform-origin: right bottom;right: 0;bottom: 0;}</style>
</head>
<body>
<div class="box"><div class="content">donna</div>
</div></body></html>
效果图如下:
这篇关于z-index负值深入理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!