原文:http://rong179.blogbus.com/logs/24966909.html
聲明
定位元素:position屬性值設(shè)置除默認值static以外的元素,包括relative,absolute,fixed。 平臺:win/IE win/FF
z-index:
用來確定定位元素在垂直于顯示屏方向(以下稱為Z軸)上的層疊順序
值: auto | 整數(shù) | inherit 默認: auto 適用于: 定位元素 繼承性: no
理解stacking context
每個box都歸屬于一個stacking context,它是元素在z軸方向上定位的參考。根元素形成 root stacking context,其他stacking context由定位元素設(shè)置z-index為非auto時產(chǎn)生。如#div1{position:relative;z-index:0;}即可使 id=div1的元素產(chǎn)生stacking context。stacking context和 containing block 并沒有必然聯(lián)系。
理解stack level
在一個stacking context中的每個box,都有一個stack level(即層疊級別,以下統(tǒng)一用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無關(guān)。注意stack level和z-index并不是統(tǒng)一概念。(將在后文慢慢理解)
stack level規(guī)則
每個stacking context中可包含塊級(block)元素、內(nèi)聯(lián)(行內(nèi)inline)元素,還有設(shè)置float屬性的元素、定位元素等等他們在同一父級 stacking context中的顯示順序是怎樣的?即stack level是怎樣的呢?比如一個塊級元素和內(nèi)聯(lián)元素發(fā)生層疊的話誰會在上面呢?是不是誰在后面誰就在上面呢?
根據(jù)w3c關(guān)于stack level的介紹可以得出以下stack level規(guī)則
每個stacking context都包括以下stack level (后來居上):
- 父級stacking context的背景、邊界
- z-index值為負值的定位元素(值越小越在下)
- 文本流中非定位的、block塊級子元素
- 文本流中非定位的、float浮動子元素
- 仿佛能產(chǎn)生stacking context的inline元素
否則,inline元素的stack level將在block元素之前。
- z-index:auto/0的定位元素
- z-index值為正的定位元素(值越大越在上)
以上stack level在瀏覽器執(zhí)行情況:
firefox3.0下測試完全吻合,firefox2.0下稍有不同即:“z-index值為負值的定位元素”在“父級stacking context的背景、邊界”之前。 ie6.0和7.0中:inline元素的stack level位于block元素之前,且“文本流中非定位的、float浮動子元素”(以下簡稱浮動元素)和“文本流中非定位的、block塊級子元素”(以下簡稱block元素)處于同一級。
出處:藍色理想
責任編輯:moby
上一頁 下一頁 元素層疊級別及z-index剖析 [2]
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|