15.4. Obrót: rotate()
Wprowadzenie do funkcji rotate()
Funkcja rotate()
pozwala na **obracanie elementu** wokół jego punktu transformacji (transform-origin
, domyślnie środek elementu). Obrót może odbywać się w płaszczyźnie 2D lub w przestrzeni 3D wokół określonych osi.
Podobnie jak inne transformacje, obrót nie wpływa na otaczający layout.
Obrót 2D: rotate(kąt)
Najprostsza forma funkcji rotate()
przyjmuje jedną wartość reprezentującą **kąt obrotu** w płaszczyźnie 2D (wokół osi Z, która jest prostopadła do ekranu).
Jednostki kątów:
deg
(degrees): Stopnie. Pełny obrót to 360deg. Najczęściej używana jednostka.grad
(gradians): Gradiany. Pełny obrót to 400grad.rad
(radians): Radiany. Pełny obrót to 2π radianów (ok. 6.283rad).turn
: Obroty.1turn
oznacza pełny obrót (360deg).
Dodatnia wartość kąta oznacza obrót **zgodnie z ruchem wskazówek zegara**, a ujemna wartość oznacza obrót **przeciwnie do ruchu wskazówek zegara**.
Przykład:
.element1 {
/* Obróć o 45 stopni zgodnie z ruchem wskazówek zegara */
transform: rotate(45deg);
}
.element2 {
/* Obróć o ćwierć obrotu przeciwnie do ruchu wskazówek zegara */
transform: rotate(-0.25turn);
}
.element3 {
/* Obróć o 90 stopni (równoważne 100grad) */
transform: rotate(100grad);
}
Obrót 3D: rotateX(kąt)
, rotateY(kąt)
, rotateZ(kąt)
, rotate3d(x, y, z, kąt)
Aby obroty 3D (wokół osi X i Y) były widoczne, element lub jego rodzic musi mieć ustawioną perspektywę (perspective
) lub być częścią kontekstu renderowania 3D (transform-style: preserve-3d
).
rotateX(kąt)
Obraca element wokół osi X (osi poziomej). Wyobraź sobie, że oś X przechodzi poziomo przez środek elementu. Obrót powoduje "pochylenie" górnej krawędzi do przodu lub do tyłu.
.parent {
perspective: 500px;
}
.element {
transform: rotateX(60deg); /* Pochyl górną krawędź "do tyłu" */
}
rotateY(kąt)
Obraca element wokół osi Y (osi pionowej). Wyobraź sobie oś Y przechodzącą pionowo przez środek elementu. Obrót powoduje "obracanie się" elementu jak na karuzeli wokół tej osi.
.parent {
perspective: 500px;
}
.element {
transform: rotateY(45deg); /* Obróć wokół pionowej osi */
}
rotateZ(kąt)
Obraca element wokół osi Z (osi prostopadłej do ekranu). Jest to **równoważne** z podstawową funkcją rotate(kąt)
dla obrotów 2D.
.element {
transform: rotateZ(30deg); /* To samo co rotate(30deg) */
}
rotate3d(x, y, z, kąt)
Jest to najbardziej zaawansowana funkcja obrotu. Pozwala zdefiniować **niestandardową oś obrotu** w przestrzeni 3D za pomocą wektora [x, y, z]
, a następnie obrócić element wokół tej osi o podany kąt
.
x
,y
,z
: Liczby określające kierunek wektora osi obrotu. Np.1, 0, 0
to oś X,0, 1, 0
to oś Y,1, 1, 0
to oś pod kątem 45 stopni w płaszczyźnie XY.kąt
: Kąt obrotu wokół zdefiniowanej osi.
.parent {
perspective: 500px;
}
.element {
/* Obróć o 60 stopni wokół osi przechodzącej przez wektor [1, 1, 0] */
transform: rotate3d(1, 1, 0, 60deg);
}
Funkcja rotate3d
jest rzadziej używana niż dedykowane funkcje rotateX
, rotateY
, rotateZ
, ale daje największą elastyczność.
Obrót a transform-origin
Podobnie jak przy skalowaniu, właściwość transform-origin
określa punkt, wokół którego odbywa się obrót. Zmiana tego punktu ma kluczowe znaczenie dla efektu końcowego.
Przykład:
.element-center {
transform: rotate(45deg); /* Obrót wokół środka */
}
.element-top-left {
transform-origin: top left; /* Ustaw punkt na lewy górny róg */
transform: rotate(45deg); /* Obrót wokół lewego górnego rogu */
}
W drugim przypadku element będzie się obracał jak wskazówka zegara zamocowana w lewym górnym rogu.
FAQ - Najczęściej zadawane pytania
Jaka jest różnica między rotate(90deg)
a rotateZ(90deg)
?
W praktyce nie ma różnicy. Obie funkcje wykonują ten sam obrót 2D wokół osi Z (prostopadłej do ekranu). rotateZ
jest po prostu bardziej jawnym zapisem tego samego działania w kontekście transformacji 3D.
Dlaczego mój obrót rotateX
lub rotateY
nie wygląda jak 3D?
Aby efekt perspektywy był widoczny przy obrotach wokół osi X i Y, element nadrzędny musi mieć ustawioną właściwość perspective
(np. perspective: 1000px;
) lub sam element musi mieć perspektywę zastosowaną w funkcji transform
(np. transform: perspective(1000px) rotateY(45deg);
). Bez perspektywy obroty te będą wyglądać jak spłaszczone.
Czy mogę łączyć różne obroty?
Tak, można łączyć różne funkcje obrotu w jednej właściwości transform
, np. transform: rotateX(30deg) rotateY(20deg) rotateZ(10deg);
. Pamiętaj, że kolejność ma znaczenie, ponieważ każdy kolejny obrót odbywa się w układzie współrzędnych zmodyfikowanym przez poprzednie transformacje.
Do czego przydaje się rotate3d
?
rotate3d
jest przydatne w zaawansowanych animacjach 3D, gdzie potrzebny jest obrót wokół niestandardowej osi, która nie jest równoległa do osi X, Y ani Z. Pozwala to na tworzenie bardziej złożonych i naturalnych ruchów w przestrzeni 3D.