CSS 3D 变换
3D 变换让元素可以在三维空间中进行移动、旋转和缩放,创造更具沉浸感的视觉效果。它是高级交互和动效的基础,常用于翻转卡片、立体动画等场景。
为什么需要这个特性
- 立体效果:在三维空间中旋转、移动元素,营造立体感
- 高级动效:实现翻转、旋转、透视等复杂动画
- 不影响布局:与 2D 变换一样,不会影响文档流
- 性能优势:GPU 加速,动画更流畅
- 沉浸交互:提升界面质感和用户体验
核心概念解释
transform
使用 transform 应用 3D 变换,可组合多个函数。
transform-style
控制子元素是否保留 3D 空间。
transform-style: flat; /* 默认,不保留 3D */
transform-style: preserve-3d; /* 保留 3D(需要设 置在父元素上) */
perspective(透视)
设置观察距离,数值越小,透视越强。可作用在父元素或 transform 函数中。
.scene { perspective: 800px; }
.item { transform: perspective(800px) rotateY(45deg); }
perspective-origin
设置视角原点(观察点),影响透视方向。
.scene {
perspective: 800px;
perspective-origin: 50% 50%; /* 默认居中 */
/* 也可用 top/left/像素值/百分比 */
}
backface-visibility
控制元素背面是否可见。
backface-visibility: visible; /* 可见(默认) */
backface-visibility: hidden; /* 隐藏背面 */
常见 3D 变换函数
1. translate3d / translateZ
在三维空间中移动元素。
.box {
transform: translate3d(50px, 20px, 100px);
/* 或单独使用 */
transform: translateZ(120px);
}
2. scale3d / scaleZ
在三维空间中缩放元素。
.box {
transform: scale3d(1.2, 1.2, 1.2);
transform: scaleZ(1.5);
}
3. rotate3d / rotateX / rotateY / rotateZ
围绕三维坐标轴旋转元素。
.box {
transform: rotateX(45deg); /* 围绕 X 轴 */
transform: rotateY(60deg); /* 围绕 Y 轴 */
transform: rotateZ(30deg); /* 围绕 Z 轴(等同 2D rotate) */
transform: rotate3d(1, 1, 0, 45deg); /* 自定义轴 */
}
4. matrix3d
使用 4x4 矩阵进行复杂 3D 变换(较少手写)。