z-index的理解

239 阅读2分钟

浏览器支持

所有主流浏览器都支持 z-index 属性。

注释:任何的版本的 Internet Explorer (包括 IE8)都不支持属性值 "inherit"。 IE7中"z-index:auto"允许层叠上下文。

定义和用法

z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。

注释:元素可拥有负的 z-index 属性值。

注释:CSS2.1中Z-index 仅能在定位元素上奏效(例如 position:absolute;),CSS3中有例外。

注释:支持CSS3 animation动画

3.基础规则

3.1

平级元素:

后来居上原则

谁大谁先原则

3.2

发生嵌套:

祖先优先原则

3.3

创建层叠上下文元素的层叠顺序规则

4.理解层叠上下文和层叠水平(顺序)

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

2.除了z-index值为auto外的定位元素会创建层叠上下文

3.z-index层叠顺序的比较止步于父级层叠上下文

看几个例子:

.box{positon:absolute;background:blue}

img{positon:relative;margin-left:-100px}

图片覆盖box背景色蓝色

.box{positon:absolute;background:blue}

img{positon:relative;margin-left:-100px;z-index:-1}

box背景色蓝色覆盖图片,此时图片的层叠上下文为页面根元素, .box默认为z-index:auto,不会创建层叠上下文。

.box{positon:absolute;background:blue;z-index:0}

img{positon:relative;margin-left:-100px;z-index:-1}

图片覆盖box背景色蓝色,因为容器的z-index值为数值,所以 此时图片的层叠上下文为父级容器,父级的backround层叠顺序自然在最底层。

总结:

从层叠顺序来讲,z-index:auto可以看出z-index:0

但从层叠上下文来讲,两者不同。

在元素创建层叠上下文时,应搞清楚父级元素再进行层叠顺序的对比,在父级元素下的其他子元素仍然遵循后来居上,层叠水平优先级等规则。

5.其他CSS属性的层叠上下文(默认z-index:auto)

6.z-index同其他CSS属性的层叠上下文

依赖子元素z-index的叠上下文元素(父)的层叠顺序取决于z-index值:

1.position值为relative/absolute或fixed(部分浏览器)

2.display:flex/inline-flex容器的子flex项

tip: 父容器依然为普通元素,不会创建层叠上下文,子项创建层叠上下文时仍寻找创建层叠上下文的父元素,如body元素。