z-index属性是用来设置元素的堆叠顺序或者叫做元素层级,z-index的值越大,元素的层级越高,本文给大家讲解CSS 中的 z-index 属性实例代码,感兴趣的朋友跟随小编一起看看吧
一、简介
本文主要是对z-index
属性进行详细的讲解,包括其使用场景、属性效果、适用范围等等。本博客的所有代码执行的浏览器环境,都是以Chrome浏览器为准。
1、属性作用
z-index
属性是用来设置元素的堆叠顺序或者叫做元素层级,z-index
的值越大,元素的层级越高。当元素发生重叠时,层级高的元素会覆盖在层级低的元素的上面,使层级低的元素的重叠部分被遮盖住。
当父元素设置了z-index
属性时,子元素的z-index
属性只与同级元素和父级元素作比较时才有意义,与其他元素对比时无意义。此时子元素与父元素外的所有的外部元素进行堆叠层级顺序对比时,都以父元素的z-index
属性值为准进行对比,子元素本身的z-index
属性值无效。
当父元素未设置了z-index
属性,子元素的z-index
属性与父元素外的所有的外部元素进行堆叠层级顺序对比时,都以元素本身的z-index
属性值为准进行对比。
2、取值范围
z-index
属性的值分为三种:auto(默认值):与父元素的层级相等,如各级祖先元素均未设置该属性,则类似于0
、number:整数数值,在兼容所有浏览器的情况下取值范围是 -2147483584 ~ 2147483584,数值越大,层级越高,数值越小,层级越低
、inherit:继承父元素的z-index的属性值
3、适用范围
z-index
属性只能在设置了position: relative | absolute | fixed
的元素和父元素设置了 display: flex
属性的子元素中起作用,在其他元素中是不作用的。
二、使用场景
1、同级元素之间
① 两个设置了定位且z-index
属性值不同的同级元素
他们之间的层级,由z-index
属性值决定,属性值大的,层级高,显示在前面。
代码:
盒子1盒子2
页面效果:
① 两个设置了定位且z-index
属性值相同的同级元素
由于z-index
属性值相同,所以他们之间的层级,由元素的书写顺序决定,后面的元素会覆盖在前面的元素上面。
代码:
盒子1盒子2
页面效果:
③两个设置了定位且一个设置了z-index
属性一个没设置z-index
属性的同级元素
未设置z-index
属性的元素,则取默认值0,如果设置了z-index
属性的元素的z-index
属性值大于0,则该元素的层级会高于未设置z-index
属性的元素:
代码:
盒子1盒子2
页面效果:
但是如果设置了z-index
属性的元素的z-index
属性值小于0,则该元素的层级会低于未设置z-index
属性的元素:
代码:
盒子1盒子2
页面效果:
还有最后一种情况,那就是当设置了z-index
属性的元素的z-index
属性值为0的时候,这时设置了z-index
属性的元素与未设置z-index
属性的元素层级相同,遵循后面的元素覆盖前面元素的规则:
代码:
盒子1盒子2
页面效果:
2、父子元素之间
① 父元素未设置z-index
属性,子元素设置了z-index
属性
当子元素的z-index
属性值大于等于 0 时,子元素的层级会高于父元素的层级,而当子元素的z-index
属性值小于 0 时,子元素的层级会低于父元素的层级:
代码:
盒子1盒子1的子盒子1盒子1的子盒子2
页面效果:
② 父元素设置了z-index
属性,子元素未设置z-index
属性
在这种情况下,无论父元素的z-index
属性值为多少,子元素的层级永远高于父元素,子元素永远会挡住父元素的内容:
盒子1盒子1的子盒子1
页面效果:
③ 父元素设置了z-index
属性,子元素也设置了z-index
属性
在这种情况下,无论子元素和父元素的z-index
属性值为多少,子元素的层级永远高于父元素,子元素永远会挡住父元素的内容:
代码:
盒子1盒子1的子盒子1盒子1的子盒子2
页面效果:
3、子元素与其父元素外的其他元素之间
① 父元素未设置z-index
属性,子元素z-index
属性值与父元素的同级元素z-index
属性值进行对比
因为是跟父元素的同级元素进行对比,且父元素未设置z-index
,所以是以子元素的z-index
属性值为准与父元素的同级元素进行对比,遵循z-index
属性值大的元素,层级高规则,以及层级相同时,后面元素覆盖前面元素的规则。
当子元素z-index
属性值小于父元素的同级元素z-index
属性值:
代码:
盒子1盒子1的子盒子1盒子2
页面效果:
当子元素z-index
属性值小于等于其父元素的同级元素z-index
属性值:
代码:
盒子1盒子1的子盒子1盒子2
页面效果:
② 父元素设置了z-index属性,子元素z-index属性值与父元素的同级元素z-index属性值进行对比
因为是跟父元素的同级元素进行对比,且父元素设置了z-index
,所以是以父元素的z-index
属性值为准与父元素的同级元素进行对比,同样遵循z-index
属性值大的元素,层级高规则,以及层级相同时,后面元素覆盖前面元素的规则。
当父元素的z-index
属性值小于等于父元素的同级元素的z-index
属性值,但子元素的z-index
属性值大于父元素的同级元素的z-index
属性值:
代码:
盒子1盒子1的子盒子1盒子2
页面效果:
当父元素的z-index
属性值大于父元素的同级元素的z-index
属性值,但子元素的z-index
属性值小于父元素的同级元素的z-index
属性值:
代码:
盒子1盒子1的子盒子1盒子2
页面效果:
③ 父元素均未设置z-index
属性,子元素Az-index
属性值与父元素的同级元素的子元素Bz-index
属性值进行对比
这种情况比较特殊,元素之前的堆叠顺序,需要分开一一进行比较。首先将每个子元素与其父元素进行比较,再将第一次比较中两个层级低的进行比较,然后将上次比较中两个层级高的进行比较,最后再将第二次比较中层级高的与第三次比较中层级低的进行比较,最终就可以得出结果。
当子元素A的z-index
属性值大于子元素Bz-index
属性值时:
代码:
盒子1盒子1的子盒子1盒子2盒子2的子盒子2
页面效果:
④ 父元素A和B均设置了z-index
属性,子元素A1z-index
属性值与父元素的同级元素的子元素B1z-index
属性值进行对比
当父元素设置了z-index
属性时,子元素的z-index
属性只与同级元素和父级元素作比较时才有意义,与其他元素对比时无意义。此时子元素与父元素外的所有的外部元素进行堆叠层级顺序对比时,都以父元素的z-index
属性值为准进行对比,子元素本身的z-index
属性值无效。
当父元素A的z-index
属性值大于父元素B的z-index
属性值,但子元素A1z-index
属性值小于子元素B1z-index
属性值时:
代码:
盒子1盒子1的子盒子1盒子2盒子2的子盒子2