【问题标题】:z-index weird behavior?z-index 奇怪的行为?
【发布时间】:2019-03-27 01:02:04
【问题描述】:

举个例子

function clickme() {
  console.log(' button been clicked')
}
.d1,
.d2 {
  border: 1px solid red;
  z-index: -99;
  opacity: .5;
  position: relative;
}

.d2>button {
  transform: translateY(50px);
}
<div class="d1">
  <button onclick="clickme();">Click Me</button>
</div>
<br>
<div class="d2">
  <button onclick="clickme();">Click Me</button>
</div>

为什么当按钮移到它的父级之外时,它变成了可点击的?

编辑:

我使用transform: translateY(50px);移动按钮,但我们也可以使用position:relative;top:50px;移动按钮,但问题仍然存在。

【问题讨论】:

  • z-index 不适用于具有静态(默认)定位的元素。添加position: relative; 应用它。至于变换,见stackoverflow.com/questions/20851452/…
  • 移动元素不一定要transform,我们可以在按钮上应用position:relative;top:50px;同样会发生
  • 我很确定您知道 z-index 与 position:relative 一起使用,因此您可以将问题减少到外部/内部部分:为什么我们可以在外部而不是内部时单击?
  • 我认为添加该部分可以更多地解释这个问题。
  • 不,您关注的是 position:relative 这根本不是问题.. 我建议您编辑问题,以便我们了解主要问题,而不是关注 z-index 和静态元素

标签: css


【解决方案1】:

这里你面临一个隐藏问题,翻译/不透明度与这里无关。当使用否定的z-index 时,就像您将元素放在body 后面(因为这个元素的z-index 设置为auto)。然后body 的高度由其流入内容(两个 div)定义,使用 translate 简单地将元素放置在主体下方,因此我们可以到达它并单击它。

让我们添加一些边框/背景以更好地查看问题:

function clickme() {
  console.log(' button been clicked')
}
.d1,
.d2 {
  border: 1px solid red;
  z-index:-1;
  position: relative;
}

.d2>button {
  transform: translateY(50px);
}

body {
 background:rgba(255,0,0,0.5);
 border:2px solid;
}
html {
  background:blue;
}
<div class="d1">
  <button onclick="clickme();">Click Me</button>
</div>
<br>
<div class="d2">
  <button onclick="clickme();">Click Me</button>
</div>

body 是红色方块,你所有的元素都在它后面,按钮被移到底部,不再被主体覆盖。如果您使用其他属性移动按钮而不更改body 高度,也会发生同样的情况。

如果您为正文添加一些高度,则翻译不会改变任何内容,因为按钮将保留在 body 后面

function clickme() {
  console.log(' button been clicked')
}
.d1,
.d2 {
  border: 1px solid red;
  z-index: -1;
  position: relative;
}

.d2>button {
  transform: translateY(50px);
}

body {
 height:100vh;
}
<div class="d1">
  <button onclick="clickme();">Click Me</button>
</div>
<br>
<div class="d2">
  <button onclick="clickme();">Click Me</button>
</div>

【讨论】:

  • 哦,我明白了,所以这不是父母之外的问题,而是身体之外的问题。
  • @ZohirSalak 不在外面,但不再被仍然在所有元素顶部的身体覆盖
猜你喜欢
  • 1970-01-01
  • 2021-07-13
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 2011-12-14
相关资源
最近更新 更多