z-index不起做用

之因此轉貼這篇文章,是不少朋友比較疑惑z-index這個樣式。其實只要先知道如下2點就能夠很容易的理解了——css

一、要想給元素設置z-index樣式,必須先讓它變成定位元素,再通俗一點說,就是要給元素設置一個postion:relative(或者 absolute或者fixed)樣式。html

二、不要給想控制「上、下」的元素設置z-index,而是對他們的父容器設置z-index樣式。這一點詳細解釋和緣由在《精通html和css設計模式》一書中較爲詳細的解釋。設計模式

《元素層疊級別(stack level)及z-index剖析》 聲明瀏覽器

定位元素:position屬性值設置除默認值static之外的元素,包括relative,absolute,fixed。 平臺:win/IE win/FFpost

z-index:測試

用來肯定定位元素在垂直於顯示屏方向(如下稱爲Z軸)上的層疊順序firefox

值:      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 並無必然聯繫。code

理解stack levelhtm

在一個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元素)處於同一級。

相關文章
相關標籤/搜索