1.z-index简介

(1) 概念

z-index属性指定了元素与元素之间的z轴上的顺序,而z轴决定元素之间发生覆盖的层叠关系。

(2) 属性值

1.默认auto

为什么元素添加定位属性(不包括static)后会覆盖普通元素?

元素添加定位属性(不包括static)后,z-index默认是auto,在层叠水平上相当于z-index为0,但是不会产生层叠上下文,但是会比普通元素没有z-index的层级要高。

2.数值

z-index支持正负值

3.inherit

继承父元素的z-index值

2.css中的层叠上下文

(1) 概念

层叠上下文是html中的一个概念,当一个元素元素含有层叠上下文的时候,那么此元素就更靠近我们的眼睛(假如我们看一堵墙的时候,只能看到墙,后面的东西我们看不到,那这堵墙就相当于含有层叠上下文,更靠近我们,后面的东西可以看做是普通元素)。

(2) 如何产生层叠上下文?

第一种方法,页面根元素(html页面根元素就是html)天生具有层叠上下文,我们称它为“根层叠上下文”。

字体在背景上就是以页面根元素为层叠上下文为基础进行覆盖的,字体是inline元素,而background是层叠顺序最低的元素,遵循层叠顺序。

第二种方法,定位元素的z-index为数值的层叠上下文。

div{position:absolute; z-index:1;}

第三种方法,其他css的属性。

这些属性可以看做z-index为auto

z-index值不为auto的flex项(父元素display:flex|inline-flex)。

元素的opacity值不是1。

元素的transform值不是none。

元素的mix-blend-mode值不是normal。

元素的filter值不是none。

元素的isolation值不是isolate。

position:fixed声明。

元素的-webkit-overflow-scrolling为touch。

3.css中的层叠水平

在层叠上下文中往往包含很多元素,这么多元素由层叠水平来决定z轴上的先后顺序,不至于相互打架,一起相争。

4.css中的层叠顺序

层叠顺序是指不同元素相互层叠,规定先后顺序的一套规则。而层叠上下文和层叠水平都是概念。

层叠水平有七个级别!我们引用大神张鑫旭的七阶图。

小栗子:

id为box的div内部包含span元素


根据图三我们看出,span元素由于设置负的z-index位于div后,这里我们可以从上图中块状元素覆盖z-index为负值的元素,而层叠顺序是需要在层叠上下文中,这里的层叠上下文就是根层叠上下文。

下面布局为div中有span和img元素,span在前,并且设置position:relative,图片透明度为0.7。

图四我们可以看出图片在文字之上,由于span标签已经设置了position:relative,此时span标签默认z-index:auto,根据图一我们可以看出,图片层级低于z-index:auto,此时图片应该会在文字之下,这种情况就是透明度改变了图片的层级。

图五所示,图片透明度为1,自然图片变成普通流中的元素,被相对定位元素span覆盖,这里的opacity我们可以换成上面如何产生层叠上下文第三种方法中的任意一个,请自行尝试。

5.z-index的层叠

(1) 不发生嵌套

没有层叠上下文,则根据DOM顺序,后面的覆盖前面的。

在有层叠上下文的时候,根据z-index的数值大小,谁大谁在上面。

(2) 发生嵌套

每个层叠上下文相当于每一个独立的个体,内部的元素无论z-index为多大,对最顶部同级的层叠上下文元素毫无影响。

效果如下:

子级无论z-index为何值,都不会对父级元素层级造成影响。

为了方便理解,你可以把同一层级的层叠上下文元素看做是两个不同的人,不同的人有不同的高度,你可以比较两个人的高度,但是你不能说手长身高就更高一点吧。

层叠上下文内部的其他元素的覆盖关系就是以父级为根层叠上下文,重新按照上面的规则进行覆盖。

5.z-index使用

(1) z-index的技巧

1.定位元素z-index:auto可以看成z-index:0

例如:定位元素(不包括static)的层级要比普通元素层级要高。

2.z-index不为auto会产生层叠上下文

例如:两个同级div都设置relative和z-index为数值,这两个div就会产生层叠上下文,内部元素永远不会影响到父级div的覆盖关系。

3.z-index层叠顺序终止与父级层叠上下文

(2) z-index值最好不要超过9

z-index在使用过程中,为避免一个项目多人协作产生互相覆盖的问题,所以在使用z-index的时候,不要让z-index大于9,防止同事设置弹出框或其他层级要求很高的无法覆盖。

(3) 获取最高层级

我们在用到一些插件什么的时候,有时插件有一个很高的层级,我们自定义的元素需要覆盖在其之上,这时我们可以通过js获取body内最高层级,让我们自定义的元素z-index等于最高层级的z-index+1。

下面是js获取最高层级代码,感兴趣的可以看一下。

(4) 利用z-index隐藏

在模拟button和input.submit的时候,我们可以设置样式如下:

button{

position:absolute;

z-index:-1;

}

label{

background:#999;

padding:8px 16px;

line-height:30px;

color:#fff;

}

<button id="btn"></button>

<label for='btn'></label>

上面父级无定位z-index设置,自然不会创建层叠上下文,此时层叠上下文为根层叠上下文html,则button是以为层叠上下文根元素html来进行覆盖,由于label为inline元素,button层级为z-index负值,根据层叠顺序我们可以明白button在body上面,而label位于button之上。

原文地址:http://www.cnblogs.com/Sultan-ST/p/16879742.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性