经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » CSS » 查看文章
css中z-index: 0和z-index: auto的区别 _CSS教程_CSS
来源:jb51  时间:2021/8/16 16:35:20  对本文有异议

最近在学习层叠上下文,学习的过程中对z-index为0和为auto有什么区别产生了疑问,于是去百度查了一下资料。发现了一些问题,结合自己的实践(实验?)整理出了这篇笔记。

勘误

查资料时发现有一种说法是z-index为0是会创建新的层叠上下文,0会在auto上面。后半句话是错误的,z-index: 0与z-index不设置,也就是z-index: auto在同一层级内没有高低之分,文档流中后出现的会覆盖先出现的。

设置z-index: 0或z-index: auto,文档流中后出现的会覆盖先出现的。

来做一些小实验

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>z-index为0或auto</title>
  5. <style>
  6. .red,
  7. .blue{
  8. width: 200px;
  9. height: 200px;
  10. }
  11.  
  12. .red {
  13. position: absolute;
  14. z-index: 0;
  15. top: 100px;
  16. left: 100px;
  17. background: #FF0000;
  18. }
  19. .blue {
  20. position: absolute;
  21. z-index: auto;
  22. top: 40px;
  23. left: 40px;
  24. background: #0000FF;
  25. }
  26. </style>
  27. </head>
  28.  
  29. <body>
  30. <div class="red">
  31. index-0
  32. </div>
  33. <div class="blue">index-auto</div>
  34. </body>
  35. </html>

这段代码的结果是:

可以看到蓝色元素覆盖在了红色元素上方,交换红蓝元素块在文档中的顺序为

  1. <div class="blue">index-auto</div>
  2. <div class="red">
  3. index-0
  4. </div>

可以得到

这时红色元素又覆盖在蓝色元素之上。可以得出z-index取值0或auto对元素在层叠上下文中的排列顺序并没有影响。
除次之外,我还在MDN文档中看到了这样一句话:

当没有指定z-index的时候, 所有元素都在会被渲染在默认层(0层)。

也就是auto和0是同一层。
再来给上面的代码在蓝色块后面新增一个绿色的块。

  1. <div class="green">不设置z-index</div>
  2. .green {
  3. position: absolute;
  4. top: 160px;
  5. left: 160px;
  6. background: greenyellow;
  7. }

这时页面长这样。

绿色没有设置z-index值。一般浏览器position不为static,且不设置z-index时,z-index为auto,IE6/7下z-index为0。
绿色作为最后出现的元素,覆盖了蓝色和红色两个元素。

z-index: 0创建了层叠上下文

现在我们来验证红色元素因为z-index:0产生了层叠上下文。在红色元素里添加测试元素

  1. <div class="test"></div>
  2. .test {
  3. width: 140px;
  4. height: 140px;
  5. position: absolute;
  6. right: 0px;
  7. top: 0px;
  8. background: grey;
  9. z-index: 10;
  10. }

这时候页面长这样

灰色测试块被蓝色和绿色块所覆盖。
显然易见,即使test元素的z-index为10,也无法展示在层叠上下文的最上层。因为test隶属于它的父元素red创建的层叠上下文。当一个元素产生了层叠上下文,其子级层叠上下文的z-index值只在父级中才有意义。所有灰色块的z-index只在红色块里生效。

z-index: auto不创建层叠上下文

那么现在将这个测试元素放在蓝色块里试一试呢?(蓝色元素的z-index值为auto)

可看到灰色元素展示在所有元素的最上层,z-index值生效了!这个时候test元素隶属于根元素创建的层叠上下文(在层叠上下文的层次结构中,没有创建层叠上下文的元素同其父级处于一个层叠上下文。蓝色块没有创建层叠上下文,与其父元素也就是根元素是同一个层叠上下文)。红色元素也属于根元素创建的层叠上下文,但是红色元素z-index为0,0小于10,因此灰色块在上。

总结

  • 不设置z-index值时,默认是auto。默认层也就是0层。
  • z-index: 0 与没有定义 z-index 也就是z-index: auto在同一层级内没有高低之分,文档流中后出现的会覆盖先出现的。
  • z-index: 0 会创建层叠上下文z-index: auto不会创建层叠上下文。

到此这篇关于css中z-index: 0和z-index: auto的区别 的文章就介绍到这了,更多相关z-index: 0和z-index: auto 区别 内容请搜索w3xue以前的文章或继续浏览下面的相关文章,希望大家以后多多支持w3xue! 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号