摘要:為了調(diào)整層級順序,我們想到的往往就是用的屬性來控制。規(guī)則順序規(guī)則在不設(shè)置屬性或設(shè)置成的情況下,文檔流后面的節(jié)點(diǎn)會(huì)覆蓋前面的節(jié)點(diǎn)。層級樹規(guī)則定位節(jié)點(diǎn),且有整數(shù)值的不包括,會(huì)被放置到一個(gè)與節(jié)點(diǎn)不一樣的層級樹里。
前言
DOM層級順序,大概來說就是DOM節(jié)點(diǎn)在z軸方向(垂直于屏幕向外的方向)的顯示優(yōu)先級。為了調(diào)整DOM層級順序,我們想到的往往就是用CSS的z-index屬性來控制。雖然看著很簡單,但是有時(shí)在使用時(shí),我們有時(shí)也許會(huì)碰到一些一些奇奇怪怪的問題:
為什么有時(shí)候?qū)-index設(shè)成很大的值(比如9999),節(jié)點(diǎn)依然不能顯示在最前面?
z-index屬性設(shè)為0和不設(shè)置z-index屬性有什么區(qū)別?
float元素和定位元素誰顯示的優(yōu)先級更高?
其實(shí)看似簡單的層級順序它自己的一套規(guī)則,理解這些規(guī)則可以幫助我們在開發(fā)中少踩坑。
規(guī)則 1. 順序規(guī)則在不設(shè)置position屬性(或設(shè)置成static)的情況下,文檔流后面的DOM節(jié)點(diǎn)會(huì)覆蓋前面的DOM節(jié)點(diǎn)。
AB
PS:怎么樣來讓文檔流中的節(jié)點(diǎn)疊在一起呢?比如我們可以設(shè)置DOM的margin-top為負(fù)數(shù),這樣就讓兩個(gè)節(jié)點(diǎn)疊在起一起了。不過為了簡化說明,并沒有把這些寫出來。下同。
2.定位規(guī)則定位節(jié)點(diǎn)(position屬性設(shè)置為relative,absolute或fixed的節(jié)點(diǎn))會(huì)覆蓋非定位節(jié)點(diǎn)(不設(shè)置position屬性或position屬性設(shè)為static的節(jié)點(diǎn))
AB
根據(jù)順序規(guī)則和定位規(guī)則, 我們可以做出更加復(fù)雜的結(jié)構(gòu)。A和 B 都設(shè)為非定位節(jié)點(diǎn),A 的子節(jié)點(diǎn) A-1 設(shè)定定位節(jié)點(diǎn)。
3. 參與規(guī)則AB
z-index屬性僅對定位節(jié)點(diǎn)生效。
有三個(gè)DOM節(jié)點(diǎn),其定位為static。但是A的z-index最大,但是依舊是在最底部,C的z-index最小,而在最頂部,因此可知z-index并未生效,此時(shí)為順序規(guī)則在生效。
ABB
我們將B和C的position設(shè)置為relative之后,順序發(fā)生了變化。根據(jù)參與者規(guī)則和定位規(guī)則,A不是定位節(jié)點(diǎn),所以即使z-index最大,還是在最底部。而根據(jù)參與規(guī)則和默認(rèn)值規(guī)則(下一節(jié)介紹),B和C都是定位節(jié)點(diǎn),且B的z-index要大于C,所以B在最頂部。
4. 默認(rèn)值規(guī)則ABB
對于所有的定位節(jié)點(diǎn),z-index值大的節(jié)點(diǎn)會(huì)覆蓋z-index值小的節(jié)點(diǎn)。
z-index設(shè)為0和沒有設(shè)置z-index的節(jié)點(diǎn)在同一層級內(nèi)沒有高低之分。在IE6和7種,z-index的默認(rèn)值為0,其他瀏覽器中默認(rèn)值為auto。
5. 從父規(guī)則ABCD
兩個(gè)節(jié)點(diǎn)A和B都是定位節(jié)點(diǎn),如果節(jié)點(diǎn)A的z-index值比節(jié)點(diǎn)B的大,那么節(jié)點(diǎn)A的子元素都會(huì)覆蓋在節(jié)點(diǎn)B以及節(jié)點(diǎn)B的子節(jié)點(diǎn)上。
A-1B-1
如果定位節(jié)點(diǎn)A和B的z-index值一樣大,那么根據(jù)順序規(guī)則,B會(huì)覆蓋A,那么即使A的子節(jié)點(diǎn)的z-index比B的子節(jié)點(diǎn)大,B的子節(jié)點(diǎn)還是會(huì)覆蓋A的子節(jié)點(diǎn)。(這就是為什么即使我們把A-1的z-index設(shè)置得很大,依然無法蓋住B節(jié)點(diǎn)的原因)。
6. 層級樹規(guī)則A-1B-1
定位節(jié)點(diǎn),且z-index有整數(shù)值的(不包括z-index:auto),會(huì)被放置到一個(gè)與DOM節(jié)點(diǎn)不一樣的層級樹里。
在下面的DOM節(jié)點(diǎn)中,A和B是兄弟節(jié)點(diǎn),但是在層級樹種,A和B-1才是兄弟節(jié)點(diǎn)(因?yàn)樗麄兌际荝oot下的第一層含有整數(shù)z-index的定位節(jié)點(diǎn)),所以A在B和B-1之上。雖然A-1的z-index比B-1的小,但是根據(jù)從父規(guī)則,A-1也在B-1之上。
A-1B-1
下面這個(gè)更復(fù)雜的層級樹,聰明的你能看明白為什么節(jié)點(diǎn)層級是這樣的了嗎?
層疊上下文A-1B-1-1C-1-1-1
介紹了這么多規(guī)則,是在是不好理解,又很難記。其實(shí),要理解這些規(guī)則,我們只需要理解一個(gè)概念就行了,它就是層疊上下文。
概念層疊上下文是HTML元素的三維概念,這些HTML元素在一條假想的相對于面向(電腦屏幕的)視窗或者網(wǎng)頁的用戶的z軸上延伸,HTML元素依據(jù)其自身屬性按照優(yōu)先級順序占用層疊上下文的空間。
特性子元素的 z-index 值只在父級層疊上下文中有意義。
子級層疊上下文被自動(dòng)視為父級層疊上下文的一個(gè)獨(dú)立單元。
產(chǎn)生的條件滿足一下其中一個(gè)條件,即可產(chǎn)生一個(gè)層疊上下文:
根元素 (HTML),
z-index 值不為 "auto"的 絕對/相對定位,
position: fixed
opacity 屬性值小于 1 的元素
transform 屬性值不為 "none"的元素
filter值不為“none”的元素
-webkit-overflow-scrolling 屬性被設(shè)置 "touch"的元素
附錄:層疊的順序表位置 | 描述 | CSS |
---|---|---|
1(底部) | 包含該層疊上下文的父元素 | |
2 | 負(fù)堆疊順序的子元素 | z-index: |
3 | 文檔流中,非內(nèi)聯(lián),非定位子元素 | display: /* not inline */; position: static |
4 | 非定位浮動(dòng)子元素 | float: left (or right); position: static |
5 | 內(nèi)聯(lián)流,非定位子元素 | display: inline; position: static |
6 | 堆疊順序?yàn)?的子元素 | z-index: auto (or 0); position: position: relative(or absolute or fixed) |
7(頂部) | 堆疊順序?yàn)檎淖釉?/td> | z-index: |
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/116682.html
摘要:層疊上下文可以嵌套,內(nèi)部層疊上下文及其所有子元素均受制于外部的層疊上下文。例當(dāng)按以下設(shè)置,則出現(xiàn)紅色在綠色之上的效果。如何觸發(fā)觸發(fā)一個(gè)元素形成層疊上下文有以下方法,摘自根元素值不為的絕對相對定位一個(gè)值不為的項(xiàng)目,即父元素。 層疊上下文【stacking context】 對于stacking context,在MDN中的描述是 Stacking context is the three...
摘要:元素層疊順序補(bǔ)充說明位于最下面的特指層疊上下文元素后面會(huì)詳解的邊框和背景色。界中可能有其他的層疊結(jié)界,而自身也可能處于其他層疊結(jié)界中。 上一篇:《CSS世界》筆記四:流的保護(hù)與破壞 寫在前面 《CSS世界》這本書還剩六章,但是這本書的精華部分主要是前面的內(nèi)容,這里僅把后面章節(jié)相對重要的內(nèi)容以博客展示,想著了解更多的小伙伴還是去閱讀原文的好,畢竟三百多頁的一本書并不是小小幾篇博客能完全說...
摘要:當(dāng)?shù)诙拥娜萜骱凶由墳閷盈B上下文時(shí),紅色盒子及灰色盒子的軸層級受制于第二層的容器盒子。當(dāng)元素處于同一層疊上下文內(nèi)時(shí)可按照如下規(guī)則進(jìn)行層疊判斷。 本文首發(fā)于政采云前端團(tuán)隊(duì)博客:CSS 層疊上下文(Stacking Context) 在網(wǎng)頁制作的過程中,元素與元素之間的位置關(guān)系,在坐標(biāo)軸上一般可體現(xiàn)為 X 軸、Y 軸和 Z 軸。對于 X 軸和 Y 軸的定位大多數(shù)開發(fā)都能比較直觀的搞清楚...
摘要:后來居上當(dāng)元素的層疊水平一致層疊順序相同的時(shí)候,在流中處于后面的元素會(huì)覆蓋前面的元素。相關(guān)連接深入理解中的層疊上下文和層疊順序?qū)盈B順序探究分層的顯示 什么是層疊上下文(stacking context) 可以理解為一個(gè)dom節(jié)點(diǎn)在Z軸高人一等,特性類似于BFC,即層疊上下文的內(nèi)部子元素再怎么翻江倒海,翻云覆雨都不會(huì)影響外部的元素。 CSS2創(chuàng)建層疊上下文的兩種方法(參考MDN) 根元...
摘要:栗子有兩個(gè),被包裹在一個(gè)里,被包裹在另一個(gè)盒子里,同時(shí)為兩個(gè)和設(shè)置和屬性效果我們發(fā)下,雖然元素的值為,遠(yuǎn)大于和的值,但是由于的父元素產(chǎn)生的層疊上下文的的值為,的父元素所產(chǎn)生的層疊上下文的值為,所以永遠(yuǎn)在和下面。 前言 最近,在項(xiàng)目中遇到一個(gè)關(guān)于CSS中元素z-index屬性的問題,具體問題不太好描述,總結(jié)起來就是當(dāng)給元素和父元素色設(shè)置position屬性和z-index相關(guān)屬性后,頁面...
閱讀 2485·2023-04-25 21:41
閱讀 1656·2021-09-22 15:17
閱讀 1928·2021-09-22 10:02
閱讀 2442·2021-09-10 11:21
閱讀 2585·2019-08-30 15:53
閱讀 1003·2019-08-30 15:44
閱讀 956·2019-08-30 13:46
閱讀 1145·2019-08-29 18:36