The rotate3d() CSS function defines a transformation that moves the element around a fixed axis without deforming it. The amount of movement is defined by the specified angle; if positive, the movement will be clockwise, if negative, it will be counter-clockwise.
In the 3D space, rotations have three degrees of liberty, describing an axis of rotation. The axis of rotation is defined by an [x, y, z] vector and pass by the origin (as defined by the transform-origin CSS property. If the vector is not normalized, that is the sum of the square of its three coordinates is not 1, it will be normalized internally. A non-normalizable vector, like the null vector, [0, 0, 0], will cause the rotation not to be applied, without invaliding the whole CSS property.
Syntax
rotate3d(x, y, z, a)
Values
- x
- Is a
<number>describing the x-coordinate of the vector denoting the axis of rotation. - y
- Is a
<number>describing the y-coordinate of the vector denoting the axis of rotation. - z
- Is a
<number>describing the z-coordinate of the vector denoting the axis of rotation. - a
- Is an
<angle>representing the angle of the rotation. A positive angle denotes a clockwise rotation, a negative angle a counter-clockwise one.
| Cartesian coordinates on ℝ2 | Homogeneous coordinates on ℝℙ2 | Cartesian coordinates on ℝ3 | Homogeneous coordinates on ℝℙ3 |
|---|---|---|---|
| This transform applies to the 3D space and cannot be represented on the plane. | ![]() |
![]() |
|
Examples
Rotating on the Y-axis
HTML
<p>foo</p> <p class="transformed">bar</p>
CSS
body { perspective: 800px; }
p {
width: 50px;
height: 50px;
background-color: teal;
margin: auto;
}
.transformed{
transform: rotate3d(0,1,0,60deg);
background-color: blue;
}
Result
Rotating on a custom axis
HTML
<p>foo</p> <p class="transformed">bar</p>
CSS
body { perspective: 800px; }
p {
width: 50px;
height: 50px;
background-color: teal;
margin: auto;
}
.transformed{
transform: rotate3d(1, 2, -1, 192deg);
background-color: blue;
}

