Kurs HTML

17.2. Właściwości animation-name i animation-duration

Strona główna > Kurs CSS > Rozdział 17: Animacje CSS (@keyframes) > Właściwości animation-name i animation-duration

animation-name: Powiązanie z @keyframes

Właściwość animation-name jest **niezbędna** do zastosowania zdefiniowanej animacji @keyframes do elementu. Jej wartością jest nazwa (lub nazwy oddzielone przecinkami) reguły @keyframes, którą chcemy uruchomić na tym elemencie.

Bez podania animation-name, przeglądarka nie wie, którą sekwencję klatek kluczowych ma odtworzyć, więc żadna animacja się nie odbędzie.

Składnia:

animation-name: none | <nazwa-keyframes> [, <nazwa-keyframes>]*;
  • none (wartość domyślna): Brak animacji.
  • <nazwa-keyframes>: Nazwa zdefiniowana w regule @keyframes nazwa-keyframes { ... }. Nazwa jest wrażliwa na wielkość liter.
  • Lista nazw: Można przypisać wiele animacji do jednego elementu, podając ich nazwy oddzielone przecinkami. Każda animacja będzie działać zgodnie ze swoimi parametrami (czasem trwania, funkcją czasową itd.).

Przykład:

/* Definicje animacji */
@keyframes pulsowanie {
  50% { opacity: 0.5; }
}

@keyframes przesuwanie {
  to { transform: translateX(100px); }
}

/* Zastosowanie animacji */
.element1 {
  /* Użyj animacji o nazwie 'pulsowanie' */
  animation-name: pulsowanie;
  animation-duration: 1s;
}

.element2 {
  /* Użyj obu animacji jednocześnie */
  animation-name: pulsowanie, przesuwanie;
  /* Czasy trwania dla obu animacji (kolejność odpowiada nazwom) */
  animation-duration: 1s, 2s;
}

animation-duration: Czas trwania animacji

Właściwość animation-duration określa **czas potrzebny na ukończenie jednego cyklu animacji**. Podobnie jak transition-duration, jest to kluczowy parametr - bez niego (lub z wartością 0s) animacja nie będzie widoczna.

Składnia:

animation-duration: <czas> [, <czas>]*;
  • <czas>: Wartość czasu, **nieujemna**. Używane jednostki to sekundy (s) i milisekundy (ms).

Wartość domyślna: 0s (brak animacji).

Przykład:

@keyframes powiekszanie {
  to { transform: scale(1.5); }
}

.element1 {
  animation-name: powiekszanie;
  /* Jeden cykl animacji potrwa 3 sekundy */
  animation-duration: 3s;
}

.element2 {
  animation-name: pulsowanie, przesuwanie; /* Z poprzedniego przykładu */
  /* 'pulsowanie' trwa 500ms, 'przesuwanie' trwa 1.5s */
  animation-duration: 500ms, 1.5s;
}

Jeśli lista czasów trwania jest krótsza niż lista nazw animacji w animation-name, wartości czasów są powtarzane cyklicznie.

Współpraca animation-name i animation-duration

Te dwie właściwości są fundamentalne i muszą być zdefiniowane (z wartościami innymi niż domyślne), aby jakakolwiek animacja CSS mogła się odbyć. animation-name mówi *co* animować, a animation-duration mówi *jak długo* ma trwać jeden cykl tej animacji.

W kolejnych lekcjach poznamy inne właściwości z rodziny animation-*, które pozwalają dalej dostosowywać zachowanie animacji (np. funkcję czasową, opóźnienie, liczbę powtórzeń).

FAQ - Najczęściej zadawane pytania

Co jeśli podam nazwę animacji, która nie istnieje w @keyframes?

Jeśli wartość animation-name nie odpowiada żadnej zdefiniowanej regule @keyframes, przeglądarka po prostu zignoruje tę animację. Element nie będzie animowany zgodnie z tą nazwą.

Czy muszę podawać jednostkę czasu w animation-duration?

Tak, podanie jednostki (s lub ms) jest wymagane. Sama liczba bez jednostki jest nieprawidłową wartością i zostanie zignorowana (co zwykle skutkuje domyślnym 0s).

Czy animation-duration: 0s; ma jakiś sens?

Ustawienie animation-duration na 0s skutecznie wyłącza animację, ponieważ jej cykl trwa zerowy czas. Jest to równoważne z brakiem definicji animacji lub użyciem animation-name: none;.

Jak dopasować czasy trwania do nazw przy wielu animacjach?

Kolejność wartości w animation-duration odpowiada kolejności nazw w animation-name. Pierwszy czas dotyczy pierwszej nazwy, drugi czas drugiej nazwy itd. Jeśli lista czasów jest krótsza, jest powtarzana.

animation-name: anim1, anim2, anim3;
animation-duration: 1s, 2s; /* anim1: 1s, anim2: 2s, anim3: 1s */