概念
z-index 屬性設定元素的堆疊順序。擁有較高堆疊順序的元素總是會處於堆疊順序較低的元素的前方。
層級關係的比較
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的元素來參與比較。
順序規則
#如果不對節點設定position 屬性,位於文件流程後面的節點會遮蓋前面的節點。
<p id="a">A</p><p id="b">B</p>
#定位規則
浮動,,所以
position:static<p id="a" style="position:static;">A</p><p id="b">B</p>
如果將position 設為relative (相對定位),absolute (
絕對定位) 或fixed (固定定位),這樣的節點會覆寫沒有設定position 屬性或屬性值為static 的節點,說明前者比後者的預設層級高。
<p id="a" style="position:relative;">A</p><p id="b">B</p>
在沒有z-index 屬性幹擾的情況下, 根據這順序規則和定位規則, 我們可以做出更複雜的結構. 這裡我們對A 和B 都不設定position, 但對A 的子節點A-1 設定
position:relative. 根據順序規則, B 會覆蓋A, 又根據定位規則A ' 會覆蓋B.
<p id="a"> <p id="a-1" style="position:relative;">A-1</p></p><p id="b">B</p>
下圖是某網站的類目展示區域, 二級類目的懸浮層覆蓋一級類目列表外框, 而一級類目的節點覆蓋二級類目的懸浮層. 如果使用CSS 實現展示效果, 一級類目的外框相當於上面例子中的A, 一級類目的節點相當於A-1, 二級類別目的懸浮層相當於B.
我們嘗試不用position 屬性, 但為節點加上z-index 屬性. 發現z-index 對節點沒起作用. z-index 屬性僅在節點的position 屬性為relative, absolute 或fixed 時生效.
<p id="a" style="z-index:2;">A</p><p id="b" style="z-index:1;">B</p><p id="c" style="z-index:0;">C</p>
#<p id="a" style="z-index:2;">A</p><p id="b" style="position:relative;z-index:1;">B</p><p id="c" style="position:relative;z-index:0;">C</p>
#預設值規則
<p id="a" style="position:relative;z-index:1;">A</p><p id="b" style="position:relative;z-index:0;">B</p><p id="c" style="position:relative;">C</p><p id="d" style="position:relative;z-index:0;">D</p>
<p id="a" style="position:relative;z-index:1;"> <p id="a-1">A-1</p></p> <p id="b" style="position:relative;z-index:0;"> <p id="b-1">B-1</p></p>
如果所有节点都定义了 position:relative, A 节点的 z-index 和 B 节点一样大, 但因为顺序规则, B 节点覆盖在 A 节点前面. 就算 A 的子节点 z-index 值比 B 的子节点大, B 的子节点还是会覆盖在 A 的子节点前面.
很多人将 z-index 设得很大, 9999 什么的都出来了, 如果不考虑父节点的影响, 设得再大也没用, 那是无法逾越的层级.
以上是CSS基礎:z-index詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!