`
deng131
  • 浏览: 662428 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

css定位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 层级关系优先级的概念

    CSS 中的 z-index 属性用于设置节点的堆叠顺序, 拥有更高堆叠顺序的节点将显示在堆叠顺序较低的节点前面, 这是我们对 z-index 属性普遍的认识. 与此同时, 我们总是对堆叠顺序捉摸不透, 将 z-index 的值设得很大也...

    CSS教程:网页布局定位及z-index解释

    NULL 博文链接:https://xiaomogu.iteye.com/blog/1311531

    CSS 定位之 z-index 问题分析

    关于z-index,目前遇到的一些问题 1. 某些浏览器下元素层级遮盖存在bug; 2. 某个元素z-index设的太大,导致始终无法被遮盖; 3. js动态计算z-index,导致元素覆盖关系部可控   层级遮盖bug出现的原因: IE6/7对z-...

    css的z-index权重问题【最简洁,没有废话】

    今天笔者就与大家分享一下css的z-index权重问题。到底怎么样才能让我们想要排在上面的元素能在上面,想在下面的元素就老老实实的在下面。 一、跟笔者一起看下面实战中z-index的几种情况: 一个定义了定位,一个没...

    妙用z-index让一个div显示在最前面

    position定位如果有重叠的时候,z-index愈大,就显示在最上面 此时我们就可以设置div的css样式z-index:99999,那么该div就显示在最前面

    CSS3关于z-index不生效问题的解决

    最近写CSS3和js结合,遇到了很多次z-index不生效的情况: 1.在用z-index的时候,该元素没有定位(static定位除外) 2.在有定位的情况下,该元素的z-index没有生效,是因为该元素的子元素后来居上,盖住了该元素,...

    css z-index 在IE中的迷惑

    对于未指定此属性的定位对象,z-index 值为正数的对象会在其之上,而z-index 值为负数的对象在其之下。 注意:这个属性不会作用于窗口控件,如selct 对象。在IE 5.5+中,iframe 对象开始支持此属性。而在之前的...

    ie下的css层叠z-index各种问题详细整理

    可是真有些日子没有写DIV+CSS了,而且对IE6兼容性的坑碰到的还是不够多(以前做国外项目),所以这次开发中不可避免的碰见了几个问题,尤其是在IE下的 z-index 问题很有意思,所以整理了一些资料和总结分享给大家…注...

    深入解析CSS中z-index属性对层叠顺序的处理

    多次在项目中遇到html页面元素的非期待重叠错误,多数还是position定位情况下z-index的问题。其实每次解决类似问题思路大致都是一样的,说到底还是对z-index的理解比较模糊,可以解决问题却不大了解其原因,导致重复...

    CSS中的z-index属性基本使用教程

    需要注意的是 z-index 虽然很给力,却只能应用于定位元素(即设置了 position 属性为非 static 值),其它情况下,z-index 将被忽略。 对于定位元素而言,z-index 意味着: 确定该元素在当前层叠上下文中的层叠级别...

    浅析CSS--元素重叠及position定位的z-index顺序.pdf

    ...

    浅析CSS--元素重叠及position定位的z-index顺序.docx

    ...

    举例详解CSS的z-index属性的使用

    通常认为HTML页面是二维的,但实际上,CSS还有一个z-index属性,允许层叠元素。  所有的盒模型元素都处于三维坐标系中。 除了我们常用的横坐标和纵坐标, 盒模型元素还可以沿着“z轴”层叠摆放, 当他们相互覆盖时...

    深入理解css中position属性及z-index属性1

    第三部分:relative定位 第四部分:absolute定位 第五部分:重叠的元素--z-index属性 第六部分:脱离档流导致的问题

    CSS元素的层叠与z-index设置

    我们在文章的更新中,特别注重对新手的辅导,但jb51.net面对的是广大的开发人员,大家可能会遇到各种各样的问题,有些问题很不常见,或者应用的很少,但我们依然有必要学习更多的CSS布局知识与技术,以应对可能出现...

    HTML5&CSS3网页制作:zindex层叠等级属性.pptx

    z-index可以调整重叠定位元素的堆叠顺序,其取值可为正整数、负整数和0。z-index的默认值是0。 解决重叠问题 z-index层叠等级属性 值 描述 auto 默认堆叠顺序与父元素相等。 number 设置元素的堆叠顺序,可为负值。 ...

    深入理解css中position属性及z-index属性(推荐)

    最后将会介绍和position属性密切相关的z-index属性。 第一部分:position: static static定位是HTML元素的默认值,即没有定位,元素出现在正常的流中,因此,这种定位就不会收到top,bottom,left,right的影响。 如...

    CSS属性探秘系列(七):z-index

    index的用法应该有个大致的了解了吧,z-index可以控制定位元素在垂直于显示屏方向(Z 轴)上的堆叠顺序,本文不去讲述基本的API如何使用,而是去更深入的了解z-index是如何工作的,使用z-index的时候有哪些问题,...

Global site tag (gtag.js) - Google Analytics