При использовании rotate3d(x, y, z, a)
первые 3 числа являются координатами, которые будут определять вектор вращения, а 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) * 1022 *
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>
Мы просто делим на наибольшее число.