css3动画属性--animation(动画)
CSS3中的animation与HTML5中的Canvas绘制动画又不同,animation只应用在页面上已存在的DOM元素上。
运用animation能创建自己想要的一些动画效果,但是有点粗糙。
了解animation之前得知道"Keyframes",我们把他叫做“关键帧”。
Keyframes具有其自己的语法规则,它的命名是由"@keyframes"开头,后面紧接着是这个“动画的名称”加上一对花括号“{}”,括号中就是一些不同时间段样式规则,有点像我们css的样式写法一样。对于一个"@keyframes"中的样式规则是由多个百分比构成的,如“0%”到"100%"之间,我们可以在这个规则中创建多个百分比,我们分别给每一个百分比中给需要有动画效果的元素加上不同的属性,从而让元素达到一种在不断变化的效果,比如说移动,改变元素颜色,位置,大小,形状等,不过有一点需要注意的是,我们可以使用“from”“to”来代表一个动画是从哪开始,到哪结束,也就是说这个 "from"就相当于"0%"而"to"相当于"100%",值得一说的是,其中"0%"不能像别的属性取值一样把百分比符号省略,我们在这里必须加上百分符号(“%”)如果没有加上的话,我们这个keyframes是无效的,不起任何作用。
keyframes的单位只接受百分比值。
css3的animation类似于transition属性,他们都是随着时间改变元素的属性值。他们主要区别是transition需要触发一个事件(hover事件或click事件等)才会随时间改变其css属性;而animation在不需要触发任何事件的情况下也可以显式的随着时间变化来改变元素css的属性值,从而达到一种动画的效果。
animation主要有以下几种属性:
1.animation-name;
2.animation-duration;
3.animation-timing-function;
4.animation-delay;
5.animation-iteration-count;
6.animation-direction;
7.animation-play-state
接下来一一介绍:
animation-name:
用来定义一个动画的名称,none为默认值,当值为none时,将没有任何动画效果。
animation-duration:
用来指定元素播放动画所持续的时间长。
animation-timing-function:
动画的播放方式,具有以下六种:ease;ease-in;ease-in-out;linear;cubic-bezier。
animation-delay:
指定元素动画延迟的时间。
animation-iteration-count:
指定元素播放动画的循环次数,其可以取值<number>为数字,其默认值为“1”;infinite为无限次数循环。
animation-direction:
用来指定元素动画播放的方向,其只有两个值,默认值为normal,如果设置为normal时,动画的每次循环都是向前播放;另一个值是alternate,他的作用是,动画播放在第偶数次向前播放,第奇数次向反方向播放。
animation-play-state:
用来控制元素动画的播放状态。主要有两个值,running和paused。running为默认值。可以通过paused将正在播放的动画停下了,也可以通过running将暂停的动画重新播放,如果暂时了动画的播放,元素的样式将回到最原始设置状态。
下面展示的是如何调用animation:
.demo {
width: 50px;
height: 50px;
margin-left: 100px;
background: blue;
-webkit-animation-name:'ani-name';/*动画属性名,也就是我们前面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;/*定义动画方式*/
}
也可以进行缩写:
- .demo {
- -webkit-animation:'ani-name' 10s ease-in-out 2s 10 alternate;
- }