Animace
CSS animace umožňují prvkům měnit své vlastnosti v čase pomocí vlastnosti animation a definice klíčových snímků přes @keyframes.
Základní animace
@keyframes posun-doprava {
0% {
transform: translateX(0);
}
100% {
transform: translateX(100px);
}
}
.prvek {
animation: posun-doprava 2s infinite;
}
Kódem výše jsme zadefinovali animaci posun-doprava, která prvek postupně posune o 100 pixelů doprava během dvou sekund a bude se opakovat donekonečna.
Vlastnost animation je sdružená vlastnost. Dá se rozepsat na následující:
animation-nameurčuje jméno, které jsme si zadefinovali v klíčových snímcích.animation-durationnastavuje délku animace (hodnoty např.0s,0.3s,750ms).animation-delayopozdí spuštění animace (hodnoty např.0s,1s,500ms).animation-timing-functionnastavuje průběžně měnící se rychlost (hodnoty např.ease,linear,ease-in,cubic-bezier(0.1, 0.7, 1, 0.1)).animation-iteration-countříká, kolikrát se má animace opakovat (hodnoty např.1,2,infinite).animation-directionrozhoduje o směru animace (hodnoty např.normal,reverse,alternate,alternate-reverse).
Klíčové snímky definujeme pomocí klíčového slova @keyframes, za kterým následuje jméno animace. V bloku definujeme jednotlivé snímky pomocí procentuálního vyjádření času (0% pro začátek animace, 100% pro konec). Snímků můžeme mít libovolné množství.
Více klíčových snímků
@keyframes zmena-barvy {
0% {
color: black;
background-color: red;
}
20% {
color: white;
background-color: black;
}
50% {
color: white;
background-color: blue;
}
75% {
color: black;
background-color: white;
}
100% {
color: white;
background-color: green;
}
}
.prvek {
animation-name: zmena-barvy;
animation-duration: 5s;
animation-iteration-count: infinite;
}
Plynulé přeskočení na první snímek
Pokud se snažíme docílit nekonečné animace pomocí animation-iteration-count: infinite, hodí se, aby byl první snímek stejný jako poslední. Jinak by přeskočení z posledního snímku zpět na první bylo vidět.
@keyframes toc-dokola {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.prvek {
animation: toc-dokola 2s infinite;
}
Alternativně můžeme použít animation-direction: alternate, který bude animaci opakovat v opačném směru. Tam a zpátky.
@keyframes ping-pong {
0% {
transform: translateX(0);
}
100% {
transform: translateX(100px);
}
}
.prvek {
animation: ping-pong 2s infinite alternate;
}
Příklady užití animací
- Znázornění načítání. css-loaders.com
Pro pokročilé
- Vlastnost
animation-fill-modeurčuje, jak se má prvek chovat mimo dobu animace (hodnoty např.none,forwards,backwards,both). MDN animation fill mode - V blízké době se můžeme těšit na animace řízené scrollováním místo času. MDN scroll-timeline
0%a100%můžeme nahradit klíčovými slovyfromato.
Cvičení
- Postupuj podle zadání na github.com/…/cviceni-hodiny-css.