z-index理解

125 阅读2分钟

1.z-index的取值

1)关键字 :auto

2)数值: 任意整数(包括正数、负数、0)

3)通用取值:inherit initial unset

2.z-index 的作用

1)一般来说,z-index的默认值是auto

The box does not establish a new local stacking context. The stack level of the generated box in the current stacking context is the same as its parent's box.

2)当z-index取数值时,有两个作用:

① 在当前元素建立一个堆叠上下文,即告诉浏览器这里出现了堆叠,需要考虑分层了。

② 告诉浏览器当前元素在这个堆叠上下文中所占的位置。

3.z-index的使用

1)只有position为relative/absolute/fixed的元素,z-index属性才起作用。注意,是该元素本身。

2)z-index遵循从父原则,即如果父元素和子元素同时设置了z-index,以父元素的z-index为准。

如图,将父元素z-index设置为-3,即使设置了子元素z-index很大,仍然显示在红色div下方。(s1是s2的父元素)。

4.堆叠上下文

堆叠上下文的理解:想象网页页面所在的空间是一个三维空间,垂直显示屏方向为Z轴,新的堆叠上下文是在z轴方向上又生出一个平面,其在z轴上的坐标位置由z-index属性指定。

文档中的元素如何确定先后层叠水平,下面的解释可以说明:

  1. 形成堆叠上下文环境的元素的背景与边框
  2. 拥有负 z-index 的子堆叠上下文元素 (负的越高越堆叠层级越低)
  3. 正常流式布局,非 inline-block,无 position 定位(static除外)的子元素
  4. 无 position 定位(static除外)的 float 浮动元素
  5. 正常流式布局, inline-block元素,无 position 定位(static除外)的子元素(包括 display:table 和 display:inline )
  6. 拥有 z-index:0 的子堆叠上下文元素
  7. 拥有正 z-index: 的子堆叠上下文元素(正的越低越堆叠层级越低)

可以理解为:

1)当形成新的堆叠上下文时,通过z-index确定前后,值越大越往前,z-index没有指定(即为auto)时,根据文档中的先后顺序确定前后。

2)没有形成新的堆叠上下文时:

① 不涉及position定位时(static不算),inline-block元素最前,float元素次之,其他元素再次之。

5.如何产生新的堆叠上下文

1)当元素的position为非static且z-index不是auto时;

2)当opacity的值小于1时;

3)对于一些与3d有关的属性,比如perspective:preserve-3d

transform的属性不为none

4)position:fixed

5)根元素html