⛷️

03变换transform

过渡动画用于简单的状态变化,帧动画用于更复杂的动画序列,而变换用于改变元素的位置和外观,这三个部分共同构成了 CSS 动画的核心
 
变换包括2D变换3D变换2D变换在平面中操作,3D变换在空间中操作,2D3D的概念相信很多同学都知道。变换可理解为将节点复制一份并生成新图层,原节点隐藏,在新图层中使用新节点进行变换操作。
声明transform-style可实现2D变换3D变换间的切换,transform-style在父节点中声明,即发生变换的节点的父节点。
flat:所有变换效果在平面中呈现(默认)
preserve-3d:所有变换效果在空间中呈现

一、API概览

notion image
notion image
transform包括六大函数,每个函数包括以下参数。
translate():位移
  • 默认:XYZ轴不声明默认是0
  • 单位:Length长度,可用任何长度单位,允许负值
  • 正值:沿X轴向右位移/沿Y轴向上位移/沿Z轴向外位移
  • 负值:沿X轴向左位移/沿Y轴向下位移/沿Z轴向内位移
  • 函数:
    • translate(x,y):2D位移
      translate3d(x,y,z):3D位移
      translateX(x):X轴位移,等同于translate(x,0)translate3d(x,0,0)
      translateY(y):Y轴位移,等同于translate(0,y)translate3d(0,y,0)
      translateZ(z):Z轴位移,等同于translate3d(0,0,z)
scale():缩放
  • 默认:XYZ轴不声明默认是1100%
  • 单位:Number数值或Percentage百分比,允许负值
  • 正值:0<(x,y,z)<1沿X轴缩小/沿Y轴缩小/沿Z轴变厚,(x,y,z)>1沿X轴放大/沿Y轴放大/沿Z轴变薄
  • 负值:1<(x,y,z)<0翻转沿X轴缩小/沿Y轴缩小/沿Z轴变厚,(x,y,z)<-1翻转沿X轴放大/沿Y轴放大/沿Z轴变薄
  • 函数:
    • scale(x,y):2D缩放
      scale3d(x,y,z):3D缩放
      scaleX(x):X轴缩放,等同于scale(x,1)scale3d(x,1,1)
      scaleY(y):Y轴缩放,等同于scale(1,y)scale3d(1,y,1)
      scaleZ(z):Z轴缩放,等同于scale3d(1,1,z)
skew():扭曲
  • 默认:XY轴不声明默认是0
  • 单位:Angle角度或Turn
  • 正值:沿X轴向左扭曲/沿Y轴向下扭曲
  • 负值:沿X轴向右扭曲/沿Y轴向上扭曲
  • 函数:
    • skew(x,y):2D扭曲
      skewX(x):X轴扭曲,等同于skew(x,0)
      skewY(y):Y轴扭曲,等同于skew(0,y)
rotate():旋转
  • 默认:XYZ轴不声明默认是0
  • 单位:Angle角度或Turn
  • 正值:2D旋转时顺时针旋转
  • 负值:2D旋转时逆时针旋转
  • 函数:
    • rotate():2D旋转
      rotate3d(x,y,z,a):3D旋转,[x,y,z]是一个向量,数值都是0~1
      rotateX(a):X轴旋转,等同于rotate(1,0,0,a),正值时沿X轴向上逆时针旋转,负值时沿X轴向下顺时针旋转
      rotateY(a):3D Y轴旋转,等同于rotate(0,1,0,a),正值时沿Y轴向右逆时针旋转,负值时沿Y轴向左顺时针旋转
      rotateZ(a):3D Z轴旋转,等同于rotate(0,0,1,a),正值时沿Z轴顺时针旋转,负值时沿Z轴逆时针旋转
matrix():矩阵
matrix(a,b,c,d,e,f):2D矩阵(位移、缩放、扭曲和旋转的综合函数)
matrix(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p):3D矩阵(位移、缩放、扭曲和旋转的综合函数)
perspective():视距
  • 默认:0
  • 单位:Length长度,可用任何长度单位
应用transform的场景很多,不局限于某种指定场景,若结合transitionanimation使用还需注意性能问题。

二、使用&注意

  • 元素的初始位置是不会改变的,改变的只是视觉位置。它的好处是,无论是流式布局(Flow)、Flexbox 布局还是 Grid 布局,它都不会影响 Web 上其他元素的布局
  • translate() 函数的参数是个百分比值时,该百分比值是相对于元素自身的大小计算,而不是父容器尺寸计算
  • translateZ() 函数的值等于或大于 perspective() 函数的值,它会导致位移消失。你可以随时在 translateZ() 函数中设置一个无限小的值,但反之则不成立。一旦超过 perspective() 函数的值,元素将不再可见。
  • perspective(0px) 会导致 translateZ() 效果被忽略。任何非零的 perspective() 函数,translateZ() 都会有效

1.视距

notion image
 

三、原理

 

四、实战