- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
今天,经过数小时的调试,我很难学到了以下规则:
如果父级的z-index值为任何值,则无论您如何更改子级的CSS,父级元素都永远无法覆盖(堆叠在其子级元素之上)
如何通过逻辑理解这种行为?规范在哪里覆盖?
.container {
width: 600px;
height: 600px;
background-color: salmon;
position: relative;
z-index: 99;
padding-top: 10px;
}
h1 {
background-color: pink;
position: relative;
z-index: -1;
font-family: monospace;
}
<div class="container">
<h1>1. I can never be covered by parent if my z-index is positive.</h1>
<h1>2. Even when my z-index is nagative, I still can never be covered if my parent has any z-index at all.</h1>
</div>
最佳答案
您需要了解两件重要的事情:绘画顺序和堆叠上下文。如果引用the specification,则可以找到绘制元素的方式和时间。
堆叠由具有负z索引(不包括0)的后代按z索引顺序(最负数先)然后按树顺序形成的上下文。
按树顺序排列的所有已定位,不透明或转换后代均属于以下类别:
所有以“ z-index:auto”或“ z-index:0”排列的后代,按树顺序排列。
堆叠上下文,这些上下文由定位的后代(z索引大于或等于1)按z索引顺序(最小的顺序为小)然后按树顺序形成。
显然,我们首先在步骤(3)绘制具有负z-index
的元素,然后在步骤(8)绘制具有z-index
等于0的元素,最后在步骤(9)绘制具有正z-index
的元素。 ,这是合乎逻辑的。我们还可以阅读:
每个盒子都属于一个堆叠上下文。给定堆叠上下文中的每个盒子都有一个整数堆叠级别,这是它在z轴上相对于同一堆叠上下文中其他盒子的位置。具有较高堆栈级别的框始终在具有较低堆栈级别的框之前格式化。盒子的堆叠高度可能为负。在堆叠上下文中具有相同堆叠级别的框将根据文档树顺序从下到上堆叠。
也
建立本地堆栈上下文的元素会生成一个具有两个堆栈级别的框:一个用于它创建的堆栈上下文(始终为0),另一个用于它所属的堆栈上下文(由z-index属性赋予)。
要了解何时绘制每个元素,您需要了解其堆叠上下文以及该堆叠上下文中的堆叠级别(由z-index
定义)。您还需要知道该元素是否建立了堆栈上下文。这是棘手的部分,因为设置z-index
可以做到这一点:
对于定位框,z-index属性指定:
当前堆栈上下文中框的堆栈级别。
盒子是否建立堆叠环境
值具有以下含义:
<integer>
该整数是当前堆栈上下文中生成的框的堆栈级别。该框还建立了一个新的堆栈上下文。
auto
当前堆栈上下文中生成的框的堆栈级别为0。除非框是根元素,否则框不会建立新的堆栈上下文。
现在,我们拥有所有信息,可以更好地理解每种情况。如果父元素的z-index
值不是auto
,则它将创建一个堆栈上下文,因此子元素将被绘制在其z-index
为正或负的任何内部。子元素的z-index
会简单地告诉我们父元素内部的绘画顺序(这涵盖了您的第二点)。
现在,如果只有子元素具有正的z-index
,而我们在父元素上未设置任何内容,则考虑绘制顺序,子元素将在稍后(步骤(9))绘制,父元素将在步骤(8)中绘制。在上面绘制父级的唯一逻辑方法是增加z-index
,但是这样做会使我们陷入前面的情况,父级将建立一个堆栈上下文,而子元素将属于该上下文。
为子级设置肯定的z-index
时,无法将父级置于子级元素上方。如果将z-index
设置为不同于auto
的父元素(正数或负数),也无法使父项高于子项。1
我们唯一可以在其父项之下有一个子项的情况是在子元素上设置一个负的z-index
并将父项保持在z-index: auto
,因此这将不会创建堆叠上下文,并且按照该子项的绘画顺序首先被画。
除了z-index
,还有other properties that create a stacking context。如果遇到预期的堆叠顺序,则还需要考虑那些属性,以查看是否创建了堆叠上下文。
我们可以从以上总结得出一些重要事实:
堆栈上下文可以包含在其他堆栈上下文中,并一起创建堆栈上下文的层次结构。
每个堆栈上下文完全独立于其同级:处理堆栈时仅考虑后代元素。
每个堆叠上下文都是自包含的:将元素的内容堆叠之后,将按照父堆叠上下文的堆叠顺序考虑整个元素。 ref
1:如果我们考虑使用3D变换,则有一些骇人听闻的方法。
元素位于其父元素下的示例,即使该元素指定了z-index
。
.box {
position:relative;
z-index:0;
height:80px;
background:blue;
transform-style: preserve-3d; /* This is important */
}
.box > div {
margin:0 50px;
height:100px;
background:red;
z-index:-1; /* this will do nothing */
transform:translateZ(-1px); /* this will do the magic */
}
<div class="box">
<div></div>
</div>
.box {
position: relative;
z-index: 0;
height: 80px;
background: blue;
}
.box>div {
margin: 0 50px;
height: 100px;
background: red;
z-index: 5;
transform: translateZ(2px);
}
.outside {
height: 50px;
background: green;
margin: -10px 40px;
transform: translateZ(1px);
}
body {
transform-style: preserve-3d;
}
<div class="box">
<div></div>
</div>
<div class="outside"></div>
.box {
width: 100px;
height: 100px;
position: absolute;
}
body {
transform-style: preserve-3d;
}
<div class="box" style="top:100px;left:50px;background:red;"></div>
<div class="box" style="top: 50px;left: 115px;background:blue;"></div>
<div class="box" style="top: 101px;left: 170px;background:green;"></div>
<div class="box" style="top: 175px;left: 115px;background:purple;transform: rotateY(-1deg);"></div>
关于css - 为什么具有z-index值的元素不能覆盖其子级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58174360/
我在一个C++程序中找到了一段代码,好像每隔for()循环两次。在这个程序中循环,但为什么在这样的预处理器定义中需要第三个 for 呢? #define for for(int z=0;z<2;++z
我正在尝试分割其中有一个小写字母后跟一个大写字母的文本。 假设文本是: “Įvairių rūšiųSkinti kardeliai” 我想在“ųS”处拆分它,但是以下正则表达式“[ą-ž][Ą-Ž]
这个问题在这里已经有了答案: Reference - What does this regex mean? (1 个回答) 关闭 2 年前。 下面的正则表达式有什么区别。对我来说,它们都是一样的 [
我正在尝试用 Java 编写一个正则表达式: "/[A-Z]{6}-[A-Z]{4}-[A-Z]{4}/" 但是它不起作用。例如 "AASAAA-AAAA-AAAA".matches("/[A-Z]{
我需要确定一个字符串是否是一个变量标识符。 即(a-z,A-Z,,$) 后跟 (a-z,A-Z,0-9,,$) 我知道我可以使用手动配置的 reg exp 来完成它,但必须有一个更紧凑的内置函数我可以
早上好,我是新来的,我带来了一个小问题。我无法针对以下问题开发有效的算法:我需要找到三个正数 x、y 和 z 的组合,以便 x + y、x - y、y + z、y - z、x + z 和 x - z
这个问题已经有答案了: How does the ternary operator work? (12 个回答) 已关闭 6 年前。 我发现了一种不同的返回值的方式,并且很兴奋。它到底是什么意思? 如
我需要以下正则表达式,允许 [a-zA-Z]+ 或 [a-zA-Z]+[ \\-]{0,1}[a-zA-Z]+ 所以我想在 a-zA-Z 字符之间允许无限的减号和空格 示例: sdfsdfdsf-sf
我正在编写一个代码,它以“代码”(编码理论)作为输入,并且我已经计算了它的权重枚举器。我想使用 MacWilliams Identity 找到双代码的权重枚举器. 我有W(z) ,代码的权重枚举器,我
我已经编写了一个 child 文字游戏,现在我正在尝试优化性能。游戏以一种特殊的方式从数据库中挑选关键词,我想做得更好。 给定一个按字母数字排序的 MySQL 关键字字段: keyword s
假设一个字符串是abc/xyz/IMPORTANT/DATA/@#!%@!%,我只想要IMPORTANT/DATA/!%#@%!#% 我对正则表达式很烂,而且真的还没学过 JavaScript API
JS代码: ? 1
大家晚上好我想知道有没有更快的方法来生成以下形式的列表? [a,b,c,…,z] → [[z], [y,z], [x,y,z], … , [a,b,…,y,z]] 我知道切片是最好的方法之一,但没有更
我在 Firefox 和其他浏览器上遇到嵌套 z-index 的问题,我有一个 div,z-index 为 30000,位于 label 下方> zindex 为 9000。我认为这是由 z-inde
我正在尝试制作一个灯泡。这是代码 JSfiddle HTML 查询 $('.button').click(function() { $('#add').show();
在您想将嵌套模块导入命名空间的情况下,我总是这样写: from concurrent import futures 不过,我最近意识到这也可以使用“as”语法来表达。请参阅以下内容: import c
我正在尝试创建一个基本上复制 matlab 命令的函数:[z;-z] 其中 z = randn(m,n) 返回一个 m -by-n 随机条目矩阵。我能够在 C++ 中为下面的 randn 函数创建一个
好吧,我迷失在这些指针中,有人能准确地告诉我 char * x,y,z; 和 char* x,y,z 之间的区别是什么; 和 char (*)x,y,z; ?如果可以,请为您的答案或其他内容提供资源。
这是一道函数依赖题。 我知道当 x->yz 然后 x->y 和 x->z 时。但是上面的依赖关系可能吗? 最佳答案 If xy determines z can x determine z and y
我有一个列表列表 nLedgers - 一个 3D 点云: [nodeID, X, Y, Z] 多行。一些节点将具有相同的 X 和 Y 坐标以及不同的 Z 坐标。 我想首先确定具有相同 X 和 Y 坐
我是一名优秀的程序员,十分优秀!