我的图像使用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来完成这项工作:)
答案 0 :(得分:3)
当动画暂停forwards
且动画仍处于活动状态时,这只是一个问题:
将top: 55vh
放入#mountain
,以便在动画结束时具有此值并移除opacity: 0
删除forwards
以便动画完成
在关键帧中将opacity: 0
和top: 100vh
添加到from
,以便在页面加载时显示这些值
如果浏览器不支持animation
属性,则可以显示图像。
Codepen Example with SASS(自动前缀已开启)
Here is another example使用转换 - translate
(info link) - 这似乎可以提供稍微平滑的动画。
#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;