我有一个链式CSS动画,大部分工作正常:
#product {
background: red;
width: 10%;
height: 10%;
border: none;
left: -22%;
top: 50%;
top: 40%;
animation: product_across 2s linear, product_down 1s;
animation-delay: 0s, 2s;
}
@-moz-keyframes product_across {
from { left: -22%; }
to { left: 98%; }
}
@-moz-keyframes product_down {
from { top: 40%; left: 98%; }
to { top: 98%; left: 128.5%; }
}
问题是,在第一个动画(product_across
)完成后,我想要应用一个样式。没有动画,只需应用它。
CSS3是否允许这样做?我想我正在寻找一种关于动画结束的""财产等等。
目前我正在使用:
@-moz-keyframes product_down {
from { -moz-transform: rotate(45deg); top: 40%; left: 98%; }
to { -moz-transform: rotate(45deg); top: 98%; left: 128.5%; }
}
...旋转是我希望应用的样式。通过将from
/ to
状态设置为此属性的相同值,它可以有效地执行我想要的操作,但我无法帮助您认为必须有更好的方法。
答案 0 :(得分:7)
你需要使用animation-fill-mode:forwards
作为Fabio建议,但这仅适用于动画中设置的属性。为了设置除了你想要实际动画之外的属性,你必须将它们作为动画的一部分添加到最后,如下所示:
@keyframes {
/* ... Your original keyframes (except the last) ... */
99.99% { /* ... The original properties of something you want to change ... */ }
100% { ... Your original end properties and the changed properties ... }
}
例如:
@keyframes rotate {
0% { transform:rotate(0deg); }
99.999% { background:blue; }
100% { transform:rotate(360deg); background:red; }
}
通过使两个结束关键帧之间的差异非常小,无论animation-duration
是什么,都会跳转到新的样式。
另一种更常见的方法是使用Javascript的animation-end
答案 1 :(得分:5)
是的,您需要使用Animation Fill Mode。
只需将该样式定义为最后一个关键帧,然后将其添加到#product
#product{-webkit-animation-fill-mode:forwards; animation-fill-mode:forwards;}
答案 2 :(得分:0)
在Firefox上,!important
的媒体资源会覆盖先前使用@keyframe
设置的媒体资源:
#product .newStyle {
top: 90% !important;
left: 120% !important;
}
不幸的是,这在Chrome和Edge上失败了。