当使用rotate3d(x, y, z, a) 时,前三个数字是定义旋转矢量的坐标,a 是旋转角度。它们不是旋转的乘数。
rotate3d(1, 0, 0, 90deg) 与rotate3d(0.25, 0, 0, 90deg) 相同,也与rotate3d(X, 0, 0, 90deg) 相同,因为在所有情况下我们将拥有相同的向量。也和rotateX(90deg)一样
.box {
margin:30px;
padding:20px;
background:red;
display:inline-block;
}
<div class="box" style="transform:rotate3d(1,0,0,60deg)"></div>
<div class="box" style="transform:rotate3d(99,0,0,60deg)"></div>
<div class="box" style="transform:rotate3d(0.25,0,0,60deg)"></div>
<div class="box" style="transform:rotate3d(100,0,0,60deg)"></div>
<div class="box" style="transform:rotate3d(-5,0,0,60deg)"></div>
<div class="box" style="transform:rotateX(60deg)"></div>
由此我们还可以得出结论,rotate3d(0, Y, 0, a) 与rotateY(a) 相同,rotate3d(0, 0, Y, a) 与rotate(a) 相同。请注意在两个坐标中使用0,这将使我们的向量始终在同一轴(X 或 Y 或 Z)上
rotate3d(1,1,0, 45deg) 与 rotateX(45deg) rotateY(45deg) 不同。第一个将围绕(1,1,0) 定义的向量执行一次 旋转,第二个将围绕X 和Y 轴执行两次 连续旋转。
换句话说,rotate3d() 不是其他旋转的组合,而是自身的旋转。其他旋转是rotate3d() 考虑预定义轴的特殊情况。
如果保持相同的角度,乘数技巧适用于坐标。 rotate3d(x, y, z, a) 等价于rotate3d(p*x, p*y, p*z, a),因为如果将所有坐标乘以相同的值,则保持相同的矢量方向,并且仅更改与定义旋转无关的矢量维度。只有方向是相关的。
更多详情:https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate3d
您可以清楚地注意到,将[-1,1] 范围内的值用于x,y,z 足以定义所有组合。另一方面,x,y,z 的任意组合都可以缩减为[-1,1] 范围内的值
例子:
.box {
margin:30px;
padding:20px;
background:red;
display:inline-block;
}
<div class="box" style="transform:rotate3d(10,5,-9,60deg)"></div>
<div class="box" style="transform:rotate3d(1,0.5,-0.9,60deg)"></div>
<div class="box" style="transform:rotate3d(25,-5,-8,60deg)"></div>
<div class="box" style="transform:rotate3d(1,-0.2,-0.32,60deg)"></div>
我们只是除以最大的数。