css-transform

CSS transform 的变换函数、3D 渲染上下文、性能特性与实用场景

#status / growing #type / concept

css-transform

Overview

CSS transform 属性允许你对元素进行变换操作,包括旋转、缩放、倾斜和平移。

常用变换函数

函数说明示例值
translate()平移元素(X, Y方向)translate(50px, 20px)
translateX()水平方向平移translateX(30px)
translateY()垂直方向平移translateY(-10px)
translateZ()Z轴方向平移(3D)translateZ(100px)
translate3d()3D平移translate3d(10px, 20px, 30px)
scale()缩放元素scale(1.5), scale(2, 0.5)
scaleX()水平方向缩放scaleX(1.2)
scaleY()垂直方向缩放scaleY(0.8)
scaleZ()Z轴方向缩放(3D)scaleZ(2)
rotate()旋转元素rotate(45deg)
rotateX()绕X轴旋转(3D)rotateX(30deg)
rotateY()绕Y轴旋转(3D)rotateY(60deg)
rotateZ()绕Z轴旋转(3D)rotateZ(90deg)
skew()倾斜元素skew(30deg, 20deg)
skewX()水平方向倾斜skewX(15deg)
skewY()垂直方向倾斜skewY(10deg)
matrix()2D矩阵变换matrix(1, 0, 0, 1, 0, 0)
matrix3d()3D矩阵变换matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)

相关属性

属性说明示例值
transform-origin变换的基点center, top left, 50% 50%
transform-style3D变换样式flat, preserve-3d
perspective3D透视距离1000px
perspective-origin透视点位置center, top left

3D 渲染上下文

要使用 3D 变换,需要创建 3D 渲染上下文:

/* 父元素设置 preserve-3d,子元素的 3D 变换才会生效 */
.scene {
  perspective: 1000px; /* 透视距离,值越小透视越强 */
}

.card {
  transform-style: preserve-3d; /* 子元素保持 3D 空间 */
  transform: rotateY(30deg);
}

.card .front {
  transform: translateZ(50px); /* 向观察者方向突出 */
}

.card .back {
  transform: rotateY(180deg) translateZ(50px);
}

Transform 堆叠顺序

变换函数从右到左应用(类似矩阵乘法),顺序不同结果不同:

/* 先旋转再平移:沿旋转后的坐标系平移 */
.box { transform: translateX(100px) rotate(45deg); }

/* 先平移再旋转:沿原始坐标系平移,再旋转 */
.box { transform: rotate(45deg) translateX(100px); }

两者视觉效果完全不同,这是常见的混淆点。

transform-origin

/* 默认值:元素中心 */
transform-origin: center; /* 等同于 50% 50% */

/* 改变旋转/缩放的基点 */
transform-origin: top left;      /* 左上角 */
transform-origin: 0 0;           /* 同上 */
transform-origin: 100% 100%;     /* 右下角 */
transform-origin: 50% 50% 200px; /* 3D 变换的 Z 轴偏移 */

性能特性

Transform 是合成器属性 (compositor-only property)

  • 不触发重排 (reflow) 和重绘 (repaint)
  • 由 GPU 合成器处理,性能优异
  • 适合用于动画和过渡
/* 性能对比 */
/* 差:触发重排 */
.moving { transition: left 0.3s; left: 100px; }

/* 好:仅触发合成 */
.moving { transition: transform 0.3s; transform: translateX(100px); }

实用场景

居中定位

.center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

翻转卡片

.card { position: relative; transform-style: preserve-3d; transition: transform 0.6s; }
.card:hover { transform: rotateY(180deg); }
.card .front, .card .back { position: absolute; backface-visibility: hidden; }
.card .back { transform: rotateY(180deg); }

悬浮效果

.hover-lift {
  transition: transform 0.2s, box-shadow 0.2s;
}
.hover-lift:hover {
  transform: translateY(-4px);
  box-shadow: 0 8px 24px rgba(0,0,0,0.15);
}
创建于 2026/3/6 更新于 2026/5/27