CSS之动画小结

194 阅读5分钟

animation属性

简介

animation即动画,如果说transition是通过初始与终止两个状态来实现平滑过渡的动画效果的,那么animation就是通过关键帧

@keyframes来实现更为复杂的动画效果。animation是一个复合属性,因此需要熟练掌握animation的属性。

定义

animation的属性

①animation-duration

指定一个动画周期的时长,默认值为0s,即无动画。

若指定的属性值为animation-duration:1s,2s,5s时,执行最后一个,即动画周期将持续5s。

②animation-timing-function

定义CSS动画在每个动画周期中的执行的节奏,而所谓的节奏用两个图例对比解释应该很容易理解。

linear.gif

animation-timing-function的属性值为linear时,会规定以相同的速度开始至结束的过渡效果。

ease-in-out.gif

animation-timing-function的属性值为ease-in-out时,会规定以慢速开始和结束的过渡效果。

linear规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))。
ease规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。
ease-in规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。
ease-out规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。
ease-in-out规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。
cubic-bezier(n,n,n,n)在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值。

animation-time-function的属性值,从这个表可以看出,实际上决定动画过渡效果的是cubic-bezier贝塞尔曲线。这里按下不表,有兴趣的同学可以了解这一篇文章。

实用的 CSS — 贝塞尔曲线(cubic-bezier) - SegmentFault 思否

③animation-delay

顾名思义,定义动画何时开始。

需要注意的是,若定义一个负值(-1s),那么就会从它的动画序列的第1s开始。

④animation-iteration-count

定义动画结束前运行的次数

/* 值为关键字 */
animation-iteration-count: infinite;
​
/* 值为数字 */
animation-iteration-count: 3;
animation-iteration-count: 2.4;
​
/* 指定多个值 */
animation-iteration-count: 2, 0, infinite;//没用,只能使用指定的第一个值

⑤animation-direction

顾名思义,定义动画的方向。 。 属性值的可能取值有normalalternatereversealternate-reverse

默认值是normal,每个循环内动画向前运动,结束后返回到起点。alternate则是从终点折返到起点,再运动到终点。

⑥animation-fill-mode

定义CSS动画在执行之前和之后如何将样式应用于其目标。

/* Single animation */
animation-fill-mode: none;
animation-fill-mode: forwards;//动画保留执行期间遇到的最后一个关键帧的计算值
animation-fill-mode: backwards;//动画将在应用于目标后立即应用第一个关键帧的值
animation-fill-mode: both;

⑦animation-play-state

定义动画的状态。

属性值的可能取值有playingpaused

值得注意的是,若state为paused,那么恢复一个已暂停的动画,动画将在它结束的位置重新开始。

⑧animation-name

定义动画的名字,下面是一个应用实例。

@keyframes slidein {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}
animation: 3s ease-in 1s 2 reverse both paused slidein;

transform属性

简介

只能转换由盒模型定位的元素。根据经验,如果元素具有display: block,则由盒模型定位元素。

transform-origin指定原点的位置,默认值是元素的中心。所有的形体变换如旋转,缩放,倾斜都要以此作为参照。

定义

①translate

translate:该变换由二维向量构成,它的坐标定义了元素在每个方向上移动了多少。translate:100px 100px;//沿x轴移动100px,y轴移动100pxtranslateX:10%;//沿x轴移动自身宽度的10%translateY:200px;

②scale

scale:确定在一个方向上缩放了多少
​
//沿x,y轴缩小为50%
​
transform: scale(0.5)
​
//沿x,y轴缩小为50%,40%transform: scale(0.5,0.4)

③rotate属性

rotate:旋转角度,单位为deg(度)
​
transform: rotate(30deg)//以原点为旋转中心旋转30度transform: rotate(0.5turn)//以原点为旋转中心旋转半个turn也就是180度

④skew属性

skew:即倾斜角度,单位为deg(度)。
​
它在水平和垂直方向上将单元内的每个点扭曲一定的角度。

image-20220212140632246.png

transition属性

属性介绍
transition-property元素的哪一个属性将用过渡表现。例如, opacity,color。默认值是all
transition-duration元素过渡过程持续时间。例如,1s。默认值是0s
transition-timing-function元素过渡时的速率函数。例如, linearease-insteps动画分段函数或自定义的 cubic-bezier 函数)。默认值是ease,中间快,两头慢。
transition-delay元素过渡延迟的时间。例如,1s。默认值是0s

transition-propertytransition-durationtransition-delay这三个transition属性中的每个属性都支持多个参数值,参数值之间用逗号分隔,这样能够用一个样式规则制定多种CSS属性的变化。需要注意的是,每个transition属性中的多个参数值的顺序一定要一致。

当transition结束后,transitionEnd事件会在CSS transition动画结束后触发。

同样,animationend 事件会在一个 CSS 动画完成时触发(不包括完成前就已终止的情况,例如元素变得不可见或者动画从元素中移除)。

CSS动画总结

优点:简单,高效,声明式的。不依赖于主线程,采用硬件加速GPU简单的控制keyframe animation的播放和暂停

缺点:不能动态修改或定义动画内容,不同的动画无法同步与堆叠

适用于简单h5展示页面