元素层叠级别及z-index剖析
定位元素:-`TU#MS}Hposition属性值设置除默认值static以外的元素,包括relative,absolute,fixed。
平台:win/IE win/FF
[b]z-index[/b]rU0W8EJ[
用来确定定位元素在垂直于显示屏方向(以下称为Z轴)上的层叠顺序6tm5af r M
值:auto | 整数 | inherit*E1Q v&SH-Sc
默认:autos g8ZbC(c,S
适用于:定位元素3S,v"I@q^
继承性:no
[b]理解stacking context[/b]nL Ig%}
每个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 并没有必然联系。
[b]理解stack level[/b]d}YYs[bQ
在一个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并不是统一概念。(将在后文慢慢理解)"Hbm0Nu4v@'m
[b]stack level规则[/b]
每个stacking context中可包含块级(block)元素、内联(行内inline)元素,还有设置float属性的元素、定位元素等等他们在同一父级 stacking context中的显示顺序是怎样的?即stack level是怎样的呢?比如一个块级元素和内联元素发生层叠的话谁会在上面呢?是不是谁在后面谁就在上面呢? Q;L)v;r:gq,H2X9{ r
根据w3c关于 [color=#0000ff]stack level[/color] 的介绍可以得出以下stack level规则
每个stacking context都包括以下stack level (后来居上):)d;j8UVrH^1|#Dq!E"{A
[list=1][*]父级stacking context的背景、边界[*]z-index值为负值的定位元素(值越小越在下)[*]文本流中非定位的、block块级子元素[*]文本流中非定位的、float浮动子元素[*]仿佛能产生stacking context的inline元素
否则,inline元素的stack level将在block元素之前。[*]z-index:auto/0的定位元素[*]z-index值为正的定位元素(值越大越在上)[/list][b]以上stack level在浏览器执行情况[/b]:i8Zo&[.Dr;\ g1_r
firefox3.0下测试完全吻合,firefox2.0下稍有不同即:“z-index值为负值的定位元素”在“父级stacking context的背景、边界”之前。S| F/U-H-[ Z2zNS
ie6.0和7.0中:inline元素的stack level位于block元素之前,且“文本流中非定位的、float浮动子元素”(以下简称浮动元素)和“文本流中非定位的、block块级子元素”(以下简称block元素)处于同一级。 [b]FF下测试[/b][code] J F P-qY%Y4ob*q_
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>no ?6p-JxSt \&N[
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="Keywords" content="z-index,IE,Firefox,stacking context,stack level" />2C#aE l`/aU2[
<meta http-equiv="Description" content="这是一个在火狐中测试层叠级别(stack level)的页面" />[!Y4VVR3E
<meta content="all" name="robots" />d*k.d8k3x!N;V+t
<meta name="author" content="rong179,rong179@yahoo.cn" />
<meta name="copyright" content="http://rong179.blogbus.com" />A&E)RA-@P
<title>stack level 在火狐中的测试</title>
<style type="text/css" media="all">
#container {position:relative;left:100px;z-index:0;background: purple;width:500px;}
#container div {height:200px;width:200px;}0N)yt?2t-E+Y
#box-p-zn { position:relative;z-index:-1;background-color:yellow; top:-25px;left:-30px;}
#box-block {background-color: aliceblue;margin-top:-30px;margin-left:150px;}
#box-float {float:left;margin:-50px 100px 0 0;background-color: red;}
#box-inline {background-color: gray;display:inline;padding:50px 0;}$gx @.pct
#box-p-za { position: absolute; top:50px;left:50px; background-color: green;}
#box-p-zp { position: relative;z-index:1;background-color: greenyellow;}
</style>_%c,e*f1U%Wa?
</head>
草根站长论坛's Archiver