Kurs HTML

16.5. Właściwość transition-delay

Do czego służy transition-delay?

Właściwość transition-delay pozwala na **opóźnienie rozpoczęcia przejścia CSS**. Zamiast startować natychmiast po zmianie wartości animowanej właściwości, przejście rozpocznie się dopiero po upływie określonego czasu opóźnienia.

Jest to przydatne do tworzenia bardziej złożonych sekwencji animacji lub do zapewnienia, że przejście nie rozpocznie się zbyt wcześnie, np. przy przypadkowym, krótkim najechaniu myszą.

Składnia i wartości

Właściwość transition-delay przyjmuje jedną lub więcej wartości czasu, oddzielonych przecinkami. Każda wartość odpowiada kolejnej właściwości zdefiniowanej w transition-property.

transition-delay: <czas> [, <czas>]*;
  • <czas>: Wartość czasu określająca opóźnienie przed startem przejścia. Może być to wartość **dodatnia, ujemna lub zero**. Jednostki są takie same jak dla transition-duration:
    • s (sekundy): Np. 0.2s, 1s.
    • ms (milisekundy): Np. 150ms, 1200ms.

Interpretacja wartości:

  • Wartość dodatnia (np. 0.5s): Przejście rozpocznie się po upływie 0.5 sekundy od momentu zmiany właściwości.
  • Zero (0s, wartość domyślna): Przejście rozpocznie się natychmiast.
  • Wartość ujemna (np. -0.5s): Przejście rozpocznie się natychmiast, ale będzie wyglądało, jakby już trwało od 0.5 sekundy. Jeśli całkowity czas trwania (transition-duration) wynosi 1s, a opóźnienie -0.5s, animacja rozpocznie się od połowy i potrwa tylko pozostałe 0.5s.

Przykłady:

.element1 {
  transition-property: background-color;
  transition-duration: 0.4s;
  /* Rozpocznij przejście koloru tła po 0.1 sekundy */
  transition-delay: 0.1s; 
}

.element2 {
  transition-property: width, opacity;
  transition-duration: 0.5s, 0.3s;
  /* Opóźnij przejście szerokości o 200ms, a przezroczystości o 400ms */
  transition-delay: 200ms, 400ms; 
}

.element3 {
  transition-property: transform, color;
  transition-duration: 1s;
  /* Rozpocznij transformację natychmiast, ale opóźnij zmianę koloru o 0.5s */
  transition-delay: 0s, 0.5s; 
}

.element4 {
  transition-property: all;
  transition-duration: 0.5s;
  /* Rozpocznij natychmiast, ale od połowy animacji */
  transition-delay: -0.25s;
}

Podobnie jak w przypadku transition-duration i transition-timing-function, jeśli lista opóźnień jest krótsza niż lista właściwości, wartości są powtarzane.

Zastosowania transition-delay

  • Sekwencjonowanie animacji: Można tworzyć efekt "kaskadowy", gdzie różne elementy lub różne właściwości tego samego elementu zaczynają animować się jedna po drugiej.
  • Unikanie przypadkowych aktywacji: Opóźnienie przejścia przy :hover może zapobiec irytującym animacjom, gdy użytkownik tylko szybko przesunie kursor nad elementem.
  • Synchronizacja z innymi zdarzeniami: Opóźnienie może być użyte do zsynchronizowania startu przejścia CSS z innymi zdarzeniami na stronie.
  • Efekty specjalne z ujemnym opóźnieniem: Ujemne opóźnienie pozwala "wskoczyć" w środek animacji, co może być przydatne w specyficznych scenariuszach, np. przy wznawianiu przerwanej animacji.

Przykład: Kaskadowe pojawianie się elementów listy

ul li {
  opacity: 0;
  transform: translateY(20px);
  transition-property: opacity, transform;
  transition-duration: 0.4s;
  transition-timing-function: ease-out;
}

ul:hover li {
  opacity: 1;
  transform: translateY(0);
}

/* Opóźnienia dla kolejnych elementów */
ul li:nth-child(1) { transition-delay: 0.1s; }
ul li:nth-child(2) { transition-delay: 0.2s; }
ul li:nth-child(3) { transition-delay: 0.3s; }
ul li:nth-child(4) { transition-delay: 0.4s; }
/* itd. */

W tym przykładzie, po najechaniu na listę ul, jej elementy li będą pojawiać się kolejno, jeden po drugim, dzięki różnym wartościom transition-delay.

FAQ - Najczęściej zadawane pytania

Jaka jest domyślna wartość transition-delay?

Domyślną wartością jest 0s. Oznacza to, że jeśli nie podasz jawnie transition-delay, przejście rozpocznie się natychmiast po zmianie wartości animowanej właściwości.

Czy ujemne opóźnienie skraca czas trwania animacji?

Tak, efektywnie skraca widoczny czas trwania. Jeśli transition-duration to 1s, a transition-delay to -0.3s, animacja rozpocznie się od stanu odpowiadającego 30% postępu i potrwa tylko pozostałe 0.7s.

Czy mogę ustawić różne opóźnienia dla przejścia "do" i "z" stanu?

Tak, podobnie jak transition-duration, można zdefiniować różne wartości transition-delay dla stanu bazowego i stanu docelowego (np. :hover). Może to być użyteczne do stworzenia różnych efektów przy wchodzeniu i wychodzeniu ze stanu.

Czy opóźnienie wpływa na start animacji powrotnej?

Tak. Jeśli ustawisz transition-delay na elemencie w stanie bazowym, opóźnienie zadziała również wtedy, gdy element wraca do tego stanu (np. po opuszczeniu :hover). Jeśli chcesz opóźnić tylko start animacji "do" stanu, ustaw transition-delay tylko w regule dla tego stanu (np. w .element:hover).