我已经了解了如何使用translate有更好的性能,但看起来它们的行为略有不同:使用left:100%
将动画对象一直移动到屏幕的末尾,而translate(100%)
仅移动动画对象的长度。也就是说,它移动100%的屏幕而不是100%的对象。
可以解释为什么会这样,以及在使用translate
时可以采取哪些措施来重现相同的行为?
您可以在此处查看演示:http://jsfiddle.net/32VJV/1/
.slide_1 {
top: 0px;
left:0%;
position: absolute;
overflow: hidden;
font-size: 30px;
}
.slide_1 {
-webkit-animation: slide 3s infinite;
-webkit-animation-delay: 0s;
-webkit-animation-fill-mode:forwards;
-webkit-transform-origin: 0% 0%;
}
.slide_2 {
top: 25px;
left:0%;
position: absolute;
overflow: hidden;
font-size: 30px;
}
.slide_2 {
-webkit-animation: slide2 3s infinite;
-webkit-animation-delay: 0s;
-webkit-animation-fill-mode:forwards;
-webkit-transform-origin: 0% 0%;
}
@-webkit-keyframes slide {
0% {
-webkit-transform: translate(0%);
}
50% {
-webkit-transform: translate(100%);
}
100% {
-webkit-transform: translate(0%);
}
}
@-webkit-keyframes slide2 {
0% {
left 0%;
}
50% {
left:100%;
}
100% {
left:0%;
}
}
<div style="font-size:18px;">
<div class=""> <span class="slide_1" id="dimensions">ABC</span> <span class="slide_2" id="dimensions">ABC</span>
</div>
</div>
答案 0 :(得分:4)
两者之间的区别在于,为左边的属性设置动画会将元素保留在文档的流中,而translate
则不会。
有关您可能使用其中一个的原因的更多信息,Paul Irish有一个很好的写作(包含更多信息的链接):Why Moving Elements With Translate() Is Better Than Pos:abs Top/left
还有很多有关浏览器效果的重要信息翻译动画的解决方案:使元素与窗口一样宽:
slide_1 {
top: 0px;
left:0%;
right: 0;
position: absolute;
overflow: hidden;
font-size: 30px;
}
一个有趣的练习:打开你的devtools以及当你一次激活一个动画时会发生什么。
在Chrome中:
在这种情况下,开销非常小,但可以根据屏幕上移动的内容快速变化。