CSS offre un ensemble d'outils robustes pour créer des animations élégantes et attrayantes dans votre application.
Comment écrire des animations en CSS natif
Si vous n'avez jamais écrit d'animations CSS natives, il existe de nombreux excellents guides pour bien démarrer. En voici quelques-uns : Guide des animations CSS de MDN Guide des animations CSS3 de W3Schools Le tutoriel complet sur les animations CSS Les animations CSS pour les débutants
ainsi que quelques vidéos : Apprendre les animations CSS en 9 minutes Playlist de tutoriels sur les animations CSS de Net Ninja
Consultez certains de ces guides et tutoriels, puis revenez à ce guide.
Créer des animations réutilisables
Vous pouvez créer des animations réutilisables, partagées dans toute votre application, avec @keyframes. Définissez des animations keyframes dans un fichier CSS partagé, et vous pourrez réutiliser ces animations keyframes où vous le souhaitez dans votre application.
animations.css
@keyframes sharedAnimation {
to {
height: 0;
opacity: 1;
background-color: 'red';
}
}
.animated-class {
animation: sharedAnimation 1s;
}
Ajouter la classe animated-class à un élément déclenche l'animation sur cet élément.
Animer une transition
Animer des états et des styles
Vous pouvez vouloir animer le passage entre deux états différents, par exemple quand un élément est ouvert ou fermé. Vous pouvez y parvenir avec des classes CSS, soit avec une animation keyframes, soit avec un style de transition.
animations.css
.open {
height: '200px';
opacity: 1;
background-color: 'yellow';
transition: all 1s;
}
.closed {
height: '100px';
opacity: 0.8;
background-color: 'blue';
transition: all 1s;
}
Pour déclencher l'état open ou closed, il suffit de basculer des classes sur l'élément dans votre composant. Vous trouverez des exemples dans notre guide des templates.
Vous trouverez des exemples similaires dans le guide des templates pour animer directement des styles.
Transitions, timing et easing
Animer nécessite souvent d'ajuster le timing, les délais et le comportement d'easing. Vous pouvez le faire avec plusieurs propriétés CSS ou propriétés raccourcies.
Spécifiez animation-duration, animation-delay et animation-timing-function pour une animation keyframes en CSS, ou utilisez plutôt la propriété raccourcie animation.
animations.css
.example-element {
animation-duration: 1s;
animation-delay: 500ms;
animation-timing-function: ease-in-out;
}
.example-shorthand {
animation: exampleAnimation 1s ease-in-out 500ms;
}
De même, vous pouvez utiliser transition-duration, transition-delay et transition-timing-function, ainsi que le raccourci transition, pour les animations qui n'utilisent pas @keyframes.
animations.css
.example-element {
transition-duration: 1s;
transition-delay: 500ms;
transition-timing-function: ease-in-out;
transition-property: margin-right;
}
.example-shorthand {
transition: margin-right 1s ease-in-out 500ms;
}
Déclencher une animation
Les animations peuvent être déclenchées en basculant des styles ou des classes CSS. Dès qu'une classe est présente sur un élément, l'animation se produit. Retirer la classe ramène l'élément au CSS défini pour lui. Voici un exemple :
Transition et déclencheurs
Animer une hauteur auto
Vous pouvez utiliser CSS Grid pour animer vers une hauteur auto.
Si vous n'avez pas à vous soucier de la prise en charge de tous les navigateurs, vous pouvez aussi regarder calc-size(), qui est la véritable solution pour animer une hauteur auto. Consultez la documentation de MDN et ce tutoriel pour plus d'informations.
Animer l'entrée et la sortie d'une vue
Vous pouvez créer des animations pour le moment où un élément entre dans une vue ou en sort. Commençons par voir comment animer un élément qui entre dans une vue. Nous allons utiliser animate.enter, qui applique des classes d'animation quand un élément entre dans la vue.
Animer un élément quand il quitte la vue ressemble à l'animation de son entrée dans la vue. Utilisez animate.leave pour indiquer quelles classes CSS appliquer quand l'élément quitte la vue.
Note : Les animations animate.leave des enfants ne se déclenchent qu'au sein du template d'un même composant. Les animations animate.leave des composants imbriqués ne se déclenchent pas quand un élément parent est retiré.
Pour plus d'informations sur animate.enter et animate.leave, consultez le guide des animations d'entrée et de sortie.
Animer une incrémentation et une décrémentation
Animer lors d'une incrémentation ou d'une décrémentation est un pattern courant dans les applications. Voici un exemple de la façon d'obtenir ce comportement.
Désactiver une animation ou toutes les animations
Si vous souhaitez désactiver les animations que vous avez définies, plusieurs options s'offrent à vous.
- Créez une classe personnalisée qui force animation et transition à
none.
.no-animation {
animation: none !important;
transition: none !important;
}
Appliquer cette classe à un élément empêche toute animation de se déclencher sur cet élément. Vous pouvez aussi l'appliquer à tout votre DOM ou à une section de votre DOM pour imposer ce comportement. Cependant, cela empêche les événements d'animation de se déclencher. Si vous attendez des événements d'animation pour retirer un élément, cette solution ne fonctionnera pas. Une solution de contournement consiste à définir plutôt des durées de 1 milliseconde.
Utilisez la media query
prefers-reduced-motionpour qu'aucune animation ne soit jouée pour les utilisateurs qui préfèrent moins d'animations.Évitez d'ajouter des classes d'animation par programmation
Callbacks d'animation
Si vous souhaitez exécuter des actions à certains moments d'une animation, vous pouvez écouter un certain nombre d'événements. En voici quelques-uns.
OnAnimationStartOnAnimationEndOnAnimationIterationOnAnimationCancel
OnTransitionStartOnTransitionRunOnTransitionEndOnTransitionCancel
La Web Animations API offre de nombreuses fonctionnalités supplémentaires. Consultez la documentation pour voir toutes les API d'animation disponibles.
Note : Faites attention aux problèmes de propagation (bubbling) avec ces callbacks. Si vous animez des enfants et des parents, les événements remontent des enfants vers les parents. Envisagez d'arrêter la propagation ou d'examiner plus en détail l'événement pour déterminer si vous répondez bien à la cible d'événement voulue plutôt qu'à un événement remonté depuis un nœud enfant. Vous pouvez examiner la propriété animationname ou les propriétés en cours de transition pour vérifier que vous ciblez les bons nœuds.
Séquences complexes
Les animations sont souvent plus compliquées qu'un simple fondu en entrée ou en sortie. Vous pouvez avoir de nombreuses séquences d'animations complexes à exécuter. Examinons quelques-uns de ces scénarios possibles.
Échelonner les animations dans une liste
Un effet courant consiste à échelonner les animations de chaque élément d'une liste pour créer un effet de cascade. Vous pouvez y parvenir avec animation-delay ou transition-delay. Voici un exemple de ce à quoi ce CSS pourrait ressembler.
Animations parallèles
Vous pouvez appliquer plusieurs animations à un élément en même temps avec la propriété raccourcie animation. Chacune peut avoir ses propres durées et délais. Cela vous permet de composer des animations et de créer des effets complexes.
.target-element {
animation:
rotate 3s,
fade-in 2s;
}
Dans cet exemple, les animations rotate et fade-in se déclenchent en même temps, mais ont des durées différentes.
Animer les éléments d'une liste réordonnée
Les éléments d'une boucle @for sont retirés puis rajoutés, ce qui déclenche les animations utilisant @starting-styles pour les animations d'entrée. Vous pouvez aussi utiliser animate.enter pour obtenir le même comportement. Utilisez animate.leave pour animer les éléments lorsqu'ils sont retirés, comme dans l'exemple ci-dessous.
Contrôle des animations par programmation
Vous pouvez récupérer directement les animations d'un élément avec Element.getAnimations(). Cette méthode renvoie un tableau de toutes les Animation de cet élément. Vous pouvez utiliser l'API Animation pour faire bien plus que ce que permettait l'AnimationPlayer du package animations. Vous pouvez ensuite appeler cancel(), play(), pause(), reverse() et bien d'autres. Cette API native devrait vous fournir tout ce dont vous avez besoin pour contrôler vos animations.
En savoir plus sur les animations Angular
Ceci pourrait aussi vous intéresser :