摘要:主要從以下途徑學(xué)習(xí)張鑫旭大大的博文層疊順序?qū)盈B順序遵循下圖的規(guī)則,其中在張鑫旭大大的博文中提到的層疊順序與圖中是一個的實際上和單純從層疊水平上看,可以認(rèn)為是同一兩者在層疊上下文領(lǐng)域有著根本性的差異。
層疊順序本文是我學(xué)習(xí)層疊上下文的總結(jié)。主要從以下途徑學(xué)習(xí):
MDN: https://developer.mozilla.org...
張鑫旭大大的博文:http://www.zhangxinxu.com/wor...
層疊順序遵循下圖的規(guī)則,其中在張鑫旭大大的博文中提到inline-block的層疊順序與圖中inline box是一個level的;z-index:auto實際上和z-index:0單純從層疊水平上看,可以認(rèn)為是同一level(兩者在層疊上下文領(lǐng)域有著根本性的差異)。(如要看完整圖片請移步到張鑫旭大大博文)
層疊準(zhǔn)則根據(jù)上圖,層疊水平越大,就顯示在越上面。
當(dāng)層疊水平一樣時,在DOM中位置越后,就顯示在越上面。
層疊上下文的特性層疊上下文的層疊水平比普通元素高;
層疊上下文可以嵌套,內(nèi)部層疊上下文及其所有子元素都受限于外部的層疊上下文;
層疊上下文和兄弟元素獨(dú)立,只需要考慮后代元素;
每個層疊上下文是自包含的:當(dāng)元素的內(nèi)容發(fā)生層疊后,整個該元素將會 在父層疊上下文中 按順序進(jìn)行層疊。
層疊上下文創(chuàng)建的條件html元素
z-index的值不為auto的相對/絕對定位元素
position: fixed的元素
應(yīng)用了某些CSS3的元素
z-index的值不為auto的flex項(即父元素display: flex | inline-flex)
opacity小于1的元素
transform值不為none元素
min-blend-mode值不為none的元素
filter值不為none的元素
perspective值不為none的元素
isloation值為isolate的元素
will-change指定了任意屬性
-webkit-overflow-scrolling值為touch的元素
demo先放MDN的例子的效果圖(點擊查看代碼與效果)
下面是我自己寫的一些demo,主要與z-index屬性相關(guān)。
demo通用HTML代碼
outterinner
基礎(chǔ)CSS(沒有創(chuàng)建層疊上下文)。所有demo都是在這份CSS的基礎(chǔ)上寫出來的。
.outter { width: 200px;height: 300px;background: red; } .inner { position: relative; z-index: -1; width: 300px;height: 200px;background: blue; }
當(dāng)outter的position值為relative或absolute,并且不設(shè)置z-index值或者z-index值為auto時,outter沒有創(chuàng)建層疊上下文。此時根據(jù)層疊順序表,負(fù)的z-index元素在block元素下面,所以,inner被outter覆蓋了。
查看demo
相對/絕對定位
.outter { position: relative;z-index: auto; width: 200px;height: 300px;background: red; } .inner { position: relative; z-index: -1; width: 300px;height: 200px;background: blue; }
雖然outter的position值設(shè)置為absolute或者relative,但z-index值設(shè)置為auto,此時,outter并沒有創(chuàng)建層疊上下文,所以,效果與基礎(chǔ)demo一致。
查看demo
.outter { position: relative;z-index: 0; width: 200px;height: 300px;background: red; } .inner { position: relative; z-index: -1; width: 300px;height: 200px;background: blue; }
當(dāng)outter的z-index值設(shè)置為數(shù)值,甚至為0時,outter會創(chuàng)建層疊上下文,此時inner會覆蓋outter。
查看demo
position: fixed的元素
.outter { position: fixed; width: 200px;height: 300px;background: red;color: #fff; } .inner { position: relative;z-index: -1; width: 300px;height: 200px;background: blue; }
當(dāng)outter的position值設(shè)置為fixed時,outter會創(chuàng)建層疊上下文,此時inner會覆蓋outter。
查看demo
opacity小于1的元素
.outter { opacity: .5; width: 200px;height: 300px;background: red;color: #fff; } .inner { position: relative;z-index: -1; width: 300px;height: 200px;background: blue; }
當(dāng)outter的opacity值設(shè)置小于1時,outter會創(chuàng)建層疊上下文,此時inner會覆蓋outter。
查看demo
transform值不為none元素
.outter { transform: rotate(15deg); width: 200px;height: 300px;background: red;color: #fff; } .inner { position: relative;z-index: -1; width: 300px;height: 200px;background: blue; }
當(dāng)outter的opacity值設(shè)置不為none時,outter會創(chuàng)建層疊上下文,此時inner會覆蓋outter。
查看demo
will-change指定了任意屬性
.outter { will-change: transform; width: 200px;height: 300px;background: red;color: #fff; } .inner { position: relative;z-index: -1; width: 300px;height: 200px;background: blue; }
當(dāng)outter的will-change值設(shè)置為任何值時,outter會創(chuàng)建層疊上下文,此時inner會覆蓋outter。
查看demo
z-index的值不為auto的flex項(即父元素display: flex | inline-flex)
此處的HTML結(jié)構(gòu)有點不同。
outterinner
.box { display: flex; } .outter { z-index: 1; width: 200px;height: 300px;background: red;color: #fff; } .inner { position: relative;z-index: -1; width: 300px;height: 200px;background: blue; }
在原來的HTML外層加一個class為box的div,并設(shè)置display值為flex或者inline-flex,此時outter為flex項,會創(chuàng)建層疊上下文,此時inner會覆蓋outter。
查看demo
其他
由于暫時對mix-blend-mode、filter、isolation、-webkit-overflow-scrolling屬性了解不多,所以沒有做demo。如果想看demo效果,可以看張鑫旭大大的博文。
學(xué)習(xí)了層疊上下文之后,對于元素覆蓋這個問題有了比較清晰的認(rèn)識,有時候可以不依賴z-index來解決問題了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/111628.html
摘要:標(biāo)簽中的一切都被置于這個默認(rèn)的層疊上下文的一個層疊層上物品放在桌子上。在層疊上下文中,其子元素按照上面解釋的規(guī)則進(jìn)行層疊。在中所有的盒模型元素都處于三維坐標(biāo)系中。 最近在項目的過程中遇到了一個問題,menu-bar希望始終顯示在最上面,而在之后的元素都顯示在它之下,當(dāng)時設(shè)置了 z-index 也沒有效果,不知道什么原因,因此找了一下css有關(guān)層疊方面的資料,解決了這個問題,這里記錄一下...
摘要:栗子有兩個,被包裹在一個里,被包裹在另一個盒子里,同時為兩個和設(shè)置和屬性效果我們發(fā)下,雖然元素的值為,遠(yuǎn)大于和的值,但是由于的父元素產(chǎn)生的層疊上下文的的值為,的父元素所產(chǎn)生的層疊上下文的值為,所以永遠(yuǎn)在和下面。 前言 最近,在項目中遇到一個關(guān)于CSS中元素z-index屬性的問題,具體問題不太好描述,總結(jié)起來就是當(dāng)給元素和父元素色設(shè)置position屬性和z-index相關(guān)屬性后,頁面...
摘要:栗子有兩個,被包裹在一個里,被包裹在另一個盒子里,同時為兩個和設(shè)置和屬性效果我們發(fā)下,雖然元素的值為,遠(yuǎn)大于和的值,但是由于的父元素產(chǎn)生的層疊上下文的的值為,的父元素所產(chǎn)生的層疊上下文的值為,所以永遠(yuǎn)在和下面。 前言 最近,在項目中遇到一個關(guān)于CSS中元素z-index屬性的問題,具體問題不太好描述,總結(jié)起來就是當(dāng)給元素和父元素色設(shè)置position屬性和z-index相關(guān)屬性后,頁面...
摘要:層疊上下文元素的特性層疊上下文的層疊水平要比普通元素高層疊上下文可以嵌套,內(nèi)部層疊上下文及其所有子元素均受制于外部的層疊上下文。層疊上下文特性里最后一條規(guī)則,每個層疊上下文都是獨(dú)立的。 z-index基礎(chǔ)介紹:三維坐標(biāo)空間里,x軸通常用來表示水平位置,y軸來表示垂直位置,還有z軸來表示在紙面內(nèi)外方向上的位置,像下面的圖片一樣: showImg(https://segmentfault....
閱讀 3807·2021-11-17 09:33
閱讀 2025·2021-10-26 09:51
閱讀 1541·2021-09-29 09:44
閱讀 1693·2019-08-30 15:55
閱讀 1457·2019-08-30 15:52
閱讀 2338·2019-08-30 15:43
閱讀 3444·2019-08-29 17:00
閱讀 2311·2019-08-29 16:23