Rinne's Blog

Back

transform#

2D转换#

平移#

平移 (translate) 可以在水平方向和垂直方向上移动元素,不改变元素的布局。示例代码:

.translate {
  /* x y 同时平移 */
  transform: translate(50px, 100px);
  /* 或者分别设置水平和垂直方向的平移,可使用百分比(相对于元素自身的宽度和高度) */
  transform: translateX(50px);
  transform: translateY(50%);
}
css

旋转#

旋转 (rotate) 可以围绕元素的中心点旋转元素。示例代码:

.rotate {
  /* 旋转角度,正值表示顺时针旋转,负值表示逆时针旋转 */
  transform: rotate(45deg);
  /* 指定旋转的中心点,默认是元素的中心点 */
  transform-origin: left top;
  /* 也可以使用百分比和px单位,50% 50% 表示元素的中心点 */
  transform-origin: 50% 50%;
}
css

缩放#

缩放 (scale) 可以增加或减少元素的尺寸。示例代码:

.scale {
  /* 同时设置水平和垂直方向的缩放比例 */
  transform: scale(2, 2);
  /* 或者分别设置水平和垂直方向的缩放比例 */
  transform: scaleX(2);
  transform: scaleY(2);
}
css

倾斜#

倾斜 (skew) 可以在水平方向和垂直方向上倾斜元素。示例代码:

.skew {
  /* 同时设置水平和垂直方向的倾斜角度,如果只设置一个值,默认是水平方向的倾斜角度 */
  transform: skew(45deg, 45deg);
  /* 或者分别设置水平和垂直方向的倾斜角度 */
  transform: skewX(45deg);
  transform: skewY(45deg);
}
css

过渡#

过渡 (transition) 可以为元素的变化添加平滑的动画效果。示例代码:

.transition {
  /* 为所有属性添加过渡效果 */
  transition: all 0.3s ease-in-out;
  /* 或者为特定属性添加过渡效果 */
  transition: transform 0.3s ease-in-out;
}
css

常见的速度曲线:

  • ease:默认值,先慢后快
  • linear:匀速
  • ease-in:先慢后快
  • ease-out:先快后慢
  • ease-in-out:先慢后快再慢
  • cubic-bezier:自定义贝塞尔曲线

鼠标悬停查看动画效果

ease
(default)
ease-in
ease-out
ease-in-out
linear

复合变换#

transform 可以同时应用多个变换,多个变换之间用空格隔开,执行顺序是从右到左。示例代码:

.transform {
  transform: translate(50px, 100px) rotate(45deg) scale(2, 2);
}
css

3D转换#

旋转#

旋转 (rotate) 可以改变元素在 3D 空间中的角度。示例代码:

.rotate {
  /* 3D 旋转,参数为 x y z 轴的旋转角度 */
  transform: rotateX(45deg) rotateY(45deg) rotateZ(45deg);
}
css

加上透视效果,就能模拟 3D 空间中的近大远小的旋转效果。示例代码:

.rotate {
  /* 3D 旋转,perspective 表示透视距离,rotateX 表示绕 x 轴旋转 */
  transform: perspective(500px) rotateY(45deg);
}
css

还可使用 backface-visibility 来控制元素的背面是否可见。示例代码:

.backface-visibility {
  /* 元素的背面不可见 */
  backface-visibility: hidden;
}
css

位移#

同样的,3D 位移也可以使用 translateXtranslateYtranslateZtranslate3d 来实现, 结合 perspective 可以实现 3D 空间中的位移效果,实现近大远小的位移效果。示例代码:

.translate {
  /* 3D 位移,perspective 表示透视距离,translateX 表示在 x 轴上的位移 */
  transform: perspective(500px) translate3d(50px, 50px, 50px);
}
css

也可以开启父容器的 perspective 属性,来实现 3D 空间中的位移效果。示例代码:

.parent {
  /* 开启 3D 变换 */
  transform-style: preserve-3d;
  /* 开启父容器的透视效果 */
  perspective: 500px;
}
css

动画#

关键帧动画#

关键帧(Keyframe)是动画和视频制作中用于定义动作或状态变化的核心节点,它决定了动画的起始、转折和结束状态。中间帧(插帧)通过算法自动生成,形成连贯的动画效果。

动画的使用:先定义关键帧,再应用动画。示例代码:

@keyframes move {
  0% {
    transform: translateX(0);
  }
  50% {
    transform: translateX(50px);
  }
  100% {
    transform: translateX(100px);
  }
}
.box {
  /* 应用动画 */
  animation: move 2s ease-in-out;
}
css

定义关键帧也可以使用 fromto 关键字,示例代码:

@keyframes move {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(100px);
  }
}
css

animation 是应用动画的属性,示例代码:

.box {
  /* animation: 动画名称 动画时长 速度曲线 延迟时间 播放次数 播放方向 执行完毕状态 
     动画名称和动画时长是必填项,其他属性是可选的 */
  animation: move 2s ease-in-out;
}
css

这些属性也可以单写

属性名说明默认值可选值
animation-timing-function速度曲线easeease, linear, ease-in, ease-out, ease-in-out, cubic-bezier
animation-delay延迟时间0s可设为负值,负值表示跳过动画
animation-iteration-count播放次数1infinite 表示无限播放
animation-direction播放方向normalnormal, reverse, alternate
animation-fill-mode执行完毕状态nonenone, forwards, backwards, both
animation-play-state播放状态runningrunning, paused

逐帧动画#

速度曲线 除了常见的 linear, ease, cubic-bezier等,还包含 steps() 函数, steps() 是 CSS 动画中用于控制动画分段执行的计时函数,它通过将动画分割为离散的步骤,实现类似传统帧动画(逐帧动画)的跳跃效果。示例代码:

.steps {
  /* 逐帧动画,参数为动画分段数 */
  animation: move 2s steps(5) infinite;
}
css
©
前端学习笔记:交互式动效设计
https://astro-pure.js.org/blog/technology/front-end/transform-animation
Author Rinne
Published at 2025年11月1日
Comment seems to stuck. Try to refresh?✨