Transitions & animations
Un peu de mouvement rend une interface vivante et compréhensible. Tout ça, sans une ligne de JavaScript.
Les transitions
Une transition adoucit le passage d'un style à un autre (souvent au survol). Survole les boutons :
Courbes de vitesse : ease (défaut), linear, ease-in, ease-out, ease-in-out.
Les transformations
transform déplace, agrandit ou tourne un élément sans décaler les autres.
Boîte
Pour agrandir un bouton au survol sans pousser les éléments voisins, on utilise…
widthetheightplus grandstransform: scale(1.1)font-sizeplus grand
transform ne change pas la place occupée dans la page. Bonus : c'est aussi beaucoup plus fluide à animer.
Les animations @keyframes
Une transition va de A à B quand un état change. Une animation joue toute seule un scénario d'étapes, éventuellement en boucle.
Accessibilité Certaines personnes sont gênées par le mouvement. On peut réduire les animations pour elles avec
@media (prefers-reduced-motion: reduce) { … }.À toi de jouer
Le bouton vivant
- Au survol,
.btngrossit (transform: scale(1.1)) et son fond devientcrimson. - Le changement dure
0.3s(transition sur.btn, pas sur:hover).
Indice
Il faut deux règles :.btn (état normal) et .btn:hover (pendant le survol).Indice
Latransition se met sur .btn pour jouer à l’aller et au retour : transition: all 0.3s;Indice
La règle de survol :.btn:hover {
transform: scale(1.1);
background: crimson;
}Le loader qui tourne
- Crée une animation
@keyframes tournequi fait un tour complet (rotate(360deg)). - Applique-la à
.loader: durée1s, vitesse constante (linear), à l'infini.
Indice
Une animation, c’est deux choses : les étapes (@keyframes nom { … }) et leur application sur l’élément (animation: …).Indice
Pour un tour complet, une seule étape suffit :to { transform: rotate(360deg); }Indice
Sur.loader : animation: tourne 1s linear infinite; (nom, durée, vitesse, répétition).À retenir
transition: propriété duréesur l'élément de base, le changement sur:hover.transform:translate,scale,rotate— sans déranger la mise en page.@keyframes nom { … }+animation: nom durée infinite.