z-index不生效怎么回事,要注意哪些?
Admin 2022-11-29 群英技术资讯 781 次浏览
这篇文章给大家介绍了“z-index不生效怎么回事,要注意哪些?”的相关知识,讲解详细,步骤过程清晰,有一定的借鉴学习价值,因此分享给大家做个参考,感兴趣的朋友接下来一起跟随小编看看吧。表面看起来,z-index 似乎是一个很简单的属性,你给它设置哪个值,元素就会位于 z 轴的哪个位置。但它实际上并没有我们想象的这么简单,这个属性背后是一系列决定元素所在层级的规则。
在进行今天的介绍前,我们先列出三个问题,如果你能一眼看出它们的解决方案,那么恭喜你掌握了z-index,也就不需要阅读本文了;如果不行,那么耐心看完本文,相信能找到答案。
z-index 数值更大,但 Content 没有在 Box 2 之上?<div id="box1">
Box 1
</div>
<div id="content">
Content <br/>
z-index: 2;
</div>
<div id="box2">
Box 2 <br/>
z-index: 1;
</div>
div {
padding: 25px;
font-size: larger;
}
#box1 {
background-color: chocolate;
width: 200px;
height: 100px;
margin-bottom: -50px;
}
#content {
background-color: gold;
width: 300px;
height: 200px;
z-index: 2;
}
#box2 {
background-color: cyan;
width: 200px;
height: 100px;
margin-top: -50px;
z-index: 1;
}

z-index 数值更小,为什么 Content 这次反而在Box 2 之上了?<div id="box1">
Box 1
</div>
<div id="content">
Content <br/>
transform: rotate(90deg); <br/>
z-index: 1;
</div>
<div id="box2">
<br/>
Box 2 <br/>
z-index: 2;
</div>
div {
padding: 25px;
font-size: larger;
}
#box1 {
background-color: chocolate;
width: 200px;
height: 100px;
margin-bottom: -10px;
}
#content {
background-color: gold;
width: 250px;
height: 200px;
z-index: 1;
transform: rotate(90deg);
}
#box2 {
background-color: cyan;
width: 200px;
height: 100px;
margin-top: -10px;
z-index: 2;
}

z-index 是最大的,但Box 2-3 在 Content 之下?<div id="box1">
Box 1
</div>
<div id="content">
Content <br/>
z-index: 2; <br/>
position: relative;
</div>
<div id="box2">
<br/><br/>
Box 2 <br/>
z-index: 1; <br/>
position: relative;
<div id="box2-3">
Box 2-3 <br/>
z-index: 5; <br/>
position: absolute;
</div>
</div>
div {
padding: 25px;
font-size: larger;
}
#box1 {
background-color: chocolate;
width: 200px;
height: 100px;
margin-bottom: -50px;
}
#content {
background-color: gold;
width: 200px;
height: 100px;
margin-left: 50px;
z-index: 2;
position: relative;
}
#box2 {
background-color: cyan;
width: 200px;
height: 100px;
margin-top: -50px;
z-index: 1;
position: relative;
}
#box2-3 {
background-color: green;
width: 200px;
height: 100px;
padding-left: 150px;
left: 180px;
top: -50px;
z-index: 5;
position: absolute;
}

没有使用 z-index 的时候,元素的层叠关系由2个因素决定:
position是否是static,如果是static,那么这个元素就称为 non-positioned ;反之,如果 position 值是 relative, absolute, fixed, 或 sticky 则称 positioned。positioned 元素享受特权,会覆盖 non-positioned 元素。而 non-positioned 元素中,有 float样式的元素覆盖没有 float 的。z-index 属性设定了一个定位元素及其后代元素或 flex 项目的 z-order。当元素之间重叠的时候,z-index 较大的元素会覆盖较小的元素在上层进行显示。
所谓 z-index,只有在以下场景适用。分别为:
z-index这个属性并不是在所有的元素上都有效果。它仅仅只在 positioned 元素上有效果。z轴 上的堆叠顺序,并不仅仅是直接比较两个元素的 z-index 值的大小,同时,这个堆叠顺序还由元素的层叠上下文和层叠等级共同决定。z-index 存在的一个背景是 Stacking Context ,中文常译作层叠上下文(其实数据结构中的栈的单词也是 stack,所以层叠上下文中已经蕴含了后来者居上的意思)。
层叠上下文,是HTML中一个三维的概念。在 CSS2.1 规范中,每个盒模型的位置是三维的,分别是平面画布上的X轴,Y轴以及表示层叠的Z轴。
一般情况下,元素在页面上沿 X轴 和 Y轴 平铺,我们是察觉不到它们在Z轴上的层叠关系。而一旦元素发生堆叠,这时就能发现某个元素可能覆盖了另一个元素或者被另一个元素覆盖。
如果一个元素含有层叠上下文,(也就是说它是层叠上下文元素),我们可以理解为这个元素在Z轴上就“高人一等”,最终表现就是它离屏幕观察者更近。

构建层叠上下文和盖楼比较类似:
首先, <html> 元素是地平线或地基 —— 所有楼都是从地基开始盖的
接下来,每产生一个层叠上下文,相当于盖一座楼, z-index 的值相当于楼的高度
以下几种元素可以产生层叠上下文:
position 值为 absolute 或 relative, 且 z-index 值不为 auto (默认值).position 值为 fixed 或 stickyflexbox 容器的子元素, 且 z-index 值不为 auto (默认值)grid 容器的子元素, 且 z-index 值不为 auto (默认值)opacity 值且值小于 1.none :
transformfilterperspectiveclip-pathmask / mask-image / mask-borderisolation 值且值为 isolate.mix-blend-mode 值且值不为 normal.-webkit-overflow-scrolling 值且值为 touch.第三,层叠上下文是可以嵌套的 —— 这是最容易让人误解的一块。
嵌套,顾名思义就是在一个 层叠上下文 中能创建 另一个层叠上下文。
假如在地基上盖一座50米高的楼(即 z-index: 50), 是否可以在楼里再盖一栋 100米高的楼中楼呢?
当然不可能!但是你可以在这座楼里建一座 100 级阶梯高的大堂。
换句话说,在嵌套的层叠上下文中,子层叠上下文被限制在了父层叠上下文中,它们的 z-index “单位”已经不一样了(z-index 没有单位,这边只是用于理解),无论子层叠上下文的 z-index 值有多大都无法突破父层叠上下文的高度。
层叠上下文小结:
需要注意:层叠上下文嵌套 与 元素嵌套 不是一一对应的关系,一个元素所处的父层叠上下文是由内向外找到的第一个能产生层叠上下文的元素所产生的层叠上下文。
看个例子便于理解:
<div id="div1" style="position: relative; z-index: 1">
<div id="div2" style="position: relative; z-index: 1">
所处的父层叠上下文是 div1 产生的层叠上下文
</div>
<div id="div3">
<div id="div4" style="position: relative; z-index: 2">
所处的父层叠上下文也是 div1 产生的层叠上下文
</div>
</div>
</div>
虽然 div4 外面还有层 div3,但是由于 div3 不能产生层叠上下文,所以 div4 所处的父层叠上下文也是 div1 (产生的层叠上下文) —— 虽然在html元素层级中 div4 比 div2 更深了一级,但是 div4 与 div2 在层叠上下文层面上是同级的,因此它们可以相互比较 z-index 值来决定谁在上面。
学习完上面的 z-index 相关知识点,我们来回答开头提出的三个问题。
第一个问题中 z-index 不生效的原因在于这三个元素都不能产生层叠上下文,因此z-index值对它们不生效 —— 根据出场顺序决定了 Content 处在 Box 2 之下。
第二个问题的 Box 2不能产生层叠上下文,因此z-index同样是无效的;Content 因为使用了 transform 属性,产生了层叠上下文,相当于盖了一座 1 米高的楼( z-index: 1 )
Box 2 与 Content 在同一级层叠上下文中,且Box 2 的 z-index 比较小, 因此 Box 2 在 Content 之下;且 Box 2-3 在 Box 2的层叠上下文下新建了个子层叠上下文,因此Box 2-3的高度被限制在了 Box 2 之内,因此 Box 2-3 的 z-index 再高也没用。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是CSS中怎么做缺角矩形的效果,这里我们使用了background属性和linear-gradient()函数,具有一定的参考价值,因此分享给大家做个参考。文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
很多朋友都想知不同类型的css选择器有什么特点和不同?使用css对HTML页面中的元素实现一对一,一对多或者多对一的控制,就需要用到。下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
篇文章给大家分享的是用CSS怎样做一个动态的二级菜单效果。小编觉得挺实用的,因此分享给大家做个参考,实现效果及实现代码如下,感兴趣的朋友接下来一起跟随小编看看吧。
这篇文章主要介绍了css3 translate实现表头固定的操作步骤内容,文章用了实例的方式来介绍,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
方法:1、给div元素添加“display:flex”样式,设置div元素为弹性布局样式;2、给div元素添加“align-items:center;justify-content:center”样式,设置div内按钮元素水平垂直居中即可。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008