首先定义一个动画规则:
@keyframes mymove { from {top:0px;} to {top:200px;} } @-moz-keyframes mymove /* Firefox */ { from {top:0px;} to {top:200px;} } @-webkit-keyframes mymove /* Safari 和 Chrome */ { from {top:0px;} to {top:200px;} } @-o-keyframes mymove /* Opera */ { from {top:0px;} to {top:200px;} }
然后在一个元素中使用该动画规则:
div { width: 50px; height: 50px; top: 100px; background: blue; -webkit-animation-name:'mymove';/*动画属性名,也就是我们前面keyframes定义的动画名*/ -webkit-animation-duration: 10s;/*动画持续时间*/ -webkit-animation-timing-function: ease-in-out; /*动画频率,和transition-timing-function是一样的*/ -webkit-animation-delay: 2s;/*动画延迟时间*/ -webkit-animation-iteration-count: 10;/*定义循环次数,infinite为无限次*/ -webkit-animation-direction: alternate;/*定义动画方式*/ }
在定义动画规则的地方,from代表开始运行时状态,to代表动画结束时的状态,需要注意的是:from和to只是代表动画开始与结束时的动画 ,在动画结束后from和to里面的css样式对使用
该动画规则的元素不影响 ,也就是说不管你的规则中设置了什么样式,当动画结束后,元素的样式还是会回到执行动画前的样子,就拿上面的例子说吧,一开始我以为动画结束后元素的样式就
变成动画规则里面的to里面的样式了 ,其实不是这样的,找两个例子是一下就知道了
如果这个规则只有from和to是不是显得有点过于鸡肋,其实官方文档中并不推荐使用from和to ,而是用0%代替动画开始100%代替动画结束(百分号不能省略)
除了定义开始和结束,自然少不了一些中间的过渡,所以 你可以在0%到100%中间定义若干个帧,比如下面这样定义规则:
@-webkit-keyframes 'mymove' { 0% { margin-left: 100px; background: green; } 40% { margin-left: 150px; background: orange; } 60% { margin-left: 75px; background: blue; } 100% { margin-left: 100px; background: red; } }
animation属性不需要触发 ,页面加载完成立即执行,可以使用animation-delay来延迟执行