1.属性特点
z-index属性是用来控制元素的堆叠顺序,z-index的值越大,元素的层级越高。当元素重叠时,层级高的会覆盖在层级低的上面,使层级低的元素的重叠部分被遮盖住。
2.取值范围
z-index属性的值分为三种:auto(默认值):与父元素的层级相等,如各级祖先元素均未设置该属性,则类似于0、number:整数数值,在兼容所有浏览器的取值范围是 -2147483584 ~ 2147483584,数值越大,层级越高,数值越小,层级越低、inherit:继承父元素的z-index的属性值。
3.适用范围
z-index属性只能在设置了position: relative | absolute | fixed的元素和父元素设置了 display: flex属性的子元素中起作用,在其他元素中是不作用的。
4.从父属性
当父元素设置了z-index属性时,子元素的z-index属性只与同级元素和父级元素作比较时才有意义,与其他元素对比时无意义。此时子元素与父元素外的所有的外部元素进行堆叠层级顺序对比时,都以父元素的z-index属性值为准进行对比,子元素本身的z-index属性值无效。
当父元素未设置了z-index属性,子元素的z-index属性与父元素外的所有的外部元素进行堆叠层级顺序对比时,都以元素本身的z-index属性值为准进行对比
5.举例说明
1.普通例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> .box1 { width: 200px; height: 200px; background: #f00; position: absolute; left: 0px; top: 0px; z-index: 2; } .box2 { width: 400px; height: 400px; background: rgb(0, 255, 123); position: absolute; left: 50px; top: 50px; /*定层 */ z-index: 1; } .box3 { width: 600px; height: 600px; background: rgb(55, 0, 255); position: absolute; left: 100px; top: 100px; /*定层 */ z-index: 3; } </style> </head> <body> <div class="box1"></div> <div class="box2"></div> <div class="box3"></div> </body> </html> <!-- 场景:改变定位元素的层级 属性名:z-index 属性值:数字 数字越大,层级越高 -->
复制
这个例子很简单,很容易看出,z-index的取值越大,层级越高(层级高的覆盖层级低的)。
2.从父例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <style> * { margin: 0; padding: 0; } .father1 { width: 200px; height: 200px; background-color: red; position: relative; z-index: 2; } .father2 { width: 200px; height: 200px; background-color: green; position: relative; top: -30px; left: 30px; z-index: 1; } .son1 { width: 100px; height: 100px; background-color: blue; position: absolute; left: 110px; top: 143px; z-index: 1; } .son2 { width: 100px; height: 100px; background-color: yellow; position: absolute; left: 51px; top: 7px; z-index: 6; } </style> <body> <div class="father1"> <div class="son1"></div> </div> <div class="father2"> <div class="son2"></div> </div> </body> </html>
复制
从这个例子可以看出它的从父属性
当父元素设置了z-index属性时,即认为设置了一个结界,父元素里面的子元素z-index只跟自己结界内有关,结界内子元素比较遵循以下原则:
1、子元素无论是否设置z-index或者设置值比父元素小,层级一定都在父元素之上。所以例子里的蓝在红的上面,黄在绿的上面。因为两个父级元素中红大于绿,所以红在绿上面。所以总体排序为蓝,红,黄,绿。(这个例子懂了,从父属性就懂了)
2、子元素的z-index属性只与结界内元素对比有意义,如子元素未设置z-index则视为0。结界外的元素只会与父元素z-index比较,根据层级大小整体覆盖在父元素的上面或整体垫底在父元素的下面,不会参与结界内部z-index排序。
3、当父元素未设置z-index属性,不会生成结界,默认父元素z-index=0,父元素会参与子元素的z-index排序。
4、相同的z-index值比较,元素书写顺序在后面的层级高于前面的。