CSS-合理使用z-index控制盒子視軸高度,解決z-index失效

關于z-index我們的共識

共識一

首先,我們都同意,z-index對于普通盒子是無效的,這里的“普通盒子”是除了下文我會提到的“神奇盒子”外的所有盒子,至于什么是“神奇盒子”請慢慢看。?
對于普通盒子,不管z-index值如何,寫在html文檔中后面的塊會在寫在前面的盒子上面,float的盒子會在沒有float的盒子上面,文字等inline、inline-block元素會在block元素的上面。

以下所有代碼示例請查看github查看完整源碼

    <div class="first">first div</div><div class="second">second div</div><div class="inline">inline div</div><div class="float_first">first float div</div><div class="float_second">second float div</div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
        div{width: 100px;height: 200px;border: 2px solid silver;}.first{background-color: blue;}.second{background-color: red;}.inline{display: inline-block;background-color: pink;}.float_first{float: left;background-color: green;}.float_second{float: left;background-color: orange;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

x軸、y軸位置我是在chrome中用margin-top負值和margin-left正值調的,結果如下:?
這里寫圖片描述?
不管我如何給first div加z-index,哪怕給個9999這么大值,second div還是在其上面,其他塊同理,z-index不能影響上圖視軸(z軸)順序,html標簽順序會影響first div、second div及first float div、second float div視軸高低。所以說,z-index不是給這些盒子使用的。

共識二

對于受z-index控制的,姑且稱之為“神奇”的盒子(其實就是很多博客說的 stacking context,層疊上下文 ),z-index值越大其視軸越高,離用戶越近,最大的就在最上面,會遮擋其他神奇盒子。?
這點不用我舉例吧,很多人都習慣寫z-index:900這種樣式,就是想讓這個盒子在最上面,當又出現一個盒子,就不得不寫z-index:901這種讓人迷糊的樣式。

兩個共識引出的一個問題

了解以上兩個共識以后,你有沒有想過這個問題,那么z-index 負值 與 普通盒子們誰在上面呢?

神奇盒子(層疊上下文)與普通盒子的視軸排列

我首先想介紹下層疊上下文,也就是什么樣的盒子是神奇的盒子。

具有哪些樣式的盒子會成為神奇盒子(層疊上下文)

首先,我們最常見的定位不是static的盒子,是神奇盒子,其他創建神奇盒子的方式我引用的博客的總結,如下:

  • z-index值不為auto的flex項(父元素display:flex|inline-flex).
  • 元素的opacity值不是1.
  • 元素的transform值不是none.
  • 元素mix-blend-mode值不是normal.
  • 元素的filter值不是none.
  • 元素的isolation值是isolate.
  • will-change指定的屬性值為上面任意一個。
  • 元素的-webkit-overflow-scrolling設為touch.?
    關于以上總結,我測試過 opacity和transform ,但引用博客博主靠譜,大家可以親測下。其實,其他我沒測也是因為不常用,大家有個印象就ok。

神奇盒子與普通盒子視軸高度

話不多說,上代碼。

    <div class="block">block box</div><div class="absolute">absolute box</div><div class="negative">negative box</div><div class="positive">positive box</div><div class="float">float box</div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
        html{padding: 200px;}div{width: 200px;height: 100px;border: 5px solid silver;}.block{background-color: green;}.absolute{position: absolute;background-color: blue;margin-top: -60px;margin-left: 40px;}.negative{position: absolute;background-color: red;z-index: -1;margin-top: -140px;margin-left: -20px;}.positive{position: absolute;background-color: purple;z-index: 1;margin-top: -40px;margin-left: 60px;}.float{float: left;background-color: pink;margin-top: -80px;margin-left: 20px;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

結果:?
這里寫圖片描述?
結論: html -> z-index負值神奇盒子(絕對定位) -> 塊狀盒子 -> float 盒子 -> z-index auto或者0的神奇盒子(絕對定位) -> z-index正值神奇盒子(絕對定位),視軸越來越高。PS,inline或者inline-block盒子高于float盒子,但低于auto z-index神奇盒子,就是位于粉色和藍色盒子之間。

關于這個結論,你可以這么考慮,在普通盒子視軸排列的基礎上,神奇盒子可以根據z-index值自由穿梭于普通盒子上或下。

以上都是兄弟盒子之間的關系,父子盒子關系很容易理解,子盒子會高于父盒子,不然我們寫的子塊不都被父塊覆蓋了。如果我想知道子盒子與其父盒子的兄弟盒子的關系呢(子盒子與其伯伯盒子的關系)?

當討論嵌套盒子視軸關系時需要注意的問題

這里我只想提醒大家,如果父盒子是神奇盒子,子盒子與其伯伯盒子(子盒子的父盒子的兄弟盒子)的視軸關系是由父盒子與這個伯伯盒子關系決定的。比如:

    <div class="father">fahter box <div class="son">son box</div></div><div class="brother">brother box</div>
  • 1
  • 2
  • 1
  • 2
        div{width: 200px;height: 100px;border: 5px solid silver;position: absolute;}.father{background-color: red;z-index: 0;}.brother{background-color: blue;z-index: 1;}.son{background-color: yellow;z-index: 999;width: 100px;height: 50px;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

位置請用margin或top、left自己在chrome里調下,你會看到如下圖:?
這里寫圖片描述

沒錯,son的z-index為999,但是居然不在最上面,最上面的是 z-index為1的div。這個時候請不要大叫 z-index 失效,這是正常表現。因為son的父盒子father是神奇盒子,它的z-index為0,所以son與brother的關系由father與brother的關系決定,顯然father在下么,那son就得在下,不管你給它設多大的z-index。

一道關于z-index的面試題

最后,既然你已經耐心讀到這了,我就給你出道題考考你。僅使用css如何讓上圖中的brother在son與father中間?也就是,僅使用css如何讓一個盒子位于它的兄弟盒子與兄弟盒子的子盒子中間。?





答案?

div{
width: 200px;
height: 100px;
border: 5px solid silver;}
.father{
background-color: red;
}
.brother{
background-color: blue;
z-index: 1;
position: absolute;
}
.son{
background-color: yellow;
z-index: 999;
width: 100px;
height: 50px;
position: absolute;
}


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

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

相關文章

Activiti6.0教程 Eclipse安裝Activiti Diagram插件(一)

最近這段時間打算出一個Activiti6.0的詳細教程&#xff0c;Activiti作為一個流行的開源工作流引擎&#xff0c;正在不斷發展&#xff0c;其6.0版本以API形式提供服務&#xff0c;而之前版本基本都是要求我們的應用以JDK方式與其交互&#xff0c;只能將其攜帶到我們的應用中&…

JS性能優化之文檔碎片-document.createDocumentFragment

講這個方法之前&#xff0c;我們應該先了解下插入節點時瀏覽器會做什么。 在瀏覽器中&#xff0c;我們一旦把節點添加到document.body&#xff08;或者其他節點&#xff09;中&#xff0c;頁面就會更新并反映出這個變化&#xff0c;對于少量的更新&#xff0c;一條條循…

man(2) W

wait(2) wait3(2) wait4(2) waitpid(2) waitid(2) SEE ALSO _exit(2), clone(2), fork(2), kill(2), ptrace(2), sigaction(2), sig‐ nal(2), wait4(2), pthread_create(3), credentials(7), signal(7)轉載于:https://www.cnblogs.com/xpylovely/p/11018021.html

window.onload和$(document).ready(function(){})的區別

前段時間在面試之前查找并整理了一下window.onload和$(document).ready(function(){})區別&#xff0c;今天有時間更到我的博客上&#xff0c;由于本人資歷尚淺&#xff0c;如有不對的地方&#xff0c;還請指正。 原文出自&#xff1a;http://www.php100.com/html/program/jque…

任務計劃

普及組題庫:(94/100) luogu: 網絡流&#xff1a;P2423,P2055,P3191,P3153,P2598,P4174 線段樹&#xff1a;P1712,P4145,P4868,P2619,P2572,P4247,P4246,P4198 ST表&#xff1a;P2880 DFS序(或歐拉序)線段樹&#xff1a;P3178,P3459 樹鏈剖分&#xff1a;P3384,P3379,P4315,P248…

左右滑動欄

展示效果圖&#xff1a; 父 <template><div ref"topBox" class"swiper-in page-container bg-white"><div class"page-body"><drag-box class"drag-box"><div class"relative" :class"{ex…

Active MQ

轉載于:https://www.cnblogs.com/ygl888/p/11020647.html

jQuery Ajax 實例

一、$.ajax的一般格式 $.ajax({ type: POST, url: url , data: data , success: success , dataType: dataType }); 二、$.ajax的參數描述 參數 描述 url 必需。規定把請求發送到哪個 URL。 data 可選。映射或字符串值。規定連同請求發送到服務器的數據。 success(data, textSt…

element ui封裝 tree下拉框

展示&#xff1a; 子組件封裝 <!-- 樹狀選擇器 科室樹形 --> <template><el-popoverref"popover"placement"bottom-start"trigger"click"show"onShowPopover"hide"onHidePopover"><el-treeref&quo…

Sitecore A / B測試

測試您的Web內容非常重要。這是查看頁面中的頁面和組件是否達到預期效果的好方法。測試還可以讓您放心&#xff0c;您的內容足夠吸引人&#xff0c;以增加轉化次數并最大限度地提高增長率。 測試如何運作&#xff1f; 測試通過向訪問者隨機顯示不同版本的內容來工作。Sitecore …

jQuery on()方法綁定動態元素的點擊事件無響應的解決辦法

$(#check_all).on(click , function(){ alert(1); }); $("#yujinlist").append(html); count; } 以上代碼執行時&#xff0c;點擊#check_all時&#xff0c;alert一直沒反應&#xff0c;后在網上查資料時&#xff0c;才知道on前面的元素也必須在頁面加載的時候就存在…

讓數字保持在整數范圍內

讓數字保存在整數范圍內 如&#xff1a; (1~10)之間的數取 10 (10~20)之間的數取 20 (20~30)之間的數取 30 let max (Math.round(數字/10)1)*10

UVA572 Oil Deposits DFS求解

小白書上經典DFS題目。 1. 遞歸實現 // from: https://www.cnblogs.com/huaszjh/p/4686092.html#include <stdio.h> #include <string.h> #define maxn 105 unsigned char data[maxn][maxn]; int m, n, vis[maxn][maxn];void dfs(int x, int y, int ans) {if (x &l…

HTML 表格中的行合并與列合并

colspan是橫向合并&#xff1b;rowspan是縱向合并。colspan是“column span&#xff08;跨列&#xff09;”的縮寫。colspan屬性用在td標簽中&#xff0c;用來指定單元格橫向跨越的列數&#xff1a;單元格1 單元格2 單元格3 單元格4 該例通過把colspan設為“3”, 令所在單元格橫…

java快速排序

package com.atguigu.java;/*** 快速排序* 通過一趟排序將待排序記錄分割成獨立的兩部分&#xff0c;其中一部分記錄的關鍵字均比另一部分關鍵字小&#xff0c;* 則分別對這兩部分繼續進行排序&#xff0c;直到整個序列有序。*/ public class QuickSort {private static void s…

網址備份

1.jstl標簽庫http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/2.tomcat服務器http://tomcat.apache.org/3.mysql架包https://mvnrepository.com/4.jqueryhttps://github.com/jquery/jquery/releases5.圖標http://icons8.com/preloaders6.jquery-formhttp://…

前端開發-熱更新原理解讀

- 一、websocket簡介- 二、熱跟新原理- 三、實例剖析- 四、總結websocket簡介 在h5推出之前&#xff0c;瀏覽器應用跟服務器端通信的機制只有http協議&#xff0c;http是一種無狀態的網絡協議&#xff0c;前端向服務器發起一個請求&#xff0c;服務器給出一次應答&#xff…

java楊輝三角

package com.atguigu.exer; /** 使用二維數組打印一個 10 行楊輝三角。【提示】1. 第一行有 1 個元素, 第 n 行有 n 個元素2. 每一行的第一個元素和最后一個元素都是 13. 從第三行開始, 對于非第一個元素和最后一個元素的元素。即&#xff1a; yanghui[i][j] yanghui[i-1][j-1…

這65條工作和成長建議,你將受用終生!

這65條工作和成長建議&#xff0c;每一條都值得我們認真思考。希望對你有啟發。 從1990年進入格力&#xff0c;董明珠已經工作了近30年。 她花了近30年的時間&#xff0c;一手把格力從一家虧損的中小企業變成全球500強&#xff0c;年銷售額超過1400億。 2004年&#xff0c;她被…

HTML5事件—visibilitychange 頁面可見性改變事件

又看到一個很有意思的HTML5事件 visibilitychange事件是瀏覽器新添加的一個事件&#xff0c;當瀏覽器的某個標簽頁切換到后臺&#xff0c;或從后臺切換到前臺時就會觸發該消息&#xff0c;現在主流的瀏覽器都支持該消息了&#xff0c;例如Chrome, Firefox, IE10等。雖然這只是一…