Kurs HTML

16.6. Właściwość skrócona transition

Strona główna > Kurs CSS > Rozdział 16: Przejścia CSS (Transitions) > Właściwość skrócona transition

Do czego służy transition?

Właściwość transition jest **skróconą (shorthand) właściwością**, która pozwala na zdefiniowanie wszystkich czterech podstawowych właściwości przejść (transition-property, transition-duration, transition-timing-function i transition-delay) w jednej deklaracji CSS.

Używanie skrótu jest zazwyczaj bardziej zwięzłe i czytelne, zwłaszcza gdy definiujemy przejście dla jednej lub wielu właściwości z tymi samymi parametrami czasu, funkcji czasowej i opóźnienia.

Składnia

Składnia właściwości transition pozwala na podanie wartości dla poszczególnych właściwości przejścia w określonej kolejności, oddzielonych spacjami. Można również zdefiniować wiele przejść dla różnych właściwości, oddzielając ich definicje przecinkami.

transition: [<transition-property>] || [<transition-duration>] || [<transition-timing-function>] || [<transition-delay>] [, ...];

Kolejność i interpretacja wartości:

  • Przeglądarka potrafi zazwyczaj rozróżnić poszczególne wartości na podstawie ich typu (np. wartość czasu, nazwa właściwości, funkcja czasowa).
  • Ważne: Jeśli podasz **dwie wartości czasu**, pierwsza z nich jest zawsze interpretowana jako transition-duration, a druga jako transition-delay.
  • Wartości, których nie podasz, przyjmą swoje wartości domyślne:
    • transition-property: all
    • transition-duration: 0s
    • transition-timing-function: ease
    • transition-delay: 0s

Przykłady:

.element1 {
  /* Przejście dla wszystkich właściwości, trwające 0.5s, z funkcją ease-out */
  transition: all 0.5s ease-out;
  /* Równoważne: */
  /* transition-property: all; */
  /* transition-duration: 0.5s; */
  /* transition-timing-function: ease-out; */
  /* transition-delay: 0s; */
}

.element2 {
  /* Przejście tylko dla 'opacity', trwające 300ms, z opóźnieniem 100ms */
  transition: opacity 300ms linear 100ms;
  /* Równoważne: */
  /* transition-property: opacity; */
  /* transition-duration: 300ms; */
  /* transition-timing-function: linear; */
  /* transition-delay: 100ms; */
}

.element3 {
  /* Dwa przejścia: */
  /* 1. dla 'width', trwające 0.4s, ease-in */
  /* 2. dla 'background-color', trwające 0.2s, linear, z opóźnieniem 0.1s */
  transition: width 0.4s ease-in, background-color 0.2s linear 0.1s;
}

.element4 {
  /* Minimalna definicja - tylko czas trwania (reszta domyślna) */
  /* Animuje 'all' przez 0.3s z funkcją 'ease' i opóźnieniem '0s' */
  transition: 0.3s;
}

.element5 {
  /* Dwa czasy - pierwszy to duration, drugi to delay */
  /* Animuje 'all' przez 0.5s z funkcją 'ease' i opóźnieniem 0.2s */
  transition: 0.5s 0.2s;
}

Zalety używania skrótu

  • Zwięzłość: Kod jest krótszy i często łatwiejszy do odczytania na pierwszy rzut oka.
  • Łatwość zarządzania: Wszystkie parametry przejścia dla danej właściwości (lub zestawu właściwości) są w jednym miejscu.
  • Standardowa praktyka: W większości przypadków deweloperzy preferują używanie właściwości skróconej transition.

Kiedy używać pełnych właściwości?

Chociaż skrót jest wygodny, istnieją sytuacje, w których użycie pełnych właściwości (transition-property, transition-duration itd.) może być lepsze:

  • Nadpisywanie tylko jednego aspektu: Jeśli chcesz nadpisać tylko jeden parametr przejścia w bardziej specyficznym selektorze (np. zmienić tylko transition-duration w stanie :hover), użycie pełnej właściwości jest bardziej precyzyjne i nie wymaga powtarzania pozostałych wartości.
  • Czytelność w bardzo złożonych przypadkach: Przy definiowaniu wielu przejść z różnymi parametrami dla wielu właściwości, rozbicie tego na osobne właściwości może czasami (choć rzadko) poprawić czytelność.

Przykład nadpisywania:

.button {
  /* Definicja bazowa za pomocą skrótu */
  transition: background-color 0.3s ease-out, transform 0.2s linear;
}

.button:hover {
  background-color: red;
  transform: scale(1.1);
  /* Nadpisz tylko czas trwania dla transformacji w stanie hover */
  transition-duration: 0.4s; 
  /* Uwaga: To nadpisze czasy dla OBU przejść (background-color i transform) */
  /* Lepsze może być: */
  /* transition: background-color 0.3s ease-out, transform 0.4s linear; */
  /* Lub użycie pełnych właściwości w stanie bazowym */
}

FAQ - Najczęściej zadawane pytania

Czy kolejność wartości w skrócie transition ma znaczenie?

Tak, szczególnie jeśli podajesz dwie wartości czasu - pierwsza zawsze oznacza duration, druga delay. Dla pozostałych wartości (property, timing-function) przeglądarka zazwyczaj potrafi je rozróżnić niezależnie od kolejności, ale zaleca się trzymanie konwencji: property duration timing-function delay.

Co jeśli pominę jakąś wartość w skrócie?

Pominięte wartości przyjmą swoje domyślne odpowiedniki: all dla property, 0s dla duration, ease dla timing-function i 0s dla delay.

Jak zdefiniować wiele przejść za pomocą skrótu?

Oddziel definicje poszczególnych przejść przecinkami. Każda definicja po przecinku może zawierać własny zestaw wartości property, duration, timing-function i delay. Na przykład: transition: width 1s, height 0.5s ease-in 0.2s;.

Czy transition: none; wyłącza wszystkie przejścia?

Tak, ustawienie transition: none; jest równoważne z transition-property: none; i skutecznie wyłącza wszystkie przejścia dla danego elementu.