CSS3 2D 转换
CSS 2D Transforms
Section titled “CSS 2D Transforms”CSS Transforms 简介
Section titled “CSS Transforms 简介”CSS transforms(变换)允许你通过在 2D 或 3D 空间中对元素进行位移(translating)、旋转(rotating)、缩放(scaling)和倾斜(skewing)来改变其视觉呈现。
这些变换影响的是视觉渲染,但不会改变元素在正常文档流中的位置,这意味着它们不会影响周围元素的布局。
本章重点介绍 2D transforms(二维变换)。
2D Transforms 的浏览器支持
Section titled “2D Transforms 的浏览器支持”2D transforms 已被现代浏览器广泛支持。对于标准的 transform 函数,通常不再需要供应商前缀,例如 -webkit-、-moz- 等。
| 属性 | Internet Explorer | Chrome | Firefox | Safari | Opera |
|---|---|---|---|---|---|
| transform | IE 9+ | Chrome | Firefox | Safari | Opera |
| transform-origin | IE 9+ | Chrome | Firefox | Safari | Opera |
常用的 2D Transform 函数
Section titled “常用的 2D Transform 函数”使用 transform 属性并结合一个或多个 transform 函数来应用变换:
- translate(x, y):沿水平方向 (x) 和垂直方向 (y) 移动元素。
- translateX(x):沿水平方向移动元素。
- translateY(y):沿垂直方向移动元素。
- rotate(angle):按指定的角度(例如 45deg)顺时针旋转元素。负值表示逆时针旋转。
- scale(x, y):改变元素尺寸。scale(2, 1.5) 使宽度加倍、高度增加 1.5 倍。scale(0.5) 使其统一缩小 50%。
- scaleX(x):沿水平方向缩放宽度。
- scaleY(y):沿垂直方向缩放高度。
- skew(x-angle, y-angle):沿 X 轴和 Y 轴方向倾斜元素。
- skewX(angle):沿 X 轴方向倾斜。
- skewY(angle):沿 Y 轴方向倾斜。
- matrix(a, b, c, d, e, f):使用变换矩阵(transformation matrix)将所有 2D transform 组合成一个。
translate() 方法
Section titled “translate() 方法”将元素从当前位置移动,但不影响布局流。正值向右/向下移动,负值向左/向上移动。
示例:向右移动 50px,向下移动 100px。
.target-element { transform: translate(50px, 100px);}rotate() 方法
Section titled “rotate() 方法”围绕其原点(默认是中心)旋转元素。使用度(deg)、弧度(rad)或圈(turn)等单位。
示例:顺时针旋转 30 度。
.target-element { transform: rotate(30deg);}示例:逆时针旋转 45 度。
.target-element { transform: rotate(-45deg);}scale() 方法
Section titled “scale() 方法”改变元素尺寸。值 1 表示原始尺寸,2 表示双倍尺寸,0.5 表示半倍尺寸。
示例:宽度加倍,保持原始高度。
.target-element { transform: scale(2, 1); /* 或 scaleX(2) */}示例:将元素均匀缩小到其原始尺寸的 75%。
.target-element { transform: scale(0.75);}skew() 方法
Section titled “skew() 方法”沿水平或垂直轴倾斜元素。
示例:沿 X 轴倾斜 20 度。
.target-element { transform: skewX(20deg);}示例:沿 Y 轴倾斜 -10 度。
.target-element { transform: skewY(-10deg);}示例:沿两个轴方向倾斜。
.target-element { transform: skew(20deg, -10deg);}transform-origin 属性
Section titled “transform-origin 属性”默认情况下,rotate() 和 scale() 等变换是围绕元素的中心点(50% 50% 或 center center)进行的。transform-origin 属性允许你改变这个点。
示例:围绕左上角旋转。
.target-element { transform-origin: top left; /* 或 0 0 */ transform: rotate(45deg);}示例:从底部边缘进行缩放。
.target-element { transform-origin: center bottom; /* 或 50% 100% */ transform: scaleY(1.5);}组合多个 Transforms
Section titled “组合多个 Transforms”你可以在一个单独的 transform 属性中应用多个 transform 函数。顺序很重要!
示例:先旋转,然后位移。
.target-element { transform: rotate(45deg) translate(100px, 0);}示例:先位移,然后旋转(结果可能会不同!)。
.target-element { transform: translate(100px, 0) rotate(45deg);}性能注意事项
Section titled “性能注意事项”Transforms(尤其是 translate 和 scale)通常由浏览器进行硬件加速,因此与操作 top、left 或 margin 等布局属性相比,它们是实现动画的性能更好的选择。
CSS Transform 属性总结
Section titled “CSS Transform 属性总结”| 属性 | 描述 |
|---|---|
| transform | 对元素应用 2D 或 3D 变换。 |
| transform-origin | 改变变换原点的位置。 |
2D Transform 函数
Section titled “2D Transform 函数”| 函数 | 描述 |
|---|---|
| matrix(n,n,n,n,n,n) | 使用包含六个值的矩阵定义 2D 变换。 |
| translate(x,y) | 定义 2D 位移。 |
| translateX(n) | 定义沿 X 轴的 2D 位移。 |
| translateY(n) | 定义沿 Y 轴的 2D 位移。 |
| scale(x,y) | 定义 2D 缩放变换。 |
| scaleX(n) | 定义沿 X 轴的 2D 缩放变换。 |
| scaleY(n) | 定义沿 Y 轴的 2D 缩放变换。 |
| rotate(angle) | 定义 2D 旋转。 |
| skew(x-angle,y-angle) | 定义沿 X 轴和 Y 轴的 2D 倾斜变换。 |
| skewX(angle) | 定义沿 X 轴的 2D 倾斜变换。 |
| skewY(angle) | 定义沿 Y 轴的 2D 倾斜变换。 |