Drcus | 王亚振

Drcus | 王亚振

随便写,记录点东西

CSS 堆叠上下文

发布于:  

遇到过一个问题-- z-index 怎么设置都不管用 最后找到的问题的根本所在,所以要写下来

默认的摆放规则

假定元素没有指定z-index属性,那么元素按照如下顺序叠放(从底到顶)

  1. 根元素的背景和边界
  2. 普通流(无定位)里的块元素(没有position或者position:static;)按HTML中的出现顺序堆叠
  3. 定位元素按HTML中的出现顺序堆叠

浮动

对于浮动的块元素来说,堆叠顺序变得有些不同。浮动块元素被放置于非定位块元素与定位块元素之间:

  1. 根元素的背景与边框
  2. 位于普通流中的后代块元素按照它们在 HTML 中出现的顺序堆叠
  3. 浮动块元素
  4. 常规流中的后代行内元素
  5. 后代中的定位元素按照它们在 HTML 中出现的顺序堆叠

使用z-index

如果需要改变默认的摆放顺序,只需给元素指定z-indexz-index必须是整数,体现了元素在z轴的位置: • 底层:距离观察者最远 • …… • -3 层 • -2 层 • -1 层 • 0 层 (默认) • 1 层 • 2 层 • 3 层 • …… • 顶层:最接近观察者 没有指定z-index的时候,所有元素默认在0层渲染。多个元素的z-index属性相同时,将按照上文描述的顺序布局。 使用z-index排序的例子:

堆叠上下文

指定z-index属性将构造一个堆叠上下文。 以下元素构成堆叠上下文指: • 根元素html • 定位元素,且其z-index值不为autoopacity小于1的元素 • 在移动WebKit、Chrome22+以上,指定position: fixed的元素总是会构造堆叠上下文,即使z-index为auto。 堆叠上下文中的子元素按照前述顺序摆放。堆叠上下文内部的子堆叠上下文的z-index只在父堆叠上下文中有意义。 总而言之: • z-index不为auto,opacity小于1的元素会构建堆叠上下文。 • 堆叠上下文可以嵌入其他堆叠上下文。 • 每个堆叠上下文和它的同级上下文是独立的。 • 每个堆叠上下文是自包含的。

总结

定位元素 A(z-index:100)里面有定位元素A1(z-index:300),而定位元素B和元素A兄弟关系(z-index:200)。你会发现无论A1z-index是多大,也会被z-index 200B所覆盖,因为Az-index` 只有 100。

有时候遇到设置z-index 很大不起作用 就是遇到了堆叠上下文问题 首先它的父级已经比另一个元素级别低了 (也就是显示在下面) 所以它的子元素z-index 设置再大也没用 什么9000啥的都不行 这个是一个无法逾越的鸿沟。

找到原理所在。

厚颜一下 ~^_^~

赏赐