CSS动画叠加

时间:2018-09-13 09:27:57

标签: html css animation overlay

我正在尝试使用以下html和css创建覆盖图

div.relative {
  position: relative;
  width: 400px;
  height: 200px;
  border: 3px solid #73AD21;
}

div.absolute {
  position: absolute;
  top: 50%;
  right: 0;
  width: 200px;
  height: 100px;
  border: 3px solid #73AD21;
  opacity: 1;
  background-color: blue;
}

.overlay {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.95);
  color: white;
  z-index: 1;
}

.div1 {
  animation: 750ms 1 forwards ani;
}

@keyframes ani {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}
<h2>
  position: absolute;</h2>

<p>An element with position: absolute; is positioned relative to the nearest positioned ancestor (instead of positioned relative to the viewport, like fixed):</p>

<div class="relative">
  This div element has position: relative;
  <div class="div1">
    This is a div
    <div class="overlay">
      This div element has position: fixed;
    </div>
  </div>

  <div class="absolute">
    This div element has position: absolute;
  </div>
</div>

我正在尝试创建一个覆盖整个区域的叠加层。但是,问题是,当我添加动画时,尽管没有应用动画,但它还是将绝对元素置于最前面

3 个答案:

答案 0 :(得分:2)

将固定元素移到底部,类似这样

<div class="relative">
  This div element has position: relative;
  <div class="div1">
    This is a div
  </div>

  <div class="absolute">
    This div element has position: absolute;
  </div>
</div>
<div class="overlay">
  This div element has position: fixed;
</div>

答案 1 :(得分:0)

由于我的最后答案不是最佳做法,请尝试使用此方法。 因此,将这些样式添加到带有div1类的div中:

.div1 {
  animation: 750ms 1 forwards ani;
  position: relative;
  z-index: 2;
}

z-index无效,因为所定位的绝对元素与固定元素位于不同的级别,因此您需要定义同一元素级别的z-index(在这种情况下为div1和absolute)。 z-index还需要具有位置相对属性才能起作用。

答案 2 :(得分:0)

(向所有人寻求答案)我发现了此代码的问题。当我们应用值小于1的不透明度动画时,它将为该特定元素及其子元素创建另一个堆叠上下文,并且相对于该堆叠上下文堆叠了叠加层。我通过将animation-fill-mode删除为none来解决它,因为此后它不会影响任何CSS。