首页 > 其他分享 >css3中的z-index

css3中的z-index

时间:2023-02-28 20:33:25浏览次数:36  
标签:css3 index 顺序 层叠 父级 元素 上下文


元素的层叠黄金准则:

1)、谁大谁上:当具有明显的层叠水平标识的时候,如生效的z-index属性值,在同一个层叠上下文领域,层叠水平值大的那一个覆盖小的那一个

2)】后来居上:当元素的层叠水平一致、层叠顺序相同的时候,在DOM流中处于后面的元素会覆盖前面的元素

定位元素与传统层叠上下文

对于position值为relative/absolute以及firfox/IE浏览器(不包括Chrome浏览器)下含有position:fixed声明的定位元素,当其z-index值不是auto的时候,会创建层叠上下文

看两个例子:

<div style="position:relative; z-index:auto;">
<div style="position:absolute; z-index:2;">1</div>
</div>
<div style="position:relative; z-index:auto;">
<div style="position:absolute; z-index:1;">2</div>
</div>

例2:

<div style="position:relative; z-index:0;">
<div style="position:absolute; z-index:2;">1</div>
</div>
<div style="position:relative; z-index:0;">
<div style="position:absolute; z-index:1;">2</div>
</div>

css3中的z-index_嵌套

    

css3中的z-index_嵌套_02

 例1  效果图                                                      例2 效果图

细心的你有没有发现,上面的两个例子中,不同之处就是:第一个例子父级z-index值为auto,第二个例子父级z-index值为0,仅此不同,然后一个是1在上,一个是2在上,为什么呢?别着急,往下看哈

其实单纯从层叠水平上看,实际上z-index:auto和z-index:0是可以看成一样的,注意我说的是单纯从层叠水平上看,实际上两者在层叠上下文领域有着根本性的差异。

z-index:auto所在的div元素是一个普通定位元素,于是他们的子级层叠比较就不受父级影响,两者直接遵循我们上面提到的层叠准则:“谁大谁上”,所以第一个元素的子级z-index:2比第二个元素的子级z-index:1大,所以第一个div就在上面显示

注意:当我们为元素设置了定位(除值为static外),但没有为其设置z-index时,就默认z-index值为auto

而z-index一旦变成数值,哪怕是0,就会创建一个层叠上下文,此时层叠规则就发生了变化,层叠上下文是自成体系的,当元素发生层叠的时候,整个元素被认为是在父层叠上下文的层叠顺序中。所以两个子级的div层叠顺序比较变成了优先比较其父级层叠上下文元素的层叠顺序。这里由于外面两个div元素都是z-index:0;两者的层叠顺序一样大,此时遵循层叠原则中的“后来居上”,根据在DOM文档流中的位置决定谁在上面,于是2就在上面了,所以此时子元素的z-index没有起作用哈



有时我们在网页重构的时候会发现z-index嵌套错乱,这时要看看是不是受父级的层叠上下文元素干扰了,可能就豁然开朗了

注意的一点是:IE6/IE7浏览器,z-index:auto的定位元素也会创建层叠上下文,就是和z-index:0效果一样

position:fixed;,在过去和position:absolute/relative一样,都是需要z-index为数值的时候才会创建层叠上下文,但Chrome等webkit内核浏览器下,position:fixed;元素天然层叠上下文元素,无需z-index为数值

下面我们聊一下关于z-index的一些理解误区

一般我们会说:z-index属性只有和定位元素(position不为static的元素)一起使用的时候,才起作用,那首先这种说法,在css3世界中是站不住脚的哈,因为flex盒子的子元素也可以设置z-index属性

z-index数值越大层级越高:在多数情况下是成立的,但要注意我们上面提到的:层叠上下文是自成体系的,当元素发生层叠的时候,整个元素被认为是在父层叠上下文的层叠顺序中,也就是说,如果父元素也是在层叠上下文中,那么他们的子元素的层叠顺序不会越过父级,通俗一点说:

如果A的父级的层叠顺序比B的父级层叠顺序要高,那么即便B的z-index为9999,A的z-index为0,A依然是在B的上面,因为A的父级比B的父级层叠顺序要高


好了,今天就先聊这么多,明天再聊聊z-index为负值的情况哈

参考书籍:张鑫旭的《css世界》,在查阅的时候还看到了一个不错的博客,这里附上链接:​​z-index​​


标签:css3,index,顺序,层叠,父级,元素,上下文
From: https://blog.51cto.com/u_15983333/6091779

相关文章

  • html5和css3基础学习笔记
    网页简介一个页面包括结构、表现、行为三个部分。结构:HTML用于描述页面的结构。表现:CSS用于控制页面中元素的样式。行为:JavaScript用于响应用户操作。......
  • Indexer
    Indexer是一个用来存储资源对象的内存存储,处理用户的查询是非常快速高效的。源码路径为k8s.io/client-go/tools/cache/index.go。Indexer的实现主要分为2部分,ThreadSafeMa......
  • includes与indexOf的区别
    includes与indexOf的区别共同点:都是校验数组中是否包含对应的值不通点:includes可以校验到数组中是否包含NAN的选项;indexOf则不可以......
  • 关于数组的map、filter、every、some、find、findIndex、 includesd几个方法实现原理
    map方法原理//map遍历格式所有项并返回一个新数组Array.prototype.myMap=function(callback){letarr=[];for(leti=0;i<this.length;i++){ar......
  • SAP UI5 index.html 里的 bootstrap script 介绍
    在SAPUI5应用程序的index.html文件中,通常有一行类似于以下代码的声明:<scriptid="sap-ui-bootstrap"src="resources/sap-ui-core.js"data-sap-ui-theme="sap_b......
  • 正在保存“index.vue”: 正在运行 "vetur" 格式化程序
    一、问题描述这几天用VSCode突然不能保存格式化文件了。二、把插件 Vetur 降版,我用v0.36.1成功解决了这个问题。如果有其他解决方法,可以发在评论区,感谢!现在最新版本......
  • indexdDB 存储(转载)
    原文链接:(29条消息)HTML5本地存储indexDB新建数据库、数据库增删改查操作_#麻辣小龙虾#的博客-CSDN博客_h5本都存储增删改查完整代码<!DOCTYPEhtml><html><head>......
  • css的z-index和微信小程序的API及React知识点
    变量的三个基本要素:类型+名称+值 devDependencies与dependencies区别:devDependencies里面的依赖只用于开发环境,不用于生产环境。而dependencies依赖的包不仅开发环......
  • HTML5+CSS3(十)-全面详解(学习总结---从入门到深化)
    ​​Display​​​​编辑 元素隐藏属性对比​​​​学习效果反馈 ​​​​文档流 ​​​​文档流产生的问题 ​​​​空格折叠​​​​元素无空隙​​​​脱离文档流​......
  • apche重定向&端口转发&隐藏index.php.htaccess
    Options+FollowSymLinksIndexIgnore*/*RewriteEngineon#ifadirectoryorafileexists,useitdirectlyRewriteCond%{REQUEST_FILENAME}!-fRewriteCond%{REQUEST......