z-index的工作原理

z-index的工作原理

HTML文檔中的元素卻是存在于三個維度之中。除了大家熟知的平面畫布中的x軸和y軸,還有控制第三維度的z軸。
在這里插入圖片描述

像 margin , float , offset 這些屬性,控制著元素在x軸和y軸上的表現形式一樣。 z-index 這個屬性控制著元素在z軸上的表現形式。

z-index 屬性指定一個元素的堆疊順序。
堆疊順序是當前元素位于z軸上的值。數值越大表明元素的堆疊順序越高,越靠近屏幕。
在這里插入圖片描述

如果未指定 z-index 的屬性,元素的堆疊順序基于它所在的文檔樹。默認情況下,文檔中后來聲明的元素具有更高的堆疊順序。

除了指定的 z-index,元素的堆疊順序是由大量的因素控制的。元素按照下面表格順序進行堆疊。
在這里插入圖片描述

堆疊上下文(Stacking Contex)
當我們用 z-index 屬性指定元素的堆疊順序時,我們并不總是指定這個元素的堆疊順序相關于頁面內的其他元素。元素的堆疊順序只是相關于其堆疊上下文。
這可能會導致一些奇怪的情況,比如具有較大 z-index 的元素并不總是位于具有較低 z-index 元素的上方。
可以用下面的規則解釋堆疊上下文。

默認堆疊上下文是根元素
任何HTML文檔默認的堆疊上下文都是 元素。因此,除非創建新的堆疊上下文,默認情況下,元素的堆疊順序相關于頁面內的其他元素。

用 z-index 屬性建立一個新的堆疊上下文
我們是通過為一個元素的 z-index 屬性設置一個整數值來建立新的堆疊上下文。為達到預期效果,首先,設置該整數為當前元素的堆疊順序,其次,創建一個新的堆疊上下文。
新的堆疊上下文適用于該元素的任何子元素。子元素只和這個層堆疊上下文有關,和根堆疊上下文無關。
在下面的示例中,.foo 屬于堆疊上下文 1,而.bar 屬于堆疊上下文 2。

在這里插入圖片描述

元素的堆疊順序不能高于 (或低于) 父元素的堆疊順序
當父元素的堆疊順序被設置的時候,這也意味著,它的子元素的堆疊順序不能高于或低于這一順序 (相對于父元素的堆疊上下文)。
在下面的示例中,即使 .bar 的 z-index 值高于 .baz,它依然顯示 .baz 下方。這是因為,在堆疊上下文1中,.bar 不能高于或低于堆疊順序1。
.foo { z-index: 1; }.
bar { z-index: 1000; }.
baz { z-index: 2; }

z-index適用范圍:它必須在被設定了 position 屬性元素上時才會生效,這意味著, z-index 只有在 position 設置為除 static 屬性上的元素上時,它才能更改層疊順序,在元素沒有設置任何 position 的情況下,z-index 將不會起任何作用。

z-index 僅適用于元素在其所屬的層疊上下文中的位置。
層疊上下文涉及到了 HTML 節點和它的所有子節點, HTML 元素位于層疊上下文的 root 級別,它可以被稱為根層疊。
文檔的默認層疊上下文(或"根層疊上下文")將 HTML 元素標記為其"根層疊",并且默認情況下,所有元素都屬于此根層疊上下文,但是,任何元素節點也可以是其"局部層疊上下文"中的根層疊。
你可以通過以下幾種方法將元素指定為新的局部層疊上下文的根層疊:
1.在設置了 position 為 absolute 或 relative 或其它任何除了 auto 屬性上設置 z-index
2.使用 position: fixed 或 position: sticky
3.元素上設置的 opacity 屬性值小于1
4.在元素上使用 transform 或 will-change

例:假設fatherA和fatherB處于同一個父盒子下,屬于兄弟結點
.fatherA {z-index:100} .fatherA sonA {z-index:100000}
.fatherB {z-index:200} .fatherB sonB {z-index:50}
我們可以看到,雖然sonA的z-index大于sonB。但是sonB層級比sonA高,覆蓋于sonA之上。這是因為fatherB的層級大于fatherA

這就說明,并不是z-index越大,離屏幕越近,而是必須同一個層疊上下文環境下(即以同一個元素作為根層疊,記住,能作為根層疊的,必須是設置了定位fixed\absolute\fixed的元素。如果當前父節點不是根層疊,那么就會默認想上找設置了定位的祖先結點,最后招不到才是html標簽)z-index越大,離屏幕越近
fatherA和fatherB是處于同一個層疊上下文環境,sonA和sonB是基于不同的層疊上下文環境,fatherA層級比fatherB高,那么fatherA的子集就一定會比fatherB的子集離屏幕更近(即使fatherA的子集設置了負數的z-index,也會比fatherB的子集高)

所以,我們判斷兩個元素誰的層級高,誰離屏幕更近,優先要看兩個元素,誰的層疊上下文環境層級高(即根層疊元素的層級);其次才是如果處于同一個層疊上下文環境,才會去比較二者的z-index

我們之前碰到的antd 的 modal會被其他組件覆蓋,實際上就是因為層疊上下文環境的影響,所以modal才會給出getContainer屬性

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38720.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38720.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

不使用AMap.DistrictSearch,通過poi數據繪制省市縣區塊

個人申請高德地圖key時無法使用AMap.DistrictSearch,可以通過poi數據繪制省市縣區塊 1.進入POI數據網站找到需要的省市縣,下載對應的GeoJson文件 ,此處為poi數據網站鏈接 2.? 處理geoJson數據,可以直接新建json文件,…

FIPS PUB 196 ENTITY AUTHENTICATION USING PUBLIC KEY CRYPTOGRAPHY

部分原文 3.3 Mutual authentication protocol The following mutual entity authentication protocol is based on Section 522. “Three pass authentication”, ofISO/IEC 9798-3. Certain authentication token fields and protocol steps are specified in greater deta…

在Windows命令行中設置定時關機

在Windows命令行中設置定時關機,你可以使用shutdown命令。下面是幾個實用的例子: 立即關機: shutdown /s /t 0延遲關機: 假設你想在30分鐘后關機,可以使用(30分鐘等于1800秒):shutdown /s /t 1800定時關機: 如果你想在…

【機器學習】在【Pycharm】中的實踐教程:使用【邏輯回歸模型】進行【乳腺癌檢測】

目錄 案例背景 具體問題 1. 環境準備 小李的理解 知識點 2. 數據準備 2.1 導入必要的庫和數據集 小李的理解 知識點 2.2 數據集基本信息 小李的理解 知識點 注意事項 3. 數據預處理 3.1 劃分訓練集和測試集 小李的理解 知識點 注意事項 3.2 數據標準化 小李…

controller不同的后端路徑對應vue前端傳遞數據發送請求的方式,vue請求參數 param 與data 如何對應后端參數

目錄 案例一: 為什么使用post發送請求,參數依舊會被拼接帶url上呢?這應該就是param 與data傳參的區別。即param傳參數參數會被拼接到url后,data會以請求體傳遞 補充:后端controller 參數上如果沒寫任何注解&#xff0c…

第二高的薪水

第二高的薪水: 描述 查詢并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查詢應該返回 null(Pandas 則返回 None) pandas import pandas as pddef second_highest_salary(employee: pd.DataFrame):# 1. 刪除所有重復的薪水.employee emp…

第一后裔進不去游戲怎么辦 第一后裔免費加速器推薦

Steam年度最熱心愿榜單第五的游戲終于上線了,包好玩的新游,第一后裔,為什么說他肯定好玩呢?因為游戲第一次測試在兩年前就開始了,中間也斷斷續續測試了好多次,很多小伙伴都是體驗過游戲的,經過多…

MySQL 9.0正式版本來了!

MySQL 9.0 第一個正式版本于 2024 年 7 月 1 日發布,這是一個創新版,意味著它會增加一些新功能、修復一些問題并棄用一些舊功能。 性能相關 MySQL 9.0 支持將 EXPLAIN ANALYZE 命令輸出的 JSON 數據存儲到用戶定義的變量中,語法如下&#x…

【硬件模塊】PN532 NFC讀卡串口通信

PN532 PN532是一款功能豐富的非接觸式通訊收發模塊,其基于8051單片機核心,集成了多種通信接口和工作模式,以滿足不同應用場景的需求。以下是PN532功能相關的詳細介紹: 多種通信接口:PN532支持I2C、SPI和UART&#xff0…

MySQL的安裝和環境配置

1.下載MySQL安裝MySQL 選Custom選項為高級自定義模式 2.配置MySQL環境 安裝好之后,在桌面右鍵點擊我的電腦(有些是此電腦),然后點擊屬性,進入系統信息設置,接著點擊高級,進入環境變量界面,進入環境變量界面…

【Spring Boot】Java 持久層 API:JPA

Java 持久層 API:JPA 1.Spring Data1.1 主要模塊1.2 社區模塊 2.JPA3.使用 JPA3.1 添加 JPA 和 MySQL 數據庫的依賴3.2 配置數據庫連接信息 4.了解 JPA 注解和屬性4.1 常用注解4.2 映射關系的注解4.3 映射關系的屬性 5.用 JPA 構建實體數據表 1.Spring Data Spring…

Redis基礎教程(十):HyperLogLog

💝💝💝首先,歡迎各位來到我的博客,很高興能夠在這里和您見面!希望您在這里不僅可以有所收獲,同時也能感受到一份輕松歡樂的氛圍,祝你生活愉快! 💝&#x1f49…

Linux愛好者能對Linux癡迷到什么程度?

在開始前剛好我有一些資料,是我根據網友給的問題精心整理了一份「Linux的資料從專業入門到高級教程」, 點個關注在評論區回復“888”之后私信回復“888”,全部無償共享給大家!!!曾經想幫助全世界的人卸載掉…

歸并排序——有序序列的合并

目錄 1、簡述 2、復雜度 3、穩定性 4、例子 1、簡述 有序序列的合并(Merge of Sorted Sequences)是歸并排序的核心步驟之一。其目的是將兩個已經排序的序列合并成一個新的有序序列。這個過程在歸并排序中非常重要,因為歸并排序通過遞歸地…

技術職務管理助力智慧校園建設:深入解讀人事系統

智慧校園人事系統中的技術職務管理模塊,專注于高校及教育機構內技術人員及科研人員的職務管理,涵蓋職稱評審、技術職務任命、項目參與記錄、科研成果跟蹤及技術能力評估等多個方面,旨在通過信息化手段提升技術人才管理的效率與科學性。 在這一…

Windows如何安裝并啟動Nginx

0、前言 Nginx 是一款高性能、輕量級的Web服務器和反向代理服務器,廣泛應用于互聯網領域。它以其高效穩定、內存占用少和豐富的模塊化設計而受到開發者們的青睞。 在實際使用過程中,我們多數時候會在Linux系統上運行Nginx,但實際上&#xff…

單目行車測距攝像系統(單目測距-行車)

單目行車測距攝像系統是一種利用單個攝像頭實現車輛行駛中前方障礙物距離測量的技術。該系統通過計算機視覺算法,能夠實時分析攝像頭捕捉的圖像,精確計算出車輛與前方物體之間的距離,對于自動駕駛、高級駕駛輔助系統(ADAS&#xf…

PMP考試沒通過別擔心,補救辦法來了

2024年6月PMP考試成績正在陸續分批次發布。沒有考試通過的同學就會疑問,考試沒考過怎么辦?可不可以補考?面對PMP考試沒通過的情況,我們應該如何應對呢? 首先要告訴大家一個好消息!6月考試不通過的考生可以…

24年hvv不要掉進秘網了,特別別被反制了

這兩年的hvv,防守方已經不單單是每天坐那看監控、封ip了,越來越多的大佬投身防守工作中,讓防守從被動變成了一個主動的活了。 目前最常見的主動防守有2種,1、長時間的蜜罐運營。2、蜜罐反制。 01-蜜罐運營 蜜罐這個詞干安全的都…

七、函數練習

目錄 1. 寫一個函數可以判斷一個數是不是素數。(素數只能被1或其本身整除的數) 2. 一個函數判斷一年是不是閏年。 3.寫一個函數,實現一個整形有序數組的二分查找。 4. 寫一個函數,每調用一次這個函數,使得num每次增…