1. CSS 动画:transform
1.1. 2D 变换
有四个主要的变换函数:translate, rotate, scale, skew。这些函数通过组合进 matrix 变换函数。
1.1.1. 原点
用 transform-origin 改变变换的原点。默认在中心。其取值与 background-position 类似。两个值分别表示水平和垂直偏移。可以使用关键字(top, center, bottom, left, right)和数值,位置可以位于元素之外。
例如,原点放在左上角,可以表述为等价的三种形式:
transform-origin: left top;
transform-origin: 0 0; // 像素
transform-origin: 0% 0%;
1.1.2. 旋转
旋转图片。可以是浮点数。正负值分别表示顺时针和逆时针变换。
<img src = "dudley-storey-statuette.jpg" style = "width: 300px; height: 300px; float: left; margin: 0 2em 1.4em 0; transform: rotate(7.5deg); ">
单位:
deg: 360 度,如rotate(90deg)。grad:用于简化计算:一圈算 400 grad。如rotate(100grad)。rad: 一圈 2π。如rotate(1.57rad)。turn:表示一圈。如rotate(.25turn)。
注意问题:
- 页面上的其他内容的布局不受变换影响。因此可能出现交叠。
- DOM 不受影响。被变换的元素的属性值(如
offsetWidth)保持不变。 - CSS transform 本质上对变换元素进行相对定位;元素原来位置保持不动。
- 如果
overflow设为scroll或auto,因变换导致的溢出会导致滚动条出现。 - 其他 CSS 规则在变换前施加,特效会随着旋转。
- 值总是要带单位,即使是 0。
若需要绕右上角转到,需要设置 transform-origin:
img.tilt {
width: 300px;
height: 300px;
float: left;
transform-origin: right top;
transform: rotate(−10deg);
}

1.1.3. 缩放
scale 函数的参数是乘数。如 scale(2) 长宽放大 2 倍。scale(.5) 长宽缩小一倍。
利用负值可以反转图像。例如左右反转:
<img src="lincoln.jpg" style="width: 389px; height: 480px; transform: scaleX(−1);">

水平和垂直方向可以独立缩放,例如:
transform: scale(0.5, 2);
或者使用独立的函数:scaleX 用于水平缩放、scaleY 用于垂直缩放。
1.1.4. 平移
translate(x, y) 沿水平和垂直方向移动元素。translateX() 沿水平移动;translateY() 垂直移动。
transform: translate(50px, -4em);
1.1.5. 斜切(Skew)
transform: skewX(21deg) 设置元素的左右两边相对垂线偏移 21 度,即整个元素向右斜切。

拉伸也有两个独立的函数:skewX 和 skewY。
1.1.6. 组合 Transform
两种组合方式:transform 属性中空格分隔多个函数;或作为 matrix 属性的值。
空格分隔的多个transform属性值:
transform: translate(50px, -4em) rotate(15deg);
matrix 属性的写法略。
注意,写多个 transform 属性不会组合变换!最后一个变换声明会覆盖前面的。
transform: translate(50px, -4em);
transform: rotate(15deg);