元素层叠级别及z-index剖析

作者:rong179 来源:蓝色理想 时间:2008-07-22 12:03:00 

声明

定位元素:
position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。
平台:win/IE win/FF

z-index

用来确定定位元素在垂直于显示屏方向(以下称为Z轴)上的层叠顺序

值:auto | 整数 | inherit
默认:auto
适用于:定位元素
继承性:no

理解stacking context

每个box都归属于一个stacking context,它是元素在z轴方向上定位的参考。根元素形成 root stacking context,其他stacking context由定位元素设置z-index为非auto时产生。如#div1{position:relative;z-index:0;}即可使 id=div1的元素产生stacking context。stacking context和 containing block 并没有必然联系。

理解stack level

在一个stacking context中的每个box,都有一个stack level(即层叠级别,以下统一用stack level),它决定着在同一stacking context中每个box在z轴上的显示顺序。同一stacking context中,stack level值大的显示在上,stack level值小的显示在下,同一stack level的遵循后来居上的原则(back-to-front )。不同stacking context中,元素显示顺序以父级的stacking context的stack level来决定显示的先后情况。于自身stack level无关。注意stack level和z-index并不是统一概念。(将在后文慢慢理解)

stack level规则

每个stacking context中可包含块级(block)元素、内联(行内inline)元素,还有设置float属性的元素、定位元素等等他们在同一父级 stacking context中的显示顺序是怎样的?即stack level是怎样的呢?比如一个块级元素和内联元素发生层叠的话谁会在上面呢?是不是谁在后面谁就在上面呢?

根据w3c关于 stack level 的介绍可以得出以下stack level规则

每个stacking context都包括以下stack level (后来居上):

  1. 父级stacking context的背景、边界

  2. z-index值为负值的定位元素(值越小越在下)

  3. 文本流中非定位的、block块级子元素

  4. 文本流中非定位的、float浮动子元素

  5. 仿佛能产生stacking context的inline元素
    否则,inline元素的stack level将在block元素之前。

  6. z-index:auto/0的定位元素

  7. z-index值为正的定位元素(值越大越在上)

以上stack level在浏览器执行情况

firefox3.0下测试完全吻合,firefox2.0下稍有不同即:“z-index值为负值的定位元素”在“父级stacking context的背景、边界”之前。
ie6.0和7.0中:inline元素的stack level位于block元素之前,且“文本流中非定位的、float浮动子元素”(以下简称浮动元素)和“文本流中非定位的、block块级子元素”(以下简称block元素)处于同一级。

标签:z-index,css,浏览器,FF
0
投稿

猜你喜欢

  • 你是真正的用户体验设计者吗? Ⅴ

    2008-04-19 18:32:00
  • ASP+FSO生成的网页文件默认编码格式以及转换成UTF-8编码方法

    2011-03-07 11:10:00
  • 第一类工厂与哈希对象

    2009-12-28 13:14:00
  • 关于分页

    2011-07-01 12:39:03
  • Javascript 每日测试 - 第五期 callee及function

    2008-07-10 13:22:00
  • ASP实现文件直接下载

    2008-11-19 15:39:00
  • ORACLE数据库空间整理心得

    2010-07-16 13:33:00
  • Internet Explorer 8 Beta2 功能预览

    2008-07-29 13:20:00
  • DIV+CSS设计时容易犯的一些错误

    2007-11-13 12:42:00
  • ASP伪静态页简单教程

    2007-09-28 14:35:00
  • 解决Server对象 错误 'ASP 0178 : 80070005'

    2008-02-29 13:45:00
  • FrontPage XP设计教程6——制作多媒体网页

    2008-10-11 12:38:00
  • ASP 日期的加减运算实现代码

    2011-03-08 10:47:00
  • innerHTML 引发“未知的运行时错误”

    2008-04-09 13:06:00
  • WEB2.0网页制作标准教程(4)如何调用css样式表

    2007-11-13 13:26:00
  • MySQL数据库root权限丢失解决方案

    2008-07-13 13:59:00
  • 使用eval()解析JSON格式字符串应注意的问题

    2008-04-16 15:46:00
  • 巧用overflow属性解决中间间距问题

    2007-12-08 20:26:00
  • ASP+AJAX做类似google的搜索提示

    2008-10-24 13:49:00
  • 语义、标准和样式

    2008-06-05 12:52:00
  • asp之家 网络编程 m.aspxhome.com