原文:http://rong179.blogbus.com/logs/24966909.html
聲明
定位元素:position屬性值設(shè)置除默認(rèn)值static以外的元素,包括relative,absolute,fixed。
平臺(tái):win/IE win/FF
z-index:
用來確定定位元素在垂直于顯示屏方向(以下稱為Z軸)上的層疊順序
值: auto | 整數(shù) | inherit
默認(rèn): auto
適用于: 定位元素
繼承性: no
理解stacking context
每個(gè)box都?xì)w屬于一個(gè)stacking context,它是元素在z軸方向上定位的參考。根元素形成 root stacking context,其他stacking context由定位元素設(shè)置z-index為非auto時(shí)產(chǎn)生。如#div1{position:relative;z-index:0;}即可使 id=div1的元素產(chǎn)生stacking context。stacking context和 containing block 并沒有必然聯(lián)系。
理解stack level
在一個(gè)stacking context中的每個(gè)box,都有一個(gè)stack level(即層疊級(jí)別,以下統(tǒng)一用stack level),它決定著在同一stacking context中每個(gè)box在z軸上的顯示順序。同一stacking context中,stack level值大的顯示在上,stack level值小的顯示在下,同一stack level的遵循后來居上的原則(back-to-front )。不同stacking context中,元素顯示順序以父級(jí)的stacking context的stack level來決定顯示的先后情況。于自身stack level無關(guān)。注意stack level和z-index并不是統(tǒng)一概念。(將在后文慢慢理解)
stack level規(guī)則
每個(gè)stacking context中可包含塊級(jí)(block)元素、內(nèi)聯(lián)(行內(nèi)inline)元素,還有設(shè)置float屬性的元素、定位元素等等他們?cè)谕桓讣?jí) stacking context中的顯示順序是怎樣的?即stack level是怎樣的呢?比如一個(gè)塊級(jí)元素和內(nèi)聯(lián)元素發(fā)生層疊的話誰會(huì)在上面呢?是不是誰在后面誰就在上面呢?
根據(jù)w3c關(guān)于stack level的介紹可以得出以下stack level規(guī)則
每個(gè)stacking context都包括以下stack level (后來居上):
- 父級(jí)stacking context的背景、邊界
- z-index值為負(fù)值的定位元素(值越小越在下)
- 文本流中非定位的、block塊級(jí)子元素
- 文本流中非定位的、float浮動(dòng)子元素
- 仿佛能產(chǎn)生stacking context的inline元素
否則,inline元素的stack level將在block元素之前。 - z-index:auto/0的定位元素
- z-index值為正的定位元素(值越大越在上)
以上stack level在瀏覽器執(zhí)行情況:
firefox3.0下測(cè)試完全吻合,firefox2.0下稍有不同即:“z-index值為負(fù)值的定位元素”在“父級(jí)stacking context的背景、邊界”之前。
ie6.0和7.0中:inline元素的stack level位于block元素之前,且“文本流中非定位的、float浮動(dòng)子元素”(以下簡(jiǎn)稱浮動(dòng)元素)和“文本流中非定位的、block塊級(jí)子元素”(以下簡(jiǎn)稱block元素)處于同一級(jí)。