CSS 定位之 z-index 问题分析

  发布时间:2012-11-13 11:30:37   作者:佚名   我要评论
IE6/7对z-index的表现跟IE8及以上浏览器不一致。position值为非static时,如果不设置z-index属性,IE6/7下z-index默认为0,而IE8及以上浏览器z-index为auto,且zindex:auto的元素不参与堆叠优先级比较

点击查看原图

关于z-index,目前遇到的一些问题

1. 某些浏览器下元素层级遮盖存在bug;

2. 某个元素z-index设的太大,导致始终无法被遮盖;

3. js动态计算z-index,导致元素覆盖关系部可控

 

层级遮盖bug出现的原因:

IE6/7对z-index的表现跟IE8及以上浏览器不一致。position值为非static时,如果不设置z-index属性,IE6/7下z-index默认为0,而IE8及以上浏览器z-index为auto,且zindex:auto的元素不参与堆叠优先级比较。

ff/chrome z-index IE6/7 IE8/9
不设置 0 auto auto
number number number number

 层级关系的比较:

先看几点结论:

1. 对于同级元素,默认(或position:static)情况下文档流后面的元素会覆盖前面的;

2. 对于同级元素,position不为static且z-index存在的情况下z-index大的元素会覆盖z-index小的元素,即z-index越大优先级越高;

3. IE6/7下position不为static,且z-index不存在时z-index为0,除此之外的浏览器z-index为auto

4. z-index为auto的元素不参与层级关系的比较,由向上遍历至此且z-index不为auto的元素来参与比较。

在上面2点结论的基础上,我们引入“定位树”(非w3c官方词汇)的概念来做层级的比较。

在定位树这个概念下,浏览器在渲染dom节点时,除了生成dom树之外,还会根据dom树中的定位元素(position不为static)生成“定位树”:
dom树、定位树对比如下(其中边上有红色圆圈的表示该元素position不为static):


可以这样理解:定位树中包含了dom树中position不为staitc的全部元素。非同级元素比较层级关系可以这样比较:

1. 向上遍历定位树的父节点直到2个元素为同级元素。

2. 根据上面的结论来最最后的比较。层级高的元素会越靠近用户的显示器并能覆盖层级低的元素。

 

实例一:假设上图中所有标红色元素position都不为static;且z-index=1,根据上面的比较规则可以知道:

1. c > (b && b *) > (a && a *) 即元素c及c的所有定位元素层级比a、b高

2. m > h、 g > k、d > m

实例二:假设a的position不为static,z-index属性不存在,定位树中a的子元素z-index一次分别为1,2,3,4...其它定位元素z-index:1:

1. 根据结论三有:IE6/7下 b > (a && a *) 即元素b的层级比a及a的所有定位元素层级高,其它浏览器下:i > h > b > d

相关文章

  • css z-index 最大值

    z-index最大值,最小值以及同值时层的高低,做了个测试z-index的最大值,有几个结论如下
    2009-05-28
  • css z-index 在IE中的迷惑

    z-index属性简介 引用: z-index : auto | number auto:默认值。 number:无单位的整数值,可为负数。 z-index 值较大的元素将叠加在z-index值较小的元素之上。对
    2009-05-29
  • CSS教程:元素层叠级别及z-index-CSS教程-网页制作-网页教学网

    原文:http://rong179.blogbus.com/logs/24966909.html 声明 定位元素:position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。 平台:win/I
    2008-10-17
  • css设置z-index 失效的解决方法

    设置z-index时必须要固定位置,这样设置它的值时才能奏效(例如 position:absolute;)下面是示例代码,在ff3.5.5和ie5.5~ie8.0RC1中通过,大家可以尝试着不固定其位置试试
    2009-11-26
  • CSS教程:网页布局定位及z-index解释-CSS教程-网页制作-网页教学网

    声明 定位元素: position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。 平台:win/IE win/FF z-index 用来确定定位元素在垂直于显示屏
    2008-10-17
  • 一个关于CSS Z-index 的东东,解决了我很多疑问

    发现有时候真得多看看书,以前一直纳闷为什么有时候可以,有时候不可以,原来是这个原因.
    2011-03-23
  • CSS的z-index实例代码

    写了个最简单的DEMO,演示了3个DIV互相遮盖的情况。记住:z-index要配合position属性才有效
    2012-02-25
  • ie下的css层叠z-index各种问题详细整理

    可是真有些日子没有写DIV+CSS了,而且对IE6兼容性的坑碰到的还是不够多(以前做国外项目),所以这次开发中不可避免的碰见了几个问题,尤其是在IE下的 z-index 问题很有意思
    2013-01-09
  • CSS元素的层叠与z-index设置-CSS教程-网页制作-网页教学网

      我们在文章的更新中,特别注重对新手的辅导,但webjx.com面对的是广大的开发人员,大家可能会遇到各种各样的问题,有些问题很不常见,或者应用的很少,但我们依然有必
    2008-10-17
  • CSS属性探秘系列(七):z-index

    在这篇文章里,我们会准确的说明究竟什么是Z-index,它为什么会这么不为人所了解,并一起讨论一些关于它的实际使用中的问题。我们同时会描述一些会遇到的浏览器间的差异,
    2014-10-22

最新评论