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 otx
i 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.