css中z-index: 0和z-index: auto的区别


Posted in HTML / CSS onAugust 23, 2021

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

勘误

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

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

来做一些小实验

<!DOCTYPE html>
<html>
<head>
  <title>z-index为0或auto</title>
  <style>
    .red,
    .blue{
      width: 200px;
      height: 200px;
    }

    .red {
      position: absolute;
      z-index: 0;
      top: 100px;
      left: 100px;
      background: #FF0000;
    }
    .blue {
      position: absolute;
      z-index: auto;
      top: 40px;
      left: 40px;
      background: #0000FF;
    }
  </style>
</head>

<body>
  <div class="red">
    index-0
  </div>
  <div class="blue">index-auto</div>
</body>
</html>

这段代码的结果是:

css中z-index: 0和z-index: auto的区别

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

<div class="blue">index-auto</div>
<div class="red">
  index-0
</div>

可以得到

css中z-index: 0和z-index: auto的区别

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

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

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

<div class="green">不设置z-index</div>
 
.green {
  position: absolute;
  top: 160px;
  left: 160px;
  background: greenyellow;
}

这时页面长这样。

css中z-index: 0和z-index: auto的区别

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

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

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

<div class="test"></div>
 
.test {
  width: 140px;
  height: 140px;
  position: absolute;
  right: 0px;
  top: 0px;
  background: grey;
  z-index: 10;
}

这时候页面长这样

css中z-index: 0和z-index: auto的区别

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

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

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

css中z-index: 0和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 区别 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木! 

 
HTML / CSS 相关文章推荐
CSS3支持IE6, 7, and 8的边框border属性
Dec 28 HTML / CSS
CSS3 制作旋转的大风车(充满童年回忆)
Jan 30 HTML / CSS
css3的transition效果和transfor效果示例介绍
Oct 30 HTML / CSS
布局和排版教程 纯css3实现图片三角形排列
Oct 17 HTML / CSS
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
May 09 HTML / CSS
CSS3实现3D翻书效果
Jun 20 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
Apr 25 HTML / CSS
HTML5使用DOM进行自定义控制示例代码
Jun 08 HTML / CSS
解析HTML5中的新功能本地存储localStorage
Mar 01 HTML / CSS
深入浅析HTML5中的article和section的区别
May 15 HTML / CSS
Canvas 帧动画吃苹果小游戏
Aug 05 HTML / CSS
CSS 一行代码实现头像与国旗的融合
Oct 24 HTML / CSS
CSS Transition通过改变Height实现展开收起元素
Aug 07 #HTML / CSS
css3中transform属性实现的4种功能
Aug 07 #HTML / CSS
从QQtabBar看css命名规范BEM的详细介绍
Aug 07 #HTML / CSS
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
Aug 07 #HTML / CSS
CSS 实现Chrome标签栏的技巧
纯html+css实现Element loading效果
纯html+css实现奥运五环的示例代码
You might like
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
javascript document.images实例
2008/05/27 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
深入浅析Python的类
2018/06/22 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
幼儿园家长会邀请函
2014/01/15 职场文书
优秀实习生感言
2014/03/01 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL
Rust中的Struct使用示例详解
2022/08/14 Javascript