Z-index詳解

概念

z-index 屬性設(shè)置元素的堆疊順序。擁有更高堆疊順序的元素總是會(huì)處于堆疊順序較低的元素的前面。

層級(jí)關(guān)系的比較

1. 對(duì)于同級(jí)元素,默認(rèn)(或position:static)情況下文檔流后面的元素會(huì)覆蓋前面的。

2. 對(duì)于同級(jí)元素,position不為static且z-index存在的情況下z-index大的元素會(huì)覆蓋z-index小的元素,即z-index越大優(yōu)先級(jí)越高。

3. IE6/7下position不為static,且z-index不存在時(shí)z-index為0,除此之外的瀏覽器z-index為auto。

4. z-index為auto的元素不參與層級(jí)關(guān)系的比較,由向上遍歷至此且z-index不為auto的元素來(lái)參與比較。

順序規(guī)則

如果不對(duì)節(jié)點(diǎn)設(shè)定 position 屬性,位于文檔流后面的節(jié)點(diǎn)會(huì)遮蓋前面的節(jié)點(diǎn)。

AB

定位規(guī)則

如果將 position 設(shè)為 static,位于文檔流后面的節(jié)點(diǎn)依然會(huì)遮蓋前面的節(jié)點(diǎn)浮動(dòng),,所以position:static不會(huì)影響節(jié)點(diǎn)的遮蓋關(guān)系。

AB

如果將 position 設(shè)為 relative (相對(duì)定位),absolute (絕對(duì)定位) 或者 fixed (固定定位),這樣的節(jié)點(diǎn)會(huì)覆蓋沒有設(shè)置 position 屬性或者屬性值為 static 的節(jié)點(diǎn),說(shuō)明前者比后者的默認(rèn)層級(jí)高。

AB

在沒有 z-index 屬性干擾的情況下, 根據(jù)這順序規(guī)則和定位規(guī)則, 我們可以做出更加復(fù)雜的結(jié)構(gòu). 這里我們對(duì) A 和 B 都不設(shè)定 position, 但對(duì) A 的子節(jié)點(diǎn) A-1 設(shè)定position:relative. 根據(jù)順序規(guī)則, B 會(huì)覆蓋 A, 又根據(jù)定位規(guī)則 A' 會(huì)覆蓋 B.

A-1B

上面互相覆蓋在什么時(shí)候用到這樣的實(shí)現(xiàn)? 看起來(lái)偏門, 其實(shí)很常用, 比如說(shuō), 電子商務(wù)網(wǎng)站側(cè)欄的類目展示列表就可以用這個(gè)技巧來(lái)實(shí)現(xiàn).

下圖是某網(wǎng)站的類目展示區(qū)域, 二級(jí)類目的懸浮層覆蓋一級(jí)類目列表外框, 而一級(jí)類目的節(jié)點(diǎn)覆蓋二級(jí)類目的懸浮層. 如果使用 CSS 實(shí)現(xiàn)展示效果, 一級(jí)類目的外框相當(dāng)于上面例子中的 A, 一級(jí)類目的節(jié)點(diǎn)相當(dāng)于 A-1, 二級(jí)類目的懸浮層相當(dāng)于 B.

參與規(guī)則

我們嘗試不用 position 屬性, 但為節(jié)點(diǎn)加上 z-index 屬性. 發(fā)現(xiàn) z-index 對(duì)節(jié)點(diǎn)沒起作用.z-index 屬性僅在節(jié)點(diǎn)的 position 屬性為 relative, absolute 或者 fixed 時(shí)生效.

ABC

ABC

默認(rèn)值規(guī)則

如果所有節(jié)點(diǎn)都定義了 position:relative. z-index 為 0 的節(jié)點(diǎn)與沒有定義 z-index 在同一層級(jí)內(nèi)沒有高低之分; 但 z-index 大于等于 1 的節(jié)點(diǎn)會(huì)遮蓋沒有定義 z-index 的節(jié)點(diǎn); z-index 的值為負(fù)數(shù)的節(jié)點(diǎn)將被沒有定義 z-index 的節(jié)點(diǎn)覆蓋.

ABCD

從父規(guī)則

如果 A, B 節(jié)點(diǎn)都定義了 position:relative, A 節(jié)點(diǎn)的 z-index 比 B 節(jié)點(diǎn)大, 那么 A 的子節(jié)點(diǎn)必定覆蓋在 B 的子節(jié)點(diǎn)前面.

A-1B-1

如果所有節(jié)點(diǎn)都定義了 position:relative, A 節(jié)點(diǎn)的 z-index 和 B 節(jié)點(diǎn)一樣大, 但因?yàn)轫樞蛞?guī)則, B 節(jié)點(diǎn)覆蓋在 A 節(jié)點(diǎn)前面. 就算 A 的子節(jié)點(diǎn) z-index 值比 B 的子節(jié)點(diǎn)大, B 的子節(jié)點(diǎn)還是會(huì)覆蓋在 A 的子節(jié)點(diǎn)前面.

很多人將 z-index 設(shè)得很大, 9999 什么的都出來(lái)了, 如果不考慮父節(jié)點(diǎn)的影響, 設(shè)得再大也沒用, 那是無(wú)法逾越的層級(jí).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概念z-index 屬性設(shè)置元素的堆疊順序。擁有更高堆疊順序的元素總是會(huì)處于堆疊順序較低的元素的前面。 層級(jí)關(guān)系的...
    王鈺峰閱讀 917評(píng)論 0 0
  • z-index就是堆疊上下文,它規(guī)定一個(gè)元素的堆疊順序。一般來(lái)說(shuō),擁有更高堆疊順序的元素會(huì)處于較低堆疊元素的前面。...
    李悅之閱讀 2,914評(píng)論 0 1
  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,090評(píng)論 1 92
  • 轉(zhuǎn)載于(http://www.cnblogs.com/ForEvErNoME/p/3373641.html)CSS...
    陌客百里閱讀 1,698評(píng)論 1 0
  • 先來(lái)解析幾個(gè)概念,基本上了解概念之后就已經(jīng)能夠掌握z-index屬性了。 所有的引用均來(lái)自css2.1規(guī)范 根元素...
    伊各的詩(shī)與代碼閱讀 488評(píng)論 0 0

友情鏈接更多精彩內(nèi)容