深入解析CSS中z-index属性对层叠顺序的处理

2020-05-05 07:30:21易采站长站整理

HTML Markup

201635111602370.png (1030×712)

说明:

1. 在构造渲染树时会为element生成对应的box,所以div#d1->d1:box,div#d2->d2:box,div#d3->d3:box,div#d4->d4:box,p#p1->p1:box。

2. 对于positioned box而言,若z-index属性值不是0,则会创建一个新的stacking context,并且其子孙box将属于这个新stacking context。

3. 同一个stacking context的z-index才具有可比性,也就是说在讨论z-index时必须带说明是哪个stacking context下的z-index。如示例般,虽然-9999比10小,但由于d4:box和d1:box位于不同的stacking context,因此无法判断哪个box更靠近用户。

层叠规则                          

层叠规则就是决定到底哪个box更靠近用户。

1. 前提:boxes属于同一个stacking context,并且z-index相同

      规则:按照box对应的element在文档树的顺序,后者比前者更靠近用户(back-to-front)

CSS Code复制内容到剪贴板

<!– 两种情况下,d2均排在d1的后面,因此d2在z-axis上位于d1的上面 –>   
<div id="d1">   
  <div id="d2">   
  </div>   
</div>   
  
<div id="d1">   
</div>   
<div id="d2">   
</div>  

2. 前提:boxes属于同一个stacking context,并且z-index不同

规则:z-index属性值大的box更靠近用户

CSS Code复制内容到剪贴板

<!– d1的z-index为12,而d2的z-index为0,所以d1在d2的上面 –>   
<div id="d1" style="position:relative;z-index: 12;">   
</div>   
<div id="d2" style="z-index: 0;margin-top:-20px;">   
</div>  

3. 前提:boxes属于不同的stacking context,并且stacking contexts没有祖孙/父子关系

      规则:boxes会向上沿着父box进行搜索,直到父boxes属于同一个stacking context为止,然后比较父boxes的z-index属性值,z-index属性值大的box更靠近用户。

CSS Code复制内容到剪贴板

<div>   
  <div id="d1" style="position:relative; z-index:10;">   
    <div id="d4" style="background:red; width:100px; height:100px;position:relative; z-index:9999;">d3</div>    
  </div>