使用vh单位和调整浏览器窗口大小后CSS3动画后的最终位置

时间:2015-04-23 22:27:36

标签: css css3 animation absolute

我的图像使用vh单位绝对定位。我想动画这个定位使用CSS。然而,当这样做时,vh单位的相对性质似乎就会丢失。为了说明,请看以下两个例子。在它们中,向上和向下拖动浏览器底部以更改其高度。

没有动画

定位相对于屏幕高度进行正确调整。

http://codepen.io/maxedison/pen/jPOQPW

#mountain {
  position: absolute;
  left: 50%;
  top: 55vh;
  opacity: 1;
}
img {
  width: 180vh;
  margin-left: -50%;
}
<div id="screen1">
  <div id="mountain">
    <img src="http://upload.wikimedia.org/wikipedia/commons/2/20/Red_Slate_Mountain_1.jpg">
  </div>
</div>

动画
定位根本不调整。这就像vh单位已变为静态px一样,无论屏幕高度如何,都与窗口顶部保持相同的距离。

http://codepen.io/maxedison/pen/QbWJbj

#mountain {
  position: absolute;
  left: 50%;
  top: 100vh;
  opacity: 0;
  -webkit-animation: lincoln_page_load 2s ease forwards;
  animation: lincoln_page_load 2s ease forwards;
}
img {
  width: 180vh;
  margin-left: -50%;
}
@-webkit-keyframes lincoln_page_load {
  to {
    opacity: 1;
    top: 55vh
  }
}
@keyframes lincoln_page_load {
  to {
    opacity: 1;
    top: 55vh
  }
}
<div id="screen1">
  <div id="mountain">
    <img src="http://upload.wikimedia.org/wikipedia/commons/2/20/Red_Slate_Mountain_1.jpg">
  </div>
</div>

有关如何纠正此问题的任何想法?我知道我可以使用JavaScript来完成这项工作:)

1 个答案:

答案 0 :(得分:3)

当动画暂停forwards且动画仍处于活动状态时,这只是一个问题:

  • top: 55vh放入#mountain,以便在动画结束时具有此值并移除opacity: 0

  • 删除forwards以便动画完成

  • 在关键帧中将opacity: 0top: 100vh添加到from,以便在页面加载时显示这些值

如果浏览器不支持animation属性,则可以显示图像。

Codepen Example with SASS(自动前缀已开启)

使用动画变换

Here is another example使用转换 - translateinfo link) - 这似乎可以提供稍微平滑的动画。

工作示例 - vanilla CSS

&#13;
&#13;
#mountain {
  position: absolute;
  left: 50%;
  top: 55vh;
  -webkit-animation: lincoln_page_load 2s ease;
  animation: lincoln_page_load 2s ease;
}
img {
  width: 180vh;
  margin-left: -50%;
}
@-webkit-keyframes lincoln_page_load {
  from {
    top: 100vh;
    opacity: 0;
  }
  to {
    opacity: 1;
    top: 55vh
  }
}
@keyframes lincoln_page_load {
  from {
    top: 100vh;
    opacity: 0;
  }
  to {
    opacity: 1;
    top: 55vh
  }
}
&#13;
<div id="screen1">
  <div id="mountain">
    <img src="http://upload.wikimedia.org/wikipedia/commons/2/20/Red_Slate_Mountain_1.jpg">
  </div>
</div>
&#13;
&#13;
&#13;