CSS--transform&transition&animation的使用与技巧

1,142 阅读4分钟

transform:改变

transform的使用注意点

1.transform一般会配合transition(过渡)一起使用,来实现动画效果。

2.transform不适用于inline元素,需要先转变成block。

3.transform包括其他CSS属性:不能追加,只会覆盖!!!

4.transform有多个值:transform: translateX(10px) rotate(10deg) translateY(5px);

5.rotate、scale、translate可以单独作为一个CSS属性,独立控制transform中各自的效果。

transform的4个功能

1. translate:位移,移动元素的位置

常用写法

translate() = translate( <length-percentage> , <length-percentage>? )   /* (x,y) */
translateX() = translateX( <length-percentage> )
translateY() = translateY( <length-percentage> )
translateZ() = translateZ( <length> ) /* 父元素需要一个perspective属性来确定视点位置 */
translate3d() = translate3d( <length-percentage> , <length-percentage> , <length> ) /* (x,y,z) */

/* 1.<length-percentage>意思为:该值可以是一个具体值,或者是一个百分数,百分数和元素本身大小关联
    2.<length-percentage>?这里的?意思为可以省略。
*/

translate的使用小技巧

1.实现元素在父元素中居中

position: absolute;
left:50%;
top:50%;
transform:translate(-50%,-50%)

2.translate的效果比直接改变元素的left属性性能更加高级,高级前端不用left做动画


2. scale:缩放

常用写法

scale() = scale( <number> , <number>? )
scaleX() = scaleX( <number> )
scaleY() = scaleY( <number> )

/* <number>是缩放比例,scale() 只写一个 <number>横纵向同比缩放 */

scale使用技巧

1.scale缩放会将border也同时缩放。

2.一般很少使用,因为会出现模糊的情况。


3. rotate:旋转

常用写法

rotate() = rotate( [ <angle> | <zero> ] )
rotateX()>= rotateX( [ <angle> | <zero> ] )
rotateY() = rotateY( [ <angle> | <zero> ] )
rotateZ() = rotateZ( [ <angle> | <zero> ] )
rotate3d() = rotate3d( <number> , <number> , <number> , [ <angle> | <zero> ] )

/*
    常用<angle>:deg--度数 turn--周
*/

rotate使用技巧

1.一般用于制作loading图案。


4. skew:倾斜

常用写法

skew() = skew( [ <angle> | <zero> ] , [ <angle> | <zero> ]? )
skewX() = skewX( [ <angle> | <zero> ] )
skewY() = skewY( [ <angle> | <zero> ] )

skew使用技巧

1.太吃想象力一般不使用。


transition:过渡

transition的语法

transition CSS 属性是 属性名:transition-property,过渡时长:transition-duration,过渡动态曲线:transition-timing-function 和 过渡延迟:transition-delay 的一个简写属性。

1.属性名:transition-property   指定过渡的属性,可以是一个或某几个具体属性(逗号分隔属性过渡方式)transition: margin-right 4s,,width 2s;;也可以是all所有属性 transition: all 0.5s ease-out;

2.过渡时长:transition-duration   过渡经历的时间,单位:s ms。

3.过渡动态曲线:transition-timing-function   常用:ease,ease-in,ease-out , ease-in-out,linear,cubic-bezier(0.1, 0.7, 1.0, 0.1),step-start,step-end,steps(4, end),具体参考MDN

4.过渡延迟:transition-delay    执行过渡动画之前延迟的时间。

transitionend

transitionend事件,在CSS完成过渡后触发。

transition实现多个关键帧过渡

  1个transition只能实现2个关键帧的过渡,当要实现2个以上的关键帧的过渡时,我们使用多个transform

transition的使用注意点

1.transition的作用是补充2个样式变化之间的帧数。

2.有些属性无法过渡,如:display无法过渡。

3.一般只有1次动画或者2次。如:hover状态前后。


animation:动画

如何实现多个关键帧的过渡?

  1个transition只能实现2个关键帧的过渡,当要实现2个以上的关键帧的过渡时,我们使用多次transform

.a ===transform==> .b
.b ===transform==> .c

  一般通过setTimeout或者监听transitionend来判断关键帧的中间点。但是使用多次transform来实现多个关键帧的动画时,太过复杂,效率低下,所以通常我们使用animation来实现多关键帧的动画效果。

  2种方式的比较

transform实现多关键帧动画

animation实现多关键帧动画

animation的使用步骤

1.@keyframes声明动画关键帧MDN

  • keyframes:关键帧;@keyframes xxx,这个xxx是自定义的动画名
  • 当只有2个关键帧的时候,使用from to声明2个关键帧
  • 当有多个关键帧时,通过百分数定义动画不同时段的关键帧

2.animation调用声明的动画

  • animationtransition一样是多个属性的缩写。animation 属性是 animation-nameanimation-durationanimation-timing-functionanimation-delayanimation-iteration-countanimation-directionanimation-fill-mode 和 animation-play-state 属性的一个简写属性形式。
  • animation:过渡时长 | 过渡方式 | 延迟 | 次数 | 方向 | 填充模式 | 是否暂停 | 动画名
  • 过渡时长 | 过渡方式 | 延迟 参考transition
  • 次数:可以设定动画执行的次数,可以是整数、小数或者infinite(无限)
  • 方向:reverse | alternate | alternate-reverse 分别对应:反向过渡,交替过渡,反向交替过渡。
  • 填充模式:none | forwards | backwards | both forwards可以让动画最后停留在最后一帧,backwards则是停留在起始一帧。具体看animation-fill-mode
  • 动画状态:paused | running,暂停,运行(恢复)动画
  • 动画名:步骤1. 声明的动画名。

@keyframes与animation的关系

  @keyframes声明的是一个动画的效果,而animation控制的是如何完成这个动画效果。