Animacje CSS

Animacje CSS zostały wprowadzone w trzeciej wersji języka kaskadowych arkuszy stylów i są wspierane przez przeglądarki od następujących wersji:

  • Google Chrome 4.0 (do wersji 43.0 wymagany przedrostek -webkit-)
  • Mozilla Firefox 5.0 (do wersji 16.0 wymagany przedrostek -moz-)
  • Opera 12.0 (do wersji 15.0 wymagany przedrostek -o-, do wersji 30.0 wymagany przedrostek -webkit-)
  • Internet Explorer 10.0
  • Microsoft Edge
  • Safari 4.0 (do wersji 9.0 wymagany przedrostek -webkit-)

Animacje CSS wywołuje się za pomocą funkcji animation, której zadaniem jest zmiana właściwości animowanego obiektu. Podstawowa składnia funkcji to:

animation: name duration timing-function delay iteration-count direction fill-mode play-state;

Poszczególne parametry funkcji określają:

name (keyframename | none | initial | inherit)

Identyfikator funkcji, która ma zostać wywołana po uruchomieniu animacji.

duration (time | initial | inherit)

Czas trwania pojedynczego, pełnego cyku animacji.

timing-function (linear | ease | ease-in | ease-out | ease-in-out | step-start | step-end | steps(int,start | end) | cubic-bezier(n,n,n,n) | initial | inherit)

Funkcja określająca szybkość animacji w poszczególnych jej krokach, na przykład:

  • linear – stała prędkość podczas całej animacji,
  • ease – wolne rozpoczęcie, następnie przyspieszenie i zwolnienie przed końcem animacji,
  • ease-in – powolne rozpoczęcie, szybkie zakończenie,
  • ease-out – szybkie rozpoczęcie, powolne zakończenie,
  • ease-in-out – wolne rozpoczęcie i zakończenie, szybki środek animacji,

delay (time | initial | inherit)

Opóźnienie – czas, jaki musi upłynąć przed rozpoczęciem animacji.

iteration-count (number | infinite | initial | inherit)

Liczba określająca ile razy animacja ma się wykonać.

direction (normal | reverse | alternate | alternate-reverse | initial | inherit)

Sposób wykonania animacji, na przykład:

  • normal – standardowo- od początku do końca,
  • reverse – odwrotnie- od końca do początku,
  • alternate – naprzemiennie- od początku do końca, a potem od końca do początku,
  • alternate-reverse – naprzemiennie odwrotnie- od końca do początku, a potem od początku do końca.

fill-mode (none | forwards | backwards | both | initial | inherit)

Parametr określa, co ma się stać z animacją, gdy zostanie ukończona, na przykład:

  • backwards – ma wrócić do stanu początkowego,
  • forwards – ma przejść do stanu, w którym się zakończyła.

play-state (paused | running | initial | inherit)

Parametr definiuje aktualny stan animacji, na przykład:

  • running – działająca,
  • paused – wstrzymana.

Dla tak przygotowanej właściwości animation należy zdefiniować funkcję @keyframes name, która będzie określać stan obiektu w poszczególnych krokach animacji. Na przykład:

@keyframes rainbow {

	0% {
		background-color: red;
	}
	10% {
		background-color: orange;
	}
	20% {
		background-color: yellow;
	}
	30% {
		background-color: lime;
	}
	40% {
		background-color: green;
	}
	50% {
		background-color: cyan;
	}
	60% {
		background-color: blue;
	}
	70% {
		background-color: purple;
	}
	80% {
		background-color: violet;
	}
	90% {
		background-color: pink;
	}
	100% {
		background-color: red;
	}

}

Przedstawiona powyżej funkcja animacji będzie zmieniać tło wskazanego obiektu w kolejnych jednostkach czasu przedstawionych w procentach.

Bieżący artykuł jest kontynuacją wcześniej opublikowanego wpisu pod tytułem: CSS3 Preloaders – niestandardowy pasek wczytywania.

Poniżej przedstawiono przykłady wykorzystania animacji CSS na stronach internetowych w postaci preloaderów, czyli animacji symulujących wczytywanie się strony internetowej.

Przykład 7

Poniższy preloader, wykorzystując zmianę właściwości box-shadow, imituje proces wczytywania się strony internetowej.

Przykład 8

Bazując na poprzednim przykładzie, do animacji dodano transformację transform: rotate(angle) obracającą obiekt wokół własnej osi. Wartości cienia w poszczególnych krokach dostosowano do potrzeb bieżącej animacji.

W tym przykładzie stałą jednostkę px (piksele) zamieniono na jednostkę zależną em. Korzystanie z jednostek zależnych jest dużo praktyczniejsze, gdyż jej rozmiar jest uwarunkowany od rozmiaru elementu nadrzędnego. Oznacza to, że wystarczy zmienić rozmiar elementu nadrzędnego, a cały obiekt proporcjonalnie zmieni swoją wielkość. Nie trzeba więc modyfikować i obliczać ręcznie każdej wartości. Zrobi to przeglądarka za programistę. Zaawansowany programista zawsze gdzie tylko może, to stosuje rozmiary zależne. Jeśli nie czujesz się jeszcze na siłach, to korzystaj z wartości stałych takich, jak piksele. Z biegiem czasu nauczysz się korzystać z rozwiązań alternatywnych.

Przykład 9

W ostatnim przykładzie do animacji wykorzystano selektory :before:afeter oraz dodano opóźnienie animation-delay, które powoduje nierównomierne zmiany właściwości obiektu.