15.2. Przesunięcie: translate()
Wprowadzenie do funkcji translate()
Funkcja translate() jest jedną z podstawowych funkcji transformacji CSS. Służy ona do **przesuwania elementu** wzdłuż osi X (poziomo) i/lub osi Y (pionowo) względem jego pierwotnej pozycji. Przesunięcie to nie wpływa na pozycję innych elementów na stronie.
Istnieje kilka wariantów tej funkcji, pozwalających na precyzyjne kontrolowanie przesunięcia w 2D i 3D.
Przesunięcie 2D: translate(tx, [ty]), translateX(tx), translateY(ty)
translate(tx, [ty])
Podstawowa funkcja translate() przyjmuje jedną lub dwie wartości:
- Jedna wartość
translate(tx): Przesuwa element tylko w poziomie (wzdłuż osi X) o podaną wartośćtx. Odpowiada totranslateX(tx). - Dwie wartości
translate(tx, ty): Przesuwa element w poziomie otxi w pionie (wzdłuż osi Y) oty.
Wartości mogą być podane w dowolnych jednostkach długości (np. px, em, %). Wartości dodatnie przesuwają element w prawo (X) i w dół (Y), a wartości ujemne w lewo (X) i w górę (Y).
Przykład:
.element1 {
/* Przesuń o 50px w prawo */
transform: translate(50px);
}
.element2 {
/* Przesuń o 30px w prawo i 20px w dół */
transform: translate(30px, 20px);
}
.element3 {
/* Przesuń o 100% szerokości elementu w lewo */
transform: translate(-100%);
}
.element4 {
/* Przesuń o 50% szerokości elementu w lewo i 50% wysokości w górę */
/* (często używane do centrowania z position: absolute) */
transform: translate(-50%, -50%);
}
Uwaga na procenty: Wartości procentowe w translate() odnoszą się do **rozmiaru samego transformowanego elementu** (szerokości dla osi X, wysokości dla osi Y), a nie do rozmiaru rodzica.
translateX(tx)
Ta funkcja przesuwa element wyłącznie w poziomie (wzdłuż osi X) o podaną wartość tx.
.element {
transform: translateX(100px); /* Przesuń o 100px w prawo */
}
translateY(ty)
Ta funkcja przesuwa element wyłącznie w pionie (wzdłuż osi Y) o podaną wartość ty.
.element {
transform: translateY(-20px); /* Przesuń o 20px w górę */
}
Używanie translateX i translateY jest często czytelniejsze, gdy chcemy przesunąć element tylko w jednym kierunku.
Przesunięcie 3D: translateZ(tz), translate3d(tx, ty, tz)
Aby przesunięcia w osi Z (głębi) były widoczne, element nadrzędny musi mieć ustawioną perspektywę (np. za pomocą właściwości perspective) lub sama transformacja musi być zastosowana w kontekście 3D (np. przez transform-style: preserve-3d na rodzicu lub użycie perspective() w funkcji transform).
translateZ(tz)
Przesuwa element wzdłuż osi Z. Dodatnia wartość tz przesuwa element "bliżej" obserwatora (pozornie go powiększając), a ujemna wartość przesuwa go "dalej" (pozornie pomniejszając).
.parent {
perspective: 500px; /* Ustaw perspektywę dla rodzica */
}
.element {
transform: translateZ(100px); /* Przesuń o 100px "do przodu" */
}
translate3d(tx, ty, tz)
Jest to funkcja skrócona, pozwalająca na jednoczesne przesunięcie elementu we wszystkich trzech wymiarach: X, Y i Z.
.parent {
perspective: 500px;
}
.element {
transform: translate3d(50px, -20px, 150px);
}
Wydajność: Czasami można spotkać się z opinią, że użycie translate3d(tx, ty, 0) zamiast translate(tx, ty) może wymusić akcelerację sprzętową (GPU) dla transformacji, co potencjalnie poprawia wydajność animacji. Chociaż współczesne przeglądarki są już dość inteligentne w optymalizacji, bywa to stosowane jako tzw. "hack" na wydajność w bardziej złożonych scenariuszach.
FAQ - Najczęściej zadawane pytania
Do czego odnoszą się wartości procentowe w translate()?
Wartości procentowe w funkcjach translate(), translateX() i translateY() odnoszą się do **wymiarów samego transformowanego elementu**. translate(50%) przesunie element o 50% jego własnej szerokości w prawo. translate(0, -100%) przesunie element o 100% jego własnej wysokości w górę.
Czy translate() wpływa na inne elementy?
Nie, podobnie jak inne transformacje, translate() wizualnie przesuwa element, ale nie zmienia jego miejsca w przepływie dokumentu. Otaczające elementy zachowują się tak, jakby przesunięty element nadal był na swojej pierwotnej pozycji.
Jak wycentrować element za pomocą translate()?
Popularną techniką centrowania (zarówno w poziomie, jak i w pionie) elementu o nieznanych wymiarach jest połączenie position: absolute; top: 50%; left: 50%; z transform: translate(-50%, -50%);. Pozycjonowanie absolutne umieszcza lewy górny róg elementu na środku rodzica, a transformacja cofa go o połowę jego własnej szerokości i wysokości.
Kiedy używać translate3d zamiast translate?
Używaj translate3d, gdy faktycznie potrzebujesz przesunięcia w osi Z lub gdy chcesz spróbować wymusić akcelerację sprzętową dla płynniejszych animacji (choć efekt może zależeć od przeglądarki i sprzętu). Dla prostych przesunięć 2D, translate(tx, ty), translateX(tx) lub translateY(ty) są zazwyczaj wystarczające i czytelniejsze.