15.1. Wprowadzenie do transformacji (właściwość transform
)
transform
)
Czym są transformacje CSS?
Transformacje CSS pozwalają na **modyfikowanie wizualnej prezentacji elementów HTML** bez zmiany ich rzeczywistego miejsca w przepływie dokumentu (layout). Oznacza to, że możemy przesuwać, skalować, obracać czy pochylać elementy, a otaczające je treści nie zostaną przesunięte ani nie zmienią swojego położenia.
Transformacje są potężnym narzędziem do tworzenia efektów wizualnych, animacji i interaktywnych interfejsów użytkownika. Działają one w przestrzeni 2D lub 3D.
Podstawową właściwością do stosowania transformacji jest transform
.
Właściwość transform
Właściwość transform
przyjmuje jako wartość jedną lub więcej **funkcji transformacji**. Funkcje te określają rodzaj modyfikacji, jaka ma zostać zastosowana do elementu.
Składnia:
transform: funkcja1(wartość) funkcja2(wartość) ... ;
transform: none; /* Brak transformacji (wartość domyślna) */
Możemy zastosować jedną transformację lub połączyć kilka, oddzielając je spacjami. Kolejność funkcji ma znaczenie!
Podstawowe funkcje transformacji 2D
W kolejnych lekcjach omówimy szczegółowo najważniejsze funkcje, ale oto krótki przegląd najczęściej używanych transformacji 2D:
translate(tx, [ty])
: Przesuwa element w poziomie (otx
) i opcjonalnie w pionie (oty
). Istnieją też funkcjetranslateX(tx)
itranslateY(ty)
.scale(sx, [sy])
: Skaluje (powiększa lub pomniejsza) element w poziomie (osx
) i opcjonalnie w pionie (osy
). Wartość 1 oznacza brak skalowania. Istnieją też funkcjescaleX(sx)
iscaleY(sy)
.rotate(kąt)
: Obraca element wokół jego punktu centralnego o podany kąt (np. w stopniach -deg
).skew(kątX, [kątY])
: Pochyla element w poziomie (okątX
) i opcjonalnie w pionie (okątY
). Istnieją też funkcjeskewX(kątX)
iskewY(kątY)
.
Przykład użycia jednej funkcji:
.element {
transform: rotate(45deg); /* Obróć element o 45 stopni */
}
Przykład łączenia funkcji:
.element {
/* Najpierw obróć, potem przesuń */
transform: rotate(45deg) translate(50px, 20px);
}
Transformacje a Layout
Jak wspomniano, kluczową cechą transformacji jest to, że **nie wpływają one na otaczający layout**. Element jest rysowany w nowym miejscu lub z nowym kształtem, ale przestrzeń, którą pierwotnie zajmował, pozostaje nienaruszona. Inne elementy nie "widzą" transformacji i nie przesuwają się, aby zrobić miejsce.
To odróżnia transformacje od modyfikacji layoutu za pomocą np. position: relative
z top
/left
(które również nie wpływa na inne elementy) czy zmiany marginesów (które wpływają na otoczenie).
Dzięki temu transformacje są idealne do animacji i efektów wizualnych, ponieważ ich stosowanie jest wydajne dla przeglądarki (często wykorzystują akcelerację sprzętową GPU) i nie powoduje kosztownych przeliczeń całego layoutu strony.
Właściwość transform-origin
Domyślnie transformacje takie jak obrót (rotate
) czy skalowanie (scale
) odbywają się wokół **środka elementu** (punkt 50% 50%
). Właściwość transform-origin
pozwala zmienić ten punkt odniesienia.
Omówimy ją szczegółowo w dedykowanej lekcji.
.element {
transform-origin: top left; /* Ustaw punkt transformacji na lewy górny róg */
transform: rotate(30deg);
}
FAQ - Najczęściej zadawane pytania
Czy transformacje działają na elementach inline
?
Transformacje CSS działają tylko na elementach, które mają zdefiniowany tzw. "transformable element context". W praktyce oznacza to, że działają na elementach blokowych (display: block
), liniowo-blokowych (display: inline-block
), elementach flex (display: flex
) i grid (display: grid
), ale **nie działają** na zwykłych elementach liniowych (display: inline
).
Jaka jest różnica między transform: translate()
a position: relative
z top/left
?
Obie metody wizualnie przesuwają element bez wpływu na pozycję innych elementów. Jednak transform
jest zazwyczaj bardziej wydajne, zwłaszcza przy animacjach, ponieważ przeglądarki często mogą wykorzystać akcelerację GPU do transformacji, podczas gdy zmiana top
/left
może wymagać przeliczeń na CPU.
Czy kolejność funkcji transformacji w transform
ma znaczenie?
Tak, kolejność ma znaczenie. Transformacje są stosowane sekwencyjnie, od lewej do prawej. Na przykład transform: rotate(45deg) scale(1.5)
da inny wynik niż transform: scale(1.5) rotate(45deg)
, ponieważ w pierwszym przypadku element jest najpierw obracany, a potem skalowany (względem obróconego układu), a w drugim odwrotnie.
Czy mogę animować transformacje?
Tak, właściwość transform
jest jedną z najlepiej nadających się do animacji właściwości CSS. Można ją płynnie animować za pomocą właściwości transition
lub bardziej złożonych animacji @keyframes
. Omówimy to w rozdziale o przejściach i animacjach.