web前端入門到實戰:CSS 層疊上下文(Stacking Context)
在網頁製作的過程中,元素與元素之間的位置關係,在座標軸上一般可體現為 X 軸、Y 軸和 Z 軸。對於 X 軸和 Y 軸的定位大多數開發都能比較直觀的搞清楚,而 Z 軸 則相對較為模糊,或者說不能全面的理解Z軸的顯示邏輯。大多數人都知道可以使用
position
屬性配合
z-index
屬性解決元素的 Z 軸顯示問題,對於更深層次的原理卻不太瞭解。本文主要介紹了層疊上下文、層疊等級、層疊順序等概念。目的就是為了理清元素的 Z 軸顯示順序的內部邏輯。
一、現象
Z 軸上的顯示順序
// 穿透父級容器的 z-index <!-- 100 * 100 的深藍色 Block --> <div class="block blue" style="position: relative; z-index: auto;"> <!-- 50 * 50 的紅色 Block --> <div class="small red" style="position: relative; z-index: -1;"></div> </div> web前端開發學習Q-q-u-n: 731771211,分享學習的方法和需要注意的小細節,不停更新最新的教程和學習方法(詳細的前端專案實戰教學影片,PDF)
// 不能穿透父級容器的 z-index <!-- 100 * 100 的深藍色 Block --> <div class="block blue" style="position: relative; z-index: 0;"> <!-- 50 * 50 的紅色 Block --> <div class="small red" style="position: relative; z-index: -1;"></div> </div>
兩段程式碼基本一樣,只有在深藍色盒子處有個
z-index
不同。當父級容器的
z-index
為
auto
的時候,紅色盒子穿過了父級容器出現在了父級容器的背後(被父級容器遮擋住)。當父級容器的
z-index
為
0
的時候,紅色盒子無法穿過父級容器。
元素 Z 軸對比
// 元素 Z 軸對比 <!-- 100 * 100 的深藍色盒子 --> <div class="block blue"> <div style="position:relative;z-index:auto;"> <!-- 50 * 50 的紅色盒子 --> <div class="small red" style="position:absolute; z-index:2;"></div> </div> <div style="position:relative;z-index:auto;"> <!-- 50 * 50 的灰色盒子 --> <div class="small yellow" style="position:absolute; z-index:1; top: 10px;"></div> </div></div>
// 元素 Z 軸對比 <!-- 100 * 100 的深藍色盒子 --> <div class="block blue"> <div style="position:relative;z-index:0;"> <!-- 50 * 50 的紅色盒子 --> <div class="small red" style="position:absolute; z-index:2;"></div> </div> <div style="position:relative;z-index:0;"> <!-- 50 * 50 的灰色盒子 --> <div class="small yellow" style="position:absolute; z-index:1; top: 10px;"></div> </div> </div> web前端開發學習Q-q-u-n: 731771211,分享學習的方法和需要注意的小細節,不停更新最新的教程和學習方法(詳細的前端專案實戰教學影片,PDF)
同樣的,以上兩段程式碼基本一樣,都是有 3 層的 DIV 盒子。最外層是一個深藍色盒子,中間一層容器盒子,最下面一層紅色及灰色盒子。不同之處在於中間這層容器盒子的
z-index
由
auto
變成了
0
。最底下的紅色及灰色盒子的 Z 軸層級比較的結果就截然不同。**由以上兩個例子我們可以發現,當 ****z-index 為數值並且生效的時候,容器會發生一種變化,會使得容器內的子元件無法穿過容器本身,並且子元件的層級由父元件決定。
這種變化後的容器元素我們稱之為層疊上下文。
二、特性
層疊上下文有幾個特性層疊上下文可以巢狀,內部層疊上下文及其所有子元素均受制於外部的層疊上下文。
這個好理解,可以參考例子 2 。當第二層的容器盒子升級為層疊上下文時,紅色盒子及灰色盒子的 Z 軸層級受制於第二層的容器盒子。
每個層疊上下文和兄弟元素獨立,也就是當進行層疊變化或渲染的時候,只需要考慮後代元素。
這一條在效能最佳化上可以用的上。在更新 DOM 元素的時候考慮上層疊上下文可以使得站點效能表現更加優異。
層疊上下文未指定
z-index
時,其層疊等級與
z-index``: 0
相同, 要比普通元素高。指定
z-index
時按照層疊規則來。
這條專門指的由 CSS3 屬性建立出來的層疊上下文,其本身未指定 z-index。其層疊等級應該是 z-index: 0。
三、建立
層疊上下文大體上可分為三種建立方式1. 頁面根元素,稱為根層疊上下文 2.
z-index
值為數值的定位元素的傳統層疊上下文3. 其他 CSS3 屬性(詳情可動手實驗瞭解)
-
z-index
值不為auto
的flex
項(父元素display:flex | inline-flex
) - 元素的
opacity
值不是1
- 元素的
transform
值不是none
- 元素的
filter
值不是none
注意:1、z-index: auto 和 z-index: 0 在層疊等級上屬於同一級。但是 z-index: 0 就是符合這一條“z-index 為數值”會使得元素升級為層疊上下文。2、 IE6,7 有個不合常理的地方,就是當元素的 z-index 為 auto 的時候,該元素也升級為建立層疊上下文。這就是為什麼在過去 IE6/IE7 的 z-index 一直是個老大難的原因。
四、兩個概念:層疊順序、層疊等級
在說層疊規則之前兩個概念需要大家瞭解一下,這有利於我們在日常交流中探討相關的問題。
- 層疊順序( Stacking Order ),這個其實就是很字面的意思,它表示元素髮生層疊時按照特定的順序規則在 Z 軸上垂直顯示順序。
- 層疊等級( Stacking Level ),這個很好理解了。層疊等級就是個描述元素層疊順序的一個名詞,它決定了同一個層疊上下文中元素在 Z 軸上的顯示順序。舉個例子:A 元素與 B 元素重疊之後,A 元素在 B 元素上面。那麼我們就可以直接說 A 元素的層疊等級大於 B 元素的層疊等級。
五、層疊規則當元素互相層疊的時候,顯示規則如下。
- 當互相層疊的元素都是層疊上下文元素,即明確的有
z-index
值的時候(沒有明確的z-index
值的層疊上下文也就是 CSS3 建立的層疊上下文z-index
值為0
)直接比較z-index
的值,值大的處在值小的元素的上方。 - 當元素處於同一層疊上下文內時可按照如下規則進行層疊判斷。
- 當元素的層疊等級一致、層疊順序也相同的時候,在 DOM 流中處於後面的元素會覆蓋前面的元素。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901074/viewspace-2672917/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CSS 層疊上下文(Stacking Context)CSSContext
- web前端入門到實戰:css3 實現大轉盤Web前端CSSS3
- web前端入門到實戰:css騷操作之表單驗證Web前端CSS
- css 層疊上下文和層疊順序CSS
- web前端入門到實戰:Js代理模式Web前端JS模式
- [CSS LEARN]層疊上下文、層疊等級、層疊順序CSS
- web前端入門到實戰:非同步載入CSS最簡單的實現方式Web前端非同步CSS
- web前端入門到實戰:css滑鼠經過彈出子選單特效Web前端CSS特效
- web前端入門到實戰:你真的瞭解CSS繼承嗎?看完必跪Web前端CSS繼承
- Web前端開發——CSS層疊樣式表(3)Web前端CSS
- web前端入門到實戰:HTML元素巢狀問題Web前端HTML巢狀
- web前端入門到實戰:好用的Js圖表庫Web前端JS
- web前端入門到實戰:css3迴圈,模擬拼多多動畫效果Web前端CSSS3動畫
- 徹底搞懂CSS層疊上下文、層疊等級、層疊順序、z-indexCSSIndex
- CSS必知必會:從z-index到層疊上下文CSSIndex
- web前端入門到實戰:擼兩個天氣小程式Web前端
- web前端入門到實戰:簡單的圖片輪播Web前端
- web前端入門到實戰:常用網頁元素命名規範Web前端網頁
- web前端入門到實戰:H5-canvas實現粒子時鐘Web前端H5Canvas
- 前端開發入門到實戰:六種組織CSS的方式前端CSS
- 層疊上下文與層疊順序
- 如何建立stacking context?Context
- web前端入門到實戰:JS中new操作符原始碼實現Web前端JS原始碼
- web前端入門到實戰:30行前端程式碼實現任意文字轉粒子Web前端
- 前端面試之層疊上下文(z-index)前端面試Index
- Z-index 層疊上下文和層疊水平Index
- css--深入由z-index引發的層疊上下文、層疊等級和層疊順序的思考CSSIndex
- web前端入門到實戰:js擷取字串相關的知識點Web前端JS字串
- Flutter For Web入門實戰FlutterWeb
- Web前端之 CSS入門第六天Web前端CSS
- 前端開發入門到實戰:css實現div垂直水平居中的2種常用方法前端CSS
- web3從入門到實戰-理論篇Web
- 前端開發入門到實戰:css單行截斷和多行截斷問題前端CSS
- 前端開發入門到實戰:CSS三欄佈局的5種方法詳解前端CSS
- Linux入門到實戰Linux
- 前端開發入門到實戰:CSS自定義屬性+CSS Grid網格實現超級的佈局能力前端CSS
- web3從入門到實戰-NFT與代幣Web
- web前端入門到實戰:用css3實現驚豔面試官的背景即背景動畫(高階附原始碼)Web前端CSSS3面試動畫原始碼