CSS3几种实现动画的方式
在早期的Web开发中,我们主要依赖js实现动画。但在css3中为我们提供了三种可用来做动画的方法:transition、transform和animation。
transition过渡
css3提供的transition
属性的功能很简单,css3的transition
允许css的属性值在一定的时间区间内平滑地过渡。这种效果可以在鼠标单击、获得焦点、被点击或对元素任何改变中触发,并平滑地以动画效果改变css的属性值。
transition
属性是一个简写的属性值,用于设置以下四个属性:
transition-property
: 设置过渡效果的css属性名。transition-duration
: 设置完成该效果的过渡时间。transition-timing-function
: 设置过度时所用的速度。主要有的函数有:ease
减速;linear
匀速;ease-in
加速;ease-out
减速;ease-in-out
先加速后减速。transition-delay
: 设置延迟时间。
语法顺序是:transition: property duration timing-function delay;
.box{
transition: width 3s ease 1s;
}
transition
的优点在于简单易用,但是它有几个很大的局限。
transition
需要事件触发,所以没法在网页加载时自动发生。transition
是一次性的,不能重复发生,想要使用一次,就得触发一次。transition
只能定义开始状态和结束状态,不能定义中间状态。- 一条
transition
规则,只能定义一个属性的变化,不能涉及多个属性。
transform变换
transform属性允许我们对元素进行旋转、缩放、移动或倾斜。
transform: rotate();旋转。单位是deg
,度。对此,也衍生出了rotateX()和rotateY();分别代表绕着X轴和Y轴旋转。
transform: rotate(30deg);
transform: rotateX(30deg);
transform: rotateY(30deg);
transform: skew();倾斜。衍生出了skewX()和skewY();分别代表绕着X轴和Y轴倾斜。
transform: skew(30deg, 30deg);
transform: skewX(30deg);
transform: skewY(30deg);
transform: scale();缩放,按倍数计算。衍生出了scaleX()和scaleY();分别代表缩放X轴或Y轴。
transform: scale(1.2, 2);
transform: scaleX(1.2);
transform: scaleY(2);
transform: translate();位移。衍生出了translateX()和translateY();分别代表X轴或Y轴的位移量。
transform: translate(100px,200px);
transform: translateX(100px);
transform: translateY(200px);
animation动画
animation
利用@keyframes
关键帧完成动画的制作。其格式为@keyframes 动画名 {规则}。
@keyframes changeBg{
0%{
background: red;
}
20%{
background: blue;
}
50%{
background: orange;
}
100%{
background: red;
}
};
animation
是一个简写的属性值,包括以下几个属性:
animation-name
: 动画名称animation-duration
: 完成动画所需时间animation-timing-function
: 完成动画的速度函数animation-delay
: 延迟时间animation-iteration-count
: 播放次数。默认1,其中,infinite表示无限次播放。animation-direction
: 是否轮流反向播放动画。normal正常播放;alternate奇次数反向播放。
语法:animation: name duration timing-function delay iteration-count direction;
.box{
animation:changeBg 3s ease 1s infinite;
}
animation
属性类似于transition
,他们都是随着时间改变元素的属性值,其主要区别在于:使用transition
属性只能通过指定属性的初始状态和结束状态,然后在两个状态之间进行平滑过渡的方式来实现动画;animation
在不需要触发任何事件的情况下,也可以显式的随时间变化来改变元素CSS属性,达到一种动画的效果。