CSS中的z-index屬性:掌控頁面元素層疊順序的利器
本文探討CSS中的z-index
屬性,它用於控制頁面元素的層疊順序。數值較高的元素會顯示在數值較低的元素之上。這類似於頁面上的x軸和y軸分別控制元素的水平和垂直位置,z-index
則控制元素在z軸上的堆疊順序。
關鍵要點:
- CSS中的
z-index
屬性控制頁面元素的堆疊順序,數值越高,元素顯示在越上面。它僅作用於position
屬性值為absolute
、relative
或fixed
的元素。 - 通過設置
position: relative
,且不為top
、right
、bottom
或left
屬性賦值,即可控制元素的堆疊順序,而無需改變其在頁面上的原始位置。 -
z-index
值的解析在其父級堆疊上下文內進行,這意味著即使元素的z-index
值較高,如果其父容器的z-index
值較低,該元素仍可能顯示在其他元素之下。 - 為提高組織性和靈活性,建議使用100的增量設置
z-index
值。這種方法在兩個現有層之間添加新層時,提供了99個可用的數值選擇。
默認堆疊順序
在編寫HTML時,文檔中靠後的元素默認會堆疊在靠前的元素之上。
<header class="site-header"></header> <main class="site-content"></main> <footer class="site-footer"></footer>
在這個HTML片段中,如果所有元素都設置為重疊,則頁腳會堆疊在主體內容之上,主體內容又會堆疊在頁眉之上。
通過結合position
屬性和top
、right
、bottom
、left
偏移屬性,可以使元素重疊。
如果將每個元素的position
屬性設置為absolute
,它們將全部重疊。由於頁腳在文檔中最後出現,因此默認情況下會堆疊在前面兩個元素之上。
.site-header, .site-content, .site-footer { position: absolute; width: 400px; padding: 20px; } .site-header {top: 0; left: 0;} .site-content {top: 50px; left: 50px;} .site-footer {top: 100px; left: 100px;}
使用偏移屬性top
和left
,可以更清晰地看到元素的堆疊順序。
堆疊上下文
雖然使用position: absolute
可以創建重疊的元素,但這並沒有創建所謂的堆疊上下文。
堆疊上下文可以通過以下幾種方式創建:
- 元素具有
position: absolute
或relative
屬性,且z-index
值不是auto
。 - flexbox項目具有非
auto
的z-index
值。 - 元素的不透明度(
opacity
)小於1。 - 元素的
transform
屬性設置為非none
值。
創建和使用堆疊上下文的常見方法是第一種,讓我們重點關註一下。
回到之前的例子,我們有三個元素彼此重疊,但目前它們沒有z-index
值。
z-index
屬性允許我們控制堆疊順序。
如果我們將頁腳的z-index
設置為1,主體的z-index
設置為2,頁眉的z-index
設置為3,則默認堆疊順序可以完全反轉。
表面上看起來很簡單:z-index
值越高,元素堆疊得越高——因此z-index: 9999
將始終位於z-index: 9
之上。不幸的是,實際情況比這更複雜。
堆疊上下文中的z-index
<header class="site-header"></header> <main class="site-content"></main> <footer class="site-footer"></footer>
如果在site-content
容器內添加一個盒子,並將其定位在右下角之外,我們會看到它位於綠色盒子之上,粉色盒子之下。
.site-header, .site-content, .site-footer { position: absolute; width: 400px; padding: 20px; } .site-header {top: 0; left: 0;} .site-content {top: 50px; left: 50px;} .site-footer {top: 100px; left: 100px;}
根據我們對z-index
的了解,我們可能認為要使這個黃色盒子顯示在粉色盒子之上,我們只需為z-index
設置一個更高的值。
如果我們將z-index
設置為4(高於z-index: 3
),我們不會看到任何變化。人們通常會嘗試使用非常大的數字(如9999)來強制堆疊,但這也沒有效果。在代碼庫中看到這樣的z-index
值是一種代碼異味,因此如果可以,請盡量避免。
我們無法獲得黃色盒子位於粉色盒子之上的預期結果的原因在於z-index
在堆疊上下文中的行為方式。
為了演示這一點,讓我們來看一個稍微複雜的例子,這個例子我借鑒了MDN網站。
...(此處省略了MDN例子中的HTML和CSS代碼,因為篇幅過長,但保留了關鍵的解釋部分)...
所有這些都可以通過這樣一個事實來解釋:所有z-index
值都在其父堆疊上下文內解析。因為父容器.site-content
的z-index
值高於頁腳,所以.site-content
內的所有定位元素都在該上下文中進行評估。
理解堆疊上下文內元素的堆疊順序,可以將其類比為嵌套有序列表中的子項。
這可以寫成如下:
- 頁眉:
z-index: 5
- 主體:
z-index: 4
- 盒子1:
z-index: 4.6
- 盒子2:
z-index: 4.1
- 盒子3:
z-index: 4.3
- 盒子1:
- 頁腳:
z-index: 2
因此,即使頁眉的z-index
是5,盒子1的z-index
是6,它的渲染順序是4.6,仍然小於5。因此,盒子1顯示在頁眉之下。
起初這有點令人困惑,但是隨著實踐,它確實開始變得有意義了!
z-index僅適用於定位元素
如果要控制元素的堆疊順序,可以使用z-index
。但是,只有當元素的position
值為absolute
、relative
或fixed
時,z-index
才會生效。
使用position
精確放置元素非常適合構建複雜的佈局或有趣的UI模式,但通常希望在不移動元素在頁面上的原始位置的情況下控制堆疊順序。
如果是這種情況,可以只設置position: relative
,但不為top
、right
、bottom
或left
提供任何值。元素將保留在其在頁面上的原始位置,文檔流不會中斷,並且z-index
值將生效。
可以使用負z-index值
分層元素通常用於構建複雜的形狀或UI組件。這通常意味著將元素彼此疊加,z-index
值不斷增加。要將元素放置在另一個元素的下方,它只需要具有較低的z-index
值,而該較低的值可以為負值。
這在使用偽元素並希望將其定位在其父元素內容之後時非常有用。
由於堆疊上下文的工作方式,如果:before
或:after
元素要定位在其父元素文本內容之後,則需要在其上設置負z-index
值。
z-index策略
讓我們總結一下我在項目中應用z-index
時使用的一個簡單策略。
前面我們使用了z-index
值的個位數增量,但是如果要在設置為z-index: 3
和z-index: 4
的兩個元素之間添加一個新元素呢?您必須更改許多值——可能在整個代碼庫中,這可能會導致問題,並可能導致網站其他部分的CSS中斷。
使用100的步長設置z-index
在處理z-index
時,經常會看到這樣的代碼:
<header class="site-header"></header> <main class="site-content"></main> <footer class="site-footer"></footer>
在我看來,這看起來很糟糕(並且在附加!important
後只會變得更糟)。看到這樣的值通常表明開發人員不理解堆疊上下文,並試圖強制一層位於另一層之上。
與其使用9999、53或12之類的任意數字,我們可以系統化我們的z-index
比例,並為流程帶來更多秩序。這不僅僅是因為我有開發人員強迫症。說真的。
我沒有使用z-index
的個位數增量,而是使用100的增量。
.site-header, .site-content, .site-footer { position: absolute; width: 400px; padding: 20px; } .site-header {top: 0; left: 0;} .site-content {top: 50px; left: 50px;} .site-footer {top: 100px; left: 100px;}
我這樣做是為了保持事物的組織性,同時也注意到了項目中使用的許多不同層。另一個好處是,如果需要在兩個其他層之間添加一個新層,則可以在兩者之間選擇99個潛在的值。
在構建z-index
系統時,這種手動方法非常可靠,但與Sass之類的預處理器結合使用時,可以使其更靈活。
...(此處省略了FAQs部分,因為與之前的輸出內容重複性較高)...
以上是掌握CSS中的z索引的詳細內容。更多資訊請關注PHP中文網其他相關文章!

文章討論了CSS FlexBox,這是一種佈局方法,用於有效地對齊和分佈響應設計中的空間。它說明了FlexBox用法,將其與CSS網格進行了比較,並詳細瀏覽了瀏覽器支持。

本文討論了使用CSS創建響應網站的技術,包括視口元標籤,靈活的網格,流體媒體,媒體查詢和相對單元。它還涵蓋了使用CSS網格和Flexbox一起使用,並推薦CSS框架

本文討論了CSS盒裝屬性,該屬性控制了元素維度的計算方式。它解釋了諸如Content-Box,Border-Box和Padding-Box之類的值,以及它們對佈局設計和形式對齊的影響。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

禪工作室 13.0.1
強大的PHP整合開發環境

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器