深入剖析z-index屬性

来源:https://www.cnblogs.com/mymelody/archive/2019/03/11/10511096.html
-Advertisement-
Play Games

一、z-index七階層疊順序表 1.層疊順序的大小比較: background/border < 負z-index < block塊狀水平盒子 < float浮動盒子 < inline/inline-block水平盒子 < z-index:auto或者看成z-index:0 /不依賴z-index ...


一、z-index七階層疊順序表

1.層疊順序的大小比較:

background/border < 負z-index < block塊狀水平盒子 < float浮動盒子 < inline/inline-block水平盒子 < z-index:auto或者看成z-index:0 /不依賴z-index的層疊上下文< 正z-index。

2.層疊順序級別高的元素覆蓋級別低的元素。

二、z-index與創建層疊上下文

1.首先要註意,z-index:auto 雖然可以看作z-index:0 ,但是這僅僅是在層疊順序的比較上;從層疊上下文上講,二者有本質差別:auto 不會創建層疊上下文,z-index:0 會創建層疊上下文。

註意有一種特殊情況,那就是IE7下,auto也會創建層疊上下文,不符合標準。

2.z-index層疊順序的比較止步於父級層疊上下文

控制視圖時,如果父級元素沒有層疊上下文,則會一直找到根元素作為層疊上下文

3.z-index:數字 + 元素屬性 配合得到層疊上下文

①position:absolute/relative以及FireFox/IE下的position:fixed;

當z-index的值為auto時,元素還是普通元素,當z-index的值為具體數字時,就會創建層疊上下文

②z-index值不為auto的flex項(display:flex/inline-flex;)

層疊上下文元素是flex子元素,而不是flex容器元素

4.不需要與z-index:數字  配合就可以創建層疊上下文的屬性

①元素的opacity值不為1;

②元素的transform值不為none;

③元素mix-blend-mode(混合模式)值不為normal;

④元素的filter(css3里的濾鏡,不是指IE6/7/8/9里私有的那個濾鏡)值不為none;

⑤元素的isolation(隔離)值是isolate(元素是孤立的)

isolation:isolate這個聲明是mix-blend-mode應運而生的。 預設情況下,mix-blend-mode會混合z軸所有層疊在下麵的元素,如果我們不希望某個層疊的元素參與混合就可以使用isolation:isolate。

⑥position:fixed聲明,部分瀏覽器(FireFox/IE)需要z-index:數字 配合 ⑦will-change指定的屬性值為上面任意一個

will-change的作用:增強頁面渲染性能,即準備GPU(圖形處理器)讓瀏覽器加速渲染的

什麼是GPU(圖形處理器)?GPU是與處理和繪製圖形相關的硬體。 GPU是專為執行複雜的數學和幾何計算而設計的,可以讓CPU從圖形處理的任務中解放出來,從而執行其他更多的系統任務,例如,頁面的計算與重繪。

當我們通過某些行為(點擊、移動或滾動)觸發頁面進行大面積繪製的時候,瀏覽器往往是沒有準備的,只能被動使用CPU去計算與重繪,由於沒有事先準備,應付渲染夠嗆,於是掉幀,於是卡頓。而will-change則是真正的行為觸發之前告訴瀏覽器,提前預約從容不迫;突然造訪手忙腳亂。

⑧元素的-webkit-overflow-scrolling設為touch(移動端特有的原生的滾動)

5.不支持z-index層疊上下文元素的層疊順序均是z-index:auto;

6.為何定位元素會覆蓋普通元素?

例如當圖片使用了position:relative;此時圖片z-index:auto;這時圖片的的層疊順序 > 內聯元素(普通的圖片文字是內聯元素,層疊順序是inline/inline-block),所以會覆蓋。

三、z-index相關實踐時註意的一些原則

1.最小化影響原則

目的:避免z-index嵌套層疊關係混亂

原因:①元素的層疊水平主要由所在的層疊上下文決定

②IE7 z-index:auto;也會新建層疊上下文

做法:①避免使用定位屬性

②定位屬性從大容器平級分離為私有小容器(relative課程)

2.不犯二準則

目的:避免z-index混亂,出現一山比一山高的樣式問題

原因:多人協作以及後期維護

做法:對於非浮層元素,避免設置z-index值,z-index沒有任何道理需要超過2

(浮層元素:比如彈框,在頁面里拖來拖去)

3.組件層級計數器

目的:避免浮層組件因z-index背覆蓋的問題

原因:①總會遇到意想不到的高層級元素(比如其他團隊介入,或者使用網上的其他組件)

②組件的覆蓋規則具有動態性(比如一個頁面有好多個彈框)

做法:組件層級計數器方法:通過js獲得body下子元素的最大z-index值,

例如組件預設是m,而body最大是n(n>m),那麼就把組件設置為n+1

4.可訪問性隱藏   人肉眼看不見,但是輔助設備可以識別的隱藏

z-index負值元素在層疊上下文的背景之上,其他元素之下

做法:z-index:-1;

eg:html代碼:

XML/HTML Code複製內容到剪貼板
  1. <input type="submit" id="submit" />    
  2. <label for="submit">提交</label>   <!--label的 for關聯模擬,相容性很好-->    

css代碼:

XML/HTML Code複製內容到剪貼板
  1. [type=submit]{ position:absolute; z-index:-1; }    

原文鏈接:https://www.cnblogs.com/lucktian/p/5523165.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 續前文 "JavaScript實現ZLOGO: 前進方向和速度" 線上演示地址: http://codeinchinese.com/%E5%9C%883/%E5%9C%883.html 源碼仍在: "program in chinese/quan3" 主要功能改進是在界面可以選擇速度. 其他界面佈局 ...
  • 組件 組件之間的數據是單向綁定的。 父組件向子組件通信 是通過子組件定義的props屬性來實現。通過props定義變數與變數類型和驗證方式。 props簡化定義 在簡化定義中,變數是以數組的方式定義。 props完整定義 完整定義是採用字面量形式,type 要定義的類型 通信方式 父組件向子組件定義 ...
  • 今天主要介紹一下我們平常會經常用到的設計模式,設計模式總的來說有23種,而設計模式在前端中又該怎麼運用呢,接下來主要對比較前端中常見的設計模式做一個介紹 一、什麼是設計模式 一般來說,設計模式代表了最佳的實踐,通常被有經驗的面向對象的軟體開發人員所採用,在我們平時的軟體開發中,經常需要用到各種設計模 ...
  • 1.數據類型: 可變的引用類型:object(array ,function,正則); 不可變的原始類型:null, undefined, number, string, boolean, symbol(es6) 2.if的真和假: 以下情況會被認為返回false:(反之為真) " " 空的字元串 ...
  • BOM是browser object model的縮寫,簡稱瀏覽器對象模型 主要處理瀏覽器視窗(window)和框架(iframe),簡述了與瀏覽器進行交互的方法和介面, 可以對瀏覽器視窗進行訪問和操作,不過通常瀏覽器特定的JavaScript擴展都被看做BOM的一部分。擴展如下: 1.彈出新的瀏覽 ...
  • 基本功能 不急著寫下第一行代碼,而是先梳理一下就基本功能而言有哪些步驟。 打開文件待讀取 設置response header 發送文件到客戶端 實現基本功能 代碼結構 創建一個nodejs-static-webserver目錄,在目錄內運行npm init初始化一個package.json文件。 m ...
  • 運行 出現報錯 解決方法 ...
  • 常用 General 基礎編輯 Basic editing 導航 Navigation 搜索和替換 Search and replace 多游標和選擇 Multi-cursor and selection 豐富的語言編輯 Rich languages editing 編輯器管理 Editor man ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...