Kurs HTML i CSS · Moduł 6: Animacje CSS

Zaawansowane Animacje CSS z @keyframes

3 min czytania
W tej lekcji5

W starożytnym Egipcie kapłani odprawiający rytuały powtarzali je określoną liczbę razy - czasem trzykrotnie, czasem siedmiokrotnie, a czasem nieskończenie wiele razy, aby zapewnić boską ochronę. Podobnie w CSS, animacje mogą być kontrolowane za pomocą różnych właściwości, w tym animation-iteration-count, które określa, ile razy animacja ma się powtórzyć, oraz animation-direction, które określa kierunek animacji. Poniżej przedstawiamy kilka praktycznych przykładów z wykorzystaniem tych właściwości.

Wyobraź sobie, że tworzysz animację przedstawiającą podróż słonecznej barki Ra przez niebo. Barka musi powtarzać swoją trasę codziennie - rano wyrusza ze wschodu, wieczorem dociera na zachód, a potem powraca pod ziemią, by rano znów się pojawić. To doskonała analogia do właściwości, które dziś poznamy.

animation-iteration-count

Właściwość animation-iteration-count pozwala określić, ile razy animacja ma się powtórzyć.

Przykład 1: Skacząca Piłka

Chcemy, żeby piłka skakała 3 razy.

CSS

1@keyframes bounce {
2  0%, 100% { transform: translateY(0); }
3  50% { transform: translateY(-30px); }
4}
5
6.bouncing-ball {
7  animation: bounce 1s ease-in-out;
8  animation-iteration-count: 3; /* Piłka będzie skakać 3 razy */
9}

Przykład 2: Nieskończony Obrot

Chcemy, żeby element obracał się w nieskończoność.

CSS

1@keyframes spin {
2  0% { transform: rotate(0deg); }
3  100% { transform: rotate(360deg); }
4}
5
6.infinite-spin {
7  animation: spin 2s linear infinite;
8  animation-iteration-count: infinite; /* Nieskończony obrót */
9}

animation-direction

Właściwość animation-direction określa kierunek animacji. Można ustawić różne wartości, aby uzyskać różne efekty:

  • normal (domyślne) - animacja od początku do końca.
  • reverse - animacja od końca do początku.
  • alternate - animacja na przemian od początku do końca, a potem od końca do początku.
  • alternate-reverse - animacja na przemian od końca do początku, a potem od początku do końca.

Przykład 3: Przemienne Miganie

Chcemy, żeby element zmieniał kolor na przemian.

CSS

1@keyframes blink {
2  0%, 100% { background-color: red; }
3  50% { background-color: blue; }
4}
5
6.alternate-blink {
7  animation: blink 1s linear infinite;
8  animation-direction: alternate; /* Zmiana kierunku animacji */
9}

Zaawansowane Techniki

Łączenie Właściwości

Możemy łączyć różne właściwości animacji, aby stworzyć bardziej złożone efekty.

Przykład 4: Skacząca i Obracająca się Piłka

Chcemy, żeby piłka skakała i obracała się jednocześnie, na przemian od początku do końca i od końca do początku.

CSS

1@keyframes bounce-spin {
2  0%, 100% { transform: translateY(0) rotate(0deg); }
3  50% { transform: translateY(-30px) rotate(180deg); }
4}
5
6.bouncing-spinning-ball {
7  animation: bounce-spin 2s ease-in-out infinite;
8  animation-direction: alternate; /* Skakanie i obracanie się na przemian */
9}

HTML dla Przykładów

Aby przetestować te animacje, stwórz plik HTML i dodaj odpowiednie elementy z przypisanymi klasami:

1<!DOCTYPE html>
2<html lang="en">
3<head>
4  <meta charset="UTF-8">
5  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6  <title>Animacje CSS</title>
7  <link rel="stylesheet" href="styles.css">
8</head>
9<body>
10  <div class="bouncing-ball">Piłka Skacząca</div>
11  <div class="infinite-spin">Nieskończony Obrót</div>
12  <div class="alternate-blink">Migające Elementy</div>
13  <div class="bouncing-spinning-ball">Skacząco-Obracająca się Piłka</div>
14</body>
15</html>

Podsumowanie

Właściwości animation-iteration-count i animation-direction w CSS umożliwiają tworzenie zaawansowanych animacji, które mogą być wielokrotnie powtarzane oraz zmieniać kierunek. W połączeniu z @keyframes, te właściwości pozwalają na pełną kontrolę nad wyglądem i zachowaniem elementów na stronie, co otwiera drzwi do tworzenia bardziej interaktywnych i atrakcyjnych wizualnie projektów.

Jak mawiał Mohamed: "Każda animacja, podobnie jak rytuał faraona, ma swój rytm i kierunek. Opanuj je, a Twoje strony ożyją jak malowidła w świątyni Karnaku!"

Wypróbuj te właściwości w edytorze poniżej:

Kod do tej lekcji: style.css
1* {
2  margin: 0;
3  padding: 0;
4  box-sizing: border-box;
5}
6
7body {
8  font-family: 'Segoe UI', sans-serif;
9  background: linear-gradient(180deg, #ff9a56, #d4763a);
10  color: white;
11  min-height: 100vh;
12  display: flex;
13  justify-content: center;
14  align-items: center;
15}
16
17.scene {
18  text-align: center;
19  padding: 20px;
20}
21
22h2 {
23  margin-bottom: 30px;
24  color: #3d2914;
25}
26
27.desert {
28  position: relative;
29  width: 300px;
30  height: 250px;
31  margin: 0 auto;
32}
33
34.pyramid {
35  font-size: 120px;
36  color: #c9a84c;
37  text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.4);
38  position: absolute;
39  top: 20px;
40  left: 50%;
41  transform: translateX(-50%);
42  /* Dodaj animacje tutaj */
43  /* Uzyj @keyframes appear z opacity i scale */
44  /* animation: appear 3s ease-out forwards; */
45}
46
47.sand {
48  position: absolute;
49  bottom: 0;
50  width: 100%;
51  height: 60px;
52  background: linear-gradient(180deg, #d4a574, #c9a84c);
53  border-radius: 50% 50% 0 0;
54}
55
56/* Zdefiniuj @keyframes appear */
57/* 0% { opacity: 0; transform: translateX(-50%) scale(0.3); } */
58/* 100% { opacity: 1; transform: translateX(-50%) scale(1); } */
59
60.hint {
61  margin-top: 20px;
62  color: #3d2914;
63  font-style: italic;
64}

Widzisz błąd w tej lekcji?

Sprawdź się

Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.

  1. 1. Jak sprawić, aby animacja CSS powtarzała się w nieskończoność?

  2. 2. Która wartość animation-direction sprawia, że animacja odtwarza się tam i z powrotem?

To 2 z 3 pytań do tej lekcji. Pozostałe rozwiążesz w grze.

Zadania praktyczne w grze

  • Edytor kodu

    Stwórz @keyframes sail: 0% { translateX(-100px) }, 100% { translateX(100vw) }. Zastosuj do .boat: animation: sail 8s linear infinite. Dodaj direction: alternate by barka wracała. Efekt: barka płynie w obie strony!

  • Edytor kodu

    Stwórz animację migoczących gwiazd używając @keyframes z opacity, animation-iteration-count: infinite oraz różne animation-delay dla każdej gwiazdy.

  • Klikanie w kolejności

    Ułóż wartości animation-iteration-count od najmniejszej do największej liczby powtórzeń:

  • Edytor kodu

    Animuj zwój papirusu rozwijający się używając scaleX i transform-origin aby symulować rozwijanie starożytnego dokumentu.

Przydatne artykuły