当前位置: 首页 > 面试题库 >

为什么位置:相对;似乎改变了z-index?

田翔
2023-03-14
问题内容

因此,我有此标记,并且在其内部<div class="mask"></div>设置了图像顶部的蓝色叠加层。

如果我不制作.container position:relative,标题文本将隐藏在蓝色层的后面…好像它的用法在模仿z-index

为什么会这样呢?

body {

  margin: 0;

  font-family: arial;

}

section {

  position: relative;

  background: url(https://preview.webpixels.io/boomerang-v3.6.1/assets/images/backgrounds/slider/img-41.jpg)

    no-repeat left center/cover;

  height: 70vh;

  display: flex;

  justify-content: center;

}

.container {

  position: relative;

  width: 100%;

  max-width: 1280px;

  display: flex;

  justify-content: center;

  align-items: center;

  color: white;

}

.mask {

  position: absolute;

  width: 100%;

  height: 100%;

  background: #3452ff;

  opacity: 0.7;

}


<section>

  <div class="mask"></div>

  <div class="container">

    <h1>Hello World</h1>

  </div>

</section>

问题答案:

您需要参考规范,更确切地说是绘画顺序,以了解何时打印每一层。

在没有position:relative元素的情况下,未放置元素并将在步骤(4)中进行打印:

  1. 对于其所有 流入的,未定位的, 块级的树状后代:如果元素是块,列表项或其他等效块:

然后.mask在步骤(8)中打印定位的元素(包括)

  1. 树状排列的所有 定位 ,不透明或转换后代,属于以下类别

现在,当您添加position:relative容器时,将容器也放置在这样的位置,因此它也将落入步骤(8)中,并且如此处所述,因为两者均未指定,所以我们考虑
树的顺序z-index。因此,.container在这种情况下,将打印遗嘱。

如果更改元素的顺序(在遮罩之前制作容器),您会注意到这position:relative没有任何效果,因为在两种情况下,绘画顺序都是相同的:

body {

  margin: 0;

  font-family: arial;

}

section {

  position: relative;

  background: url(https://preview.webpixels.io/boomerang-v3.6.1/assets/images/backgrounds/slider/img-41.jpg)

    no-repeat left center/cover;

  height: 70vh;

  display: flex;

  justify-content: center;

}

.container {

  position: relative; /* you can remove this*/

  width: 100%;

  max-width: 1280px;

  display: flex;

  justify-content: center;

  align-items: center;

  color: white;

}

.mask {

  position: absolute;

  width: 100%;

  height: 100%;

  background: #3452ff;

  opacity: 0.7;

}


<section>

  <div class="container">

    <h1>Hello World</h1>

  </div>

  <div class="mask"></div>

</section>

如果我们检查步骤(8),它也表示 不透明度或转换 ,这意味着如果您还更改了容器的不透明度或添加了转换,则顺序也会更改。

body {

  margin: 0;

  font-family: arial;

}

section {

  position: relative;

  background: url(https://preview.webpixels.io/boomerang-v3.6.1/assets/images/backgrounds/slider/img-41.jpg)

    no-repeat left center/cover;

  height: 70vh;

  display: flex;

  justify-content: center;

}

.container {

  transform:translate(0); /*added this*/

  width: 100%;

  max-width: 1280px;

  display: flex;

  justify-content: center;

  align-items: center;

  color: white;

}

.mask {

  position: absolute;

  width: 100%;

  height: 100%;

  background: #3452ff;

  opacity: 0.7;

}


<section>

  <div class="mask"></div>

  <div class="container">

    <h1>Hello World</h1>

  </div>

</section>

要注意的是,如果添加z-index(负数或正数),也会影响绘画顺序,在这种情况下,树形顺序将无效。

  1. 堆叠由具有负z索引(不包括0)的后代按z索引顺序(最负数先)然后按树序形成的上下文

....

  1. 堆叠上下文,这些上下文由定位的后代(z索引大于或等于1)按z索引顺序(最小的顺序为小)然后按树顺序形成。

我们z-index在(3)处打印带有负数的元素,并在(9)处打印带有正数的元素,在这些步骤之间,我们得到了所有z-index不涉及如最初描述的情况。



 类似资料:
  • 问题内容: 我的活动课在这里: 和相机预览类在这里: 但是,当我测试该类时,似乎首先调用onResume(),然后在1或2秒后再次调用。因此,相机必须再次刷新。如果我根本没有onResume(),则摄像头预览稳定,但是如果我从主屏幕或其他某个应用再次切换到该应用,则会崩溃。我发现onPause()不会影响任何一个。我的代码正确吗?我应该添加/删除哪些内容以使其不会再次刷新并且在应用切换后仍然不会崩

  • 以上代码,点击 checkbox 后(此时 run_task 还未完成)快速再次点击,run_task 会执行两次,请问大家这是为什么呢?

  • 我正在运行具有以下配置的Web服务器: Ubuntu 14.04 PHP 5.5.9 PHP-FPM Nginx 当我在Symfony应用程序中上传文件时,我收到错误

  • 问题内容: 根据flexbox规范: ..4.3。Flex Item Z-Ordering,…和其他值(即使是,也不会 创建堆叠上下文)。 因此,我认为/ 应该与flexbox一样正常工作,但是当我将它应用于此HTML / CSS时它不起作用(我的目标是放在创建两层之上): 我在flex属性上使用了适当的前缀。我不明白为什么它不起作用。 问题答案: 就像你在你的问题中写道,元素 并不 需要被定位为

  • 问题内容: 我正在使用JDBC连接到MySQL服务器(我认为没有连接池)。在连接网址中,我有 但是我的连接仍然超时。我什至检查了它的错误。但是,当我尝试使用连接时,出现以下异常。 我知道在Java 1.6中可以使用它来检查连接,但是我正在使用Java 1.5 有没有办法确保它不会超时?还是我必须升级到Java 1.6? 问题答案: 我有同样的问题,这绝对令人发疯。这是文档在MySQL网站上的内容(

  • 在使用一个库的时候碰到了一个很奇怪的问题,有个class实例化生成的对象,假设为A 对A的属性进行修改 打印A发现,其中的a属性并没有变,但是直接打印A.a是改变了的,请问这种情况大概会是什么原因呢,是有什么知识盲区吗,目前知道a属性是不可删除的属性,但是一般对象设置configurable=false也不会出现这种情况,如果不允许修改的话应该也会报错。。 (PS:A只是为了表述简化的例子,并不是