Kurs HTML

15.2. Przesunięcie: translate()

Strona główna > Kurs CSS > Rozdział 15: Transformacje CSS > 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 to translateX(tx).
  • Dwie wartości translate(tx, ty): Przesuwa element w poziomie o tx i w pionie (wzdłuż osi Y) o ty.

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.