CSS 中的 z-index 屬性用於設定節點的堆疊順序, 擁有更高堆疊順序的節點將顯示在堆疊順序較低的節點前面, 這是我們對 z-index 屬性普遍的認識. 與此同時, 我們總是對堆疊順序捉摸不透, 將 z-index 的值設得很大也未必能將節點顯示在最前面. 本文將通過一些例子對 z-index 的使用方法進行分析, 並且為各位帶入 z-index 層級樹的概念.
Z-index是什麼意思?在CSS2.0中,Z-index 屬性用來設定元素的堆疊順序,擁有更高堆疊順序的元素總是會處於堆疊順序較低的元素的前面(Z軸)。
1、CSS樣式表中Z-index屬性的一些特徵:
•Z-index屬性的預設值是0
•元素可擁有負的 z-index 屬性值,如z-index:-1
•Z-index屬性無繼承性
•Z-index屬性JavaScript 使用文法:object.style.zIndex=”1″
•幾乎所有主流瀏覽器都支援 Z-index 屬性
2、CSS樣式表中Z-index屬性的使用方法:
樣式代碼:
| 代碼如下 |
複製代碼 |
.box{ position:absolute; left:0px; top:0px; z-index:-1; } |
前台效果:
css樣式表中z-index屬性的使用
3、CSS樣式表中Z-index屬性使用的注意事項:
(1)Z-index僅對定位元素有效(如position:relative);
(2)Z-index只可比較同級元素。這也許是大家很容易忽視的問題,我就卡在了這裡。也就是說,Z-index只能對同級元素進行分層展示;
(3)Z-index的範圍:假設A和B兩個元素都設定了定位(相對定位、絕對位置、一個相對一個絕對位置都可以),且是同級元素,樣式為
.boxA{z-index:4}
.boxB{z-index:5}
於是,不難看出,元素B的層級要高於元素A,在此需要指出的是,A元素下面的子項目的層級也同樣都低於B元素裡的子項目,即使你將A元素裡的子項目設為z-index:9999;同理元素B裡的子項目,即使是設的z-index:1它照樣比元素A的層級要高;
(4)這個屬性不會作用於視窗控制項,如select對象。
以上關於Z-Index的總結都是個人通過解決實踐過程中遇到的問題而得出,希望能給遇到CSS樣式表中Z-Index問題的朋友有所指引。
關於 z-index, 目前遇到的一些問題
1.某些瀏覽器下元素層級遮蓋存在 bug.
2.某個元素 z-index 設的太大, 導致始終無法被遮蓋.
3.JavaScript 動態計算 z-index, 導致元素覆蓋關係部可控.
層級遮蓋 bug 出現的原因
1.IE6/7 對 z-index 的表現跟 IE8 及以上瀏覽器不一致.
2.position 值為非 static 時, 如果不設定 z-index 屬性, IE6/7 下 z-index 預設為 0, 而 IE8 及以上瀏覽器 z-index 為 auto, 且 zindex:auto 的元素不參與堆疊優先順序比較.
z-index IE6/7 IE8/9 Firefox/Chrome
不設定 0 auto auto
number number number number
層級關係的比較
先看幾點結論:
1.對於同級元素, 預設 (或 position:static) 情況下文檔流後面的元素會覆蓋前面的.
2.對於同級元素, position 不為 static 且 z-index 存在的情況下 z-index 大的元素會覆蓋 z-index 小的元素, 即 z-index 越大優先順序越高.
3.IE6/7 下 position 不為 static, 且 z-index 不存在時 z-index 為 0, 除此之外的瀏覽器 z-index 為 auto.
4.z-index 為 auto 的元素不參與層級關係的比較, 由向上遍曆至此且 z-index 不為 auto 的元素來參與比較.
在上面 2 點結論的基礎上, 我們引入定位樹(非 W3C 官方詞彙) 的概念來做層級的比較. 在定位樹這個概念下, 瀏覽器在渲染 DOM 節點時, 除了產生 DOM 樹之外, 還會根據 DOM 樹中的定位元素 (position 不為 static) 產生定位樹.
DOM 樹 (左上), 定位樹 (右下) 對比如下圖 (其中邊上有紅色圓圈的表示該元素 position 不為 static).
可以這樣理解:定位樹中包含了 DOM 樹中 position 不為 staitc 的全部元素. 而非同級元素比較層級關係可以比較如下.
•向上遍曆定位樹的父節點直到 2 個元素為同級元素.
•根據上面的結論來最最後的比較, 層級高的元素會越靠近使用者的顯示器並能覆蓋層級低的元素
| 代碼如下 |
複製代碼 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> <style type="text/css"> #king_of_diamonds { position: relative; background-color:gray; width:30px; height:30px; left: 145px; top: 145px; } #ace_of_diamonds { position:relative; background-color:blue; width:300px; height:300px; left: 160px; top: 130px; z-index: 1; } </style> </head> <body> <form id="form1" runat="server"> <div id="king_of_diamonds"> a </div> <div id="ace_of_diamonds"> b </div> </form> </body> </html> |