CSS 动画知识点总结

496 阅读2分钟

动画的定义

  • 由许多静止的画面(帧)以一定的速度连续播放时,以肉眼因视线残像产生错觉,而误以为是活动的画面;
  • 帧 : 每个静止的画面都叫做帧;播放速度: 每秒24帧(电影)或者每秒30帧(游戏);

浏览器渲染原理

  1. 根据HTML构建HTML树(DOM);
  2. 根据CSS构建CSS树(CSSOM);
  3. 将两棵树合并成一颗渲染树(render tree);
  4. Paint绘制(把边框颜色、文字颜色、阴影画出来);
  5. Compose合成(根据层叠关系展示画面)

1637750818(1).png

CSS 动画的两种做法(transition 和 animation)

  • transform

  1. translate 位移
  2. scale       缩放
  3. rotate     旋转
  4. skew       倾斜

注:四个属性一般都需要配合transition 过渡

       inline元素不支持transform,需要先变成block;

属性详解:

  • translate ;

    transform: translateX(<length - percentage);
    
    transform: translateY(<length - percentage);
    
    transform: translate(<length - percentage); [XY简写]transform: translate(10px | 10%);/* Equal to: translateX(10px) or translate(10px, 0) */
    

⭐注意:transform: translate( -50%, -50%)可做绝对定位元素的居中(搭配margin使用);

  • scale ;(用的少,易出现模糊);

    transform: scaleX( <number> );
    
    transform: scaleY( <number> );
    
    transform: scale( <number>,<number> );[XY简写]transform: scale(20.5);
    
  • rotate ;

    transform: rotate( 90deg ); [旋转90°]
    
    transform: rotateZ( 90 deg ); [等同于上]
    
    transformrotateX( 90 deg );[X轴旋转90°]
    
    transformrotateY( 90 deg );[Y轴旋转90°]
    
    transform: rotate3d( ); 太复杂,详情查询 rotate mdn ;
    

rotate ;(一般用于360°旋转制作loading(等待));

  • skew ;

    transform: skew( 90deg,90deg );[XY同时旋转 90°]
    

    用的较少,可查询 skew mdn ;

  • transform 多重组合效果:

示例:  transform: translate(10px,10px) scale(2);

  • transition 过渡 :

    作用:补充中间帧 ;

语法: 

  1. transition: 属性名 时长 过渡方式 延迟 

           transition: left 200ms liner 

  1. 可以用逗号 分割两个属性

           transition: left 200ms , top 400ms

  1. 可以用 all 代表所有属性

            transition: all 200ms

  1. 过渡方式:liner | ease | ease-in | ease-out | ease-in-out | cubic-bezier | ......  具体查 transition mdn

注意 : Image.png

  • animation

缩写语法

animation: 时长 | 过渡方式 | 延迟 | 次数 | 方向 | 填充模式 | 是否暂停 | 动画名

时长 : 1s 或者 1000ms

过渡方式 : 和trasition 取值一样,如 linear

次数 : 3 或者 2.4 或者 infinite

方向 : reverse | alternate | alternate-reverse

填充模式 : none | forwards | backwards | both

是否暂停 : paused | running

以上属性都有对应的单独属性

@keyframes 完整语法

from to 写法:

1637752111(1).png 百分数写法:

1637752133(1).png