CSS 2D 变换
CSS 变换(Transform)允许你改变元素的位置、大小、形状和方向,而不会影响文档流。2D 变换在二维平面上操作元素,是创建动画和交互效果的基础。
为什么需要这个特性
2D 变换解决了以下问题:
- 视觉变换:移动、旋转、缩放、倾斜元素
- 不影响布局:变换不会影响其他元素的位置
- 性能优化:使用 GPU 加速,性能更好
- 动画基础:与过渡和动画结合,创建流畅效果
- 交互反馈:提供视觉反馈,增强用户体验
核心概念解释
transform 属性
transform 属性用于对元素应用变换。可以同时应用多个变换,用空格分隔。
.element {
transform: translateX(50px);
transform: translateX(50px) rotate(45deg);
transform: translateX(50px) rotate(45deg) scale(1.2);
}
重要:变换不会影响文档流,元素仍占据原来的空间。
变换原点
transform-origin 设置变换的原点(变换围绕的点)。
.element {
transform-origin: center center; /* 中心(默认) */
transform-origin: top left; /* 左上角 */
transform-origin: 50% 50%; /* 中心(百分比) */
transform-origin: 20px 30px; /* 像素值 */
}
核心变换函数
1. translate() / translateX() / translateY()
移动元素。
.element {
transform: translate(50px, 100px); /* 水平 50px,垂直 100px */
transform: translateX(50px); /* 只水平移动 */
transform: translateY(100px); /* 只垂直移动 */
}
使用场景:
- 居中定位
- 悬停效果
- 滑动动画
2. scale() / scaleX() / scaleY()
缩放元素。
.element {
transform: scale(1.5); /* 放大 1.5 倍 */
transform: scale(0.5); /* 缩小 0.5 倍 */
transform: scale(2, 1.5); /* 水平 2 倍,垂直 1.5 倍 */
transform: scaleX(2); /* 只水平缩放 */
transform: scaleY(1.5); /* 只垂直缩放 */
}
使用场景:
- 悬停放大效果
- 点击反馈
- 加载动画
3. rotate()
旋转元素。
.element {
transform: rotate(45deg); /* 顺时针旋转 45 度 */
transform: rotate(-45deg); /* 逆时针旋转 45 度 */
transform: rotate(90deg); /* 旋转 90 度 */
transform: rotate(1.57rad); /* 使用弧度 */
}
使用场景:
- 图标旋转
- 加载动画
- 装饰效果
4. skew() / skewX() / skewY()
倾斜元素。
.element {
transform: skew(10deg, 5deg); /* 水平倾斜 10 度,垂直倾斜 5 度 */
transform: skewX(10deg); /* 只水平倾斜 */
transform: skewY(5deg); /* 只垂直倾斜 */
}
使用场景:
- 创建倾斜效果
- 装饰性设计
- 特殊视觉效果
5. matrix()
使用矩阵进行复杂变换。
.element {
transform: matrix(1, 0, 0, 1, 50, 100);
/* matrix(scaleX, skewY, skewX, scaleY, translateX, translateY) */
}
注意:matrix() 比较复杂,通常使用其他变换函数更直观。
常见组合用法
1. 居中定位
.modal {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
2. 悬停效果
.card {
transition: transform 0.3s ease;
}
.card:hover {
transform: translateY(-4px) scale(1.02);
}
3. 点击反馈
.button {
transition: transform 0.1s ease;
}
.button:active {
transform: scale(0.98);
}
4. 旋转动画
.icon {
transition: transform 0.3s ease;
}
.icon:hover {
transform: rotate(180deg);
}
5. 组合变换
.element {
transform: translateX(50px) rotate(45deg) scale(1.2);
}