Nauczymy się robić animacje, które działają „w dwie strony” na przykładzie elementu, który rośnie i maleje. Zrobimy to korzystając z animation direction ustawionego na alternate, czyli tak, jak się to robić powinno, zamiast stosować różne obejścia.
Tworzymy div circle:
<div class="circle"></div>
Resetujemy style, centrujemy elementy wewnątrz body, tworzymy koło:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
height: 100vh;
background-color: aliceblue;
display: flex;
justify-content: center;
align-items: center;
}
.circle {
width: 200px;
height: 200px;
border-radius: 50%;
background-color: tomato;
}
Tworzymy animację rośnięcia:
@keyframes grow {
0% {
transform: scale(1);
}
100% {
transform: scale(2);
}
}
Dodajemy do koła:
.circle {
(...)
animation: grow 2s linear infinite;
}
Teraz nasze koło będzie rosnąć, a następnie przeskakiwać nagle do najmniejszej wielkości i dalej rosnąć. Wystarczy jedną linijkę dodać, z animation state alternate, aby nasze koło rosło a następnie malało i dopiero kontynuowało animację – takie jest założenie tego stanu:
.circle {
(...)
animation: grow 2s linear infinite;
animation-direction: alternate;
}
Już. Nic więcej nie trzeba. To samo dzieje się z innymi animacjami, np. przesuwająca element z lewej strony na prawo teraz będzie „wracała” zanim zacznie kontynuować następną iterację animacji i tak dalej.