Fermer

avril 27, 2021

Comprendre les fonctions d'accélération pour les animations et les transitions CSS


À propos de l'auteur

Adrian Bece est un développeur web fullstack polyvalent avec une vaste expérience du commerce électronique qui travaille actuellement chez PROTOTYP en tant que responsable technique. Il apprécie …
En savoir plus sur
Adrian

Les fonctions d'accélération peuvent modifier l'aspect et la convivialité d'une animation en affectant la vitesse ou la vitesse d'une animation. En tant qu'êtres humains, nous sommes habitués à un mouvement naturel et non linéaire. L'utilisation de ces fonctions d'accélération personnalisée dans les animations peut conduire à une meilleure impression sur les utilisateurs et à une expérience utilisateur plus agréable. Dans cet article, nous allons plonger profondément dans les fonctions d’assouplissement et voir comment nous pouvons les utiliser pour créer ces animations naturelles et époustouflantes.

Avez-vous déjà remarqué à quel point les animations sont fluides et agréables sur une image bien faite, projet professionnel? Je me souviens du site Web In Pieces où les animations sont utilisées non seulement pour la décoration, mais elles transmettent également le message sur les espèces en voie de disparition de manière percutante. Non seulement la conception et le style de l'animation sont beaux, mais ils coulent également bien et harmonieusement. C'est précisément ce flux en combinaison avec la conception et la présentation qui donne à l'animation un aspect magnifique et naturel. C'est la puissance des fonctions d'assouplissement, également appelées fonctions de synchronisation.

Lors de l'écriture des propriétés de transition et d'animation en CSS, nous optons généralement pour les fonctions d'assouplissement prédéfinies comme easy-out parce que c'est simple , ils ont l'air bien et fonctionnent bien dans la plupart des cas. Cependant, avoir une douzaine d'éléments ou plus sur une page avec une animation qui présente la même durée et les mêmes valeurs de fonction d'accélération peut rendre l'interface utilisateur un peu fade et monotone. Les humains réagissent mieux au mouvement naturel, donc rendre l'animation et la transition plus variées et naturelles se traduira par une meilleure expérience utilisateur.

Si nous revenons à l'exemple In Pieces et inspectons la feuille de style nous pouvons remarquer que diverses fonctions d'assouplissement personnalisées cubic-bezier sont utilisées en combinaison avec les fonctions de synchronisation prédéfinies linear et easy-in pour réaliser ce beau flux d'animation. Les animations n'auraient pas l'air aussi bonnes si seules des fonctions d'accélération prédéfinies étaient utilisées au lieu de fonctions d'accélération personnalisées. La vidéo suivante présente le site Web In Pieces avec toutes les fonctions d'accélération réglées sur facilité de sortie . Même s'il n'y a rien de mal avec les animations, remarquez à quel point elles ne sont pas aussi étonnantes ni excitantes que les animations originales.

Dans cet article, nous allons plonger dans les fonctions d'assouplissement CSS, les types de fonctions d'accélération, et comment créer des fonctions d'accélération personnalisées à l'aide de courbes de Bézier cubiques.

Under The Hood

Afin de mieux comprendre les fonctions d'accélération, nous devons prendre du recul et jeter un œil aux bases de l'animation en CSS.

L'animation est définie par les images clés qui déterminent l'apparence et le positionnement d'un élément en certains points. Les transitions CSS utilisent deux images clés (valeur de début et de fin), tandis que les animations CSS permettent un contrôle plus précis avec la règle @keyframes .

 Exemple de sortie d'animation (images clés) d'une boîte qui se déplace de 0px (0 % de sortie d'animation) à 500px (100% de sortie d'animation) de gauche à droite
Exemple de sortie d'animation (images clés) d'une boîte qui passe de 0px (0% de sortie d'animation) à 500px (100% de sortie d'animation) de gauche à droite. ( Grand aperçu )

La durée de l'animation détermine la durée pendant laquelle l'animation passe de la première image clé à la dernière. Le graphique suivant montre la connexion entre les images clés de l'animation et la durée.

 Exemple de sortie d'animation d'une boîte qui passe de 0px (0% de sortie d'animation) à 500px (100% de sortie d'animation) avec une durée de 1000 ms. Les deux points sont reliés par une ligne droite.
Exemple de sortie d'animation d'une boîte qui passe de 0px (0% de sortie d'animation) à 500px (100% de sortie d'animation) avec une durée de 1000ms. Les deux points sont reliés par une ligne droite. ( Grand aperçu )

L'animation peut progresser de plusieurs manières entre deux images clés. Par exemple, l'animation peut avoir une vitesse constante ou elle peut se déplacer rapidement au début et ralentir vers la fin, ou se déplacer lentement au début puis s'accélérer jusqu'à ce qu'elle atteigne la fin, etc. est défini avec les fonctions d'assouplissement (fonctions de temporisation) . Si l'on regarde le graphique précédent, la fonction d'accélération est représentée par la forme de la ligne reliant les deux points. Nous avons utilisé la fonction linéaire (ligne droite) pour l'exemple précédent, mais nous pouvons également utiliser une courbe pour relier les images clés.

 Exemple de sortie d'animation d'une boîte qui passe de 0px (première image clé) à 500px (dernière keyframe) d'une durée de 1000 ms. L'animation accélérera sur l'image clé de départ et décélérera près de la dernière image clé.
Exemple de sortie d'animation d'une boîte qui passe de 0 px (première image clé) à 500 px (dernière image clé) avec une durée de 1000 ms. L'animation accélérera sur l'image clé de départ et ralentira près de la dernière image clé. ( Grand aperçu )

Comme vous pouvez le voir, il existe de nombreuses options et variations possibles pour les fonctions d'accélération d'animation et nous les examinerons ensuite.

Types de fonctions d'accélération [19659003] Il existe trois principaux types de fonctions d'accélération qui peuvent être utilisées dans CSS:
  • Fonctions linéaires ( linear ),
  • Fonctions de Bézier cubique (inclut facilité easy-in easy-out et easy-in-out ),
  • Fonctions d'escalier ( marches ).

Fonctions linéaires

Nous avons couvert les fonctions linéaires dans l'un des exemples précédents, alors faisons un bref récapitulatif. Avec la fonction de synchronisation linéaire, l'animation parcourt les images clés à une vitesse constante. Comme vous le savez peut-être déjà, la fonction de synchronisation linéaire peut être facilement définie dans CSS en utilisant le mot-clé linear .

 Exemple de sortie d'animation d'une boîte qui passe de 0px (0% de sortie d'animation) à 500px (100% de sortie d'animation) avec une durée de 1000 ms.
Exemple de sortie d'animation d'une boîte qui passe de 0px (0% de sortie d'animation) à 500 px (100% de sortie d'animation) avec une durée de 1000ms. ( Grand aperçu )
 Exemple de sortie d'animation d'une boîte qui passe de 0px (première image clé) à 200 pixels (deuxième image clé) puis à 500 pixels (image clé finale) avec une durée de 1000 ms.
Exemple de la sortie d'animation d'une boîte qui passe de 0px (première image clé) à 200 px (deuxième image clé) puis à 500 px (image clé finale) avec une durée de 1000 ms. ( Grand aperçu )

Voir le stylo [Animation – linear] (https://codepen.io/smashingmag/pen/Bapbgxg) par Adrian Bece .

Voir le stylo Animation – linéaire par Adrian Bece .

Fonctions de Bézier cubique

Bien que les fonctions de synchronisation linéaire aient leurs cas d'utilisation, elles peuvent donner aux animations un aspect fade et artificiel si elles sont mal utilisées ou utilisé trop souvent. Comme nous l'avons vu dans l'exemple In Pieces les utilisateurs de réagissent mieux au mouvement naturel c'est-à-dire aux fonctions de synchronisation non linéaires qui peuvent accélérer et décélérer.

Courbes de Bézier sont couramment utilisés dans les graphiques vectoriels, les animations et la robotique pour créer facilement des courbes et des trajectoires fluides. En CSS, nous utilisons des courbes de Bézier définies par quatre points, appelées courbes Cubic Bézier .

Fonctions d'assouplissement prédéfinies couramment utilisées comme facilité facilité -in easy-out et easy-in-out appartiennent aux fonctions Cubic Bézier. Ils peuvent être utilisés comme un moyen rapide de définir une fonction d'accélération non linéaire. Même une fonction linéaire peut être définie en utilisant une fonction cubic-bezier .

Easing Function cubic-bezier Value Start Speed ​​ Middle Speed ​​ Ending Speed
linéaire cubique-bezier (0,0, 0,0, 1,0, 1,0) constante constante constante
facilité cubique-bezier (0,25, 0,1, 0,25, 1,0) accélération rapide accélération rapide accélération lente
facilité d'entrée cubic-bezier (0.42, 0, 1.0, 1.0) accélération lente accélération rapide pleine vitesse
facilité de sortie cubic-bezier (0, 0, 0,58, 1,0) pleine vitesse accélération lente accélération lente
facilité d'entrée-sortie cubique- bezier (0.42, 0, 0.58, 1.0) accélération lente pleine vitesse accélération rapide

Même si les valeurs prédéfinies fonctionnent bien dans de nombreux cas, savoir créer des custom Cubic Bézier fonctions g Vous avez encore plus de contrôle sur l'aspect et la convivialité de l'animation, ce qui peut rendre l'animation encore plus impressionnante et percutante.

Dans l'exemple suivant, j'ai édité les animations de l'exemple In Pieces pour utiliser un autre Fonction de Bézier cubique avec différentes valeurs. Vous pouvez voir à quel point l'animation est différente et ressentie avec cette fonction d'accélération.

 cubic-bezier (0, 1.2, 1, 0.2) 

Jetons un coup d'œil à la fonction cubic-bezier qui est utilisé pour définir les courbes de Bézier cubiques en CSS. La fonction cubique de Bézier est définie par quatre points (paires de coordonnées x et y), mais nous ne définissons que 2 points dans la fonction cubic-bezier . Pourquoi?

 Exemple de courbe de Bézier cubique pour l'animation CSS.
Exemple de courbe de Bézier cubique pour l'animation CSS. (Source de l'image: MDN Web docs ) ( Grand aperçu )

En effet, le premier (P0) et le dernier point (P3) sont fixés au début (état d'animation initial ) et la fin (état d'animation final) de la courbe, car l'animation doit se terminer sur une image clé spécifiée et dans la durée spécifiée. Avec les deux points restants (P1 et P2), nous pouvons affiner la courbe et l'assouplissement de la fonction, résultant avec une vitesse d'animation non linéaire.

 cubic-bezier (x1, y1, x2, y2) 

Les coordonnées X ( x1 et x2 ) représentent le rapport temporel et sont limitées aux valeurs comprises entre 0 et 1 (l'animation ne peut pas commencer plus tôt ou durer plus longtemps que spécifié), tandis que les coordonnées Y () ] y1 et y2 ) représentent la sortie de l'animation et leurs valeurs, qui sont généralement définies entre 0 et 1 mais ne sont pas limitées à cette plage. Nous pouvons utiliser les valeurs y1 et y2 qui sont en dehors de la plage 0 et 1 pour créer des effets de rebond.

 animation avec effets de rebond
( Grand aperçu )

Si l'animation est constituée de plusieurs images clés, définies dans la propriété CSS @keyframes la fonction d'accélération sera appliquée à chaque courbe entre les deux points. Si nous appliquons la fonction d'accélération à une animation avec 3 images clés, l'animation s'accélérera au début de la première image clé et ralentira près de la deuxième image clé et le même mouvement sera répété pour la paire suivante. d'images clés (deuxième image clé et dernière image clé).

Voir le stylo [Cubic-bezier functions 2 keyframes] (https://codepen.io/smashingmag/pen/zYNbVME) par Adrian Bece .

Voir le Pen Cubic-bezier fonctionne avec 2 images clés de Adrian Bece .

Remarquez comment la fonction d'accélération est répétée entre chaque paire d'images clés - première et deuxième images clés (première paire) et deuxième image clé et dernière image clé (deuxième paire). La durée de l'animation est la même pour les exemples précédents et suivants.

Voir le stylo [Cubic Bezier functions 3 keyframes] (https://codepen.io/smashingmag/pen/KKaEjbM) par Adrian Bece . [19659033] Voir le stylo Cubic Bézier fonctionne avec 3 images clés par Adrian Bece .

La ​​création de ces fonctions peut être une tâche complexe, vous n'aurez donc probablement pas à ajuster les coordonnées en devinant les paramètres cubic-bezier . Vous devrez utiliser un outil pour vous aider à déterminer ces nombres magiques afin de créer une fonction de synchronisation parfaitement adaptée à votre animation. Heureusement, il existe de nombreux navigateurs et outils en ligne pour nous aider. Nous en parlerons dans l'une des sections suivantes de cet article.

Fonctions d'escalier

Les fonctions d'escalier permettent à l'animation de passer d'un nombre spécifique d'images de manière non continue. Vous pouvez la considérer comme une animation «à cocher».

Par exemple, si nous jetons un coup d'œil à l'un des exemples précédents où une boîte passe de 0px à 500px et nous limitons les animations à 5 étapes, l'animation sautera entre les 5 images clés suivantes - positions 0px, 100px, 200px, 300px et 400px.

Nous pouvons facilement y parvenir avec la fonction steps en CSS.

 steps (number_of_frames) 
 steps (5 ) 

Cette fonction a une option supplémentaire pour contrôler quelles images clés sont incluses. Comme vous l'avez vu dans l'exemple précédent, l'animation d'une boîte passant de 0px à 500px avec 5 étapes se terminera par une position de 400px. Si nous voulons que l'animation commence à 100px et se termine à 500px, nous pouvons utiliser l'option jump term comme second argument. Le terme de saut affecte la façon dont les images clés seront sélectionnées dans la chronologie de l'animation.

 steps (number_of_frames, jump_term) 
 steps (5, jump-start) 

Les options de termes de saut suivantes peuvent être utilisées dans les étapes CSS fonction:

  • jump-start
    L'animation saute à droite du point de départ et le point de départ n'est pas visible t. D'après notre exemple, les images clés seront de 100 pixels, 200 pixels, 300 pixels, 400 pixels, 500 pixels.
  • jump-end
    Le dernier saut se produit lorsque l'animation se termine et n'est pas visible. À partir de notre exemple, les images clés seront 0px, 100px, 200px, 300px, 400px.
  • jump-both
    Le premier et le dernier saut se produiront au début et à la fin de l'animation, donc ils ne le feront pas Être visible. Les 5 sauts se produiront entre les points de départ et d'arrivée. D'après notre exemple, ces images clés seront 80px, 165px, 250px, 335px, 420px.
  • jump-none
    Le premier et le dernier saut seront visibles. D'après notre exemple, ces images clés seront 0px, 125px, 250px, 375px, 500px.
 Chronologie de l'animation de l'étape (5) d'une durée de 1 000 ms
Chronologie de l'animation de l'étape (5) d'une durée de 1 000 ms. ( Grand aperçu )

L'exemple suivant montre comment divers termes de saut affectent le comportement de l'animation. Différents termes de saut sont appliqués à l'animation en 5 étapes avec la même durée.

Voir le stylo [Step function] (https://codepen.io/smashingmag/pen/ZELPdPK) ​​par Adrian Bece .

Voir la fonction Pen Step de Adrian Bece .

Debugging Animations And Useful Tools

Comme nous l'avons vu dans l'exemple de Cubic Bézier, nous avons besoin d'une sorte de l'outil qui nous aidera à affiner les paramètres de la courbe de Bézier cubique afin que nous puissions obtenir l'aspect et la convivialité de l'animation que nous voulons.

Dans cette section, nous allons jeter un œil aux outils de navigation, aux sites Web et Des styles CSS qui devraient nous aider à faire exactement cela.

Outils de navigation

Les outils de développement de navigateur fournissent des fonctionnalités d'édition de fonctions facilitantes prêtes à l'emploi. Veuillez noter que seules les fonctions de Cubic Bézier sont disponibles pour l'édition. Ces outils offrent un aperçu rapide et simple de l'animation afin que le développeur puisse obtenir des commentaires instantanés et affiner la fonction d'accélération.

 Chrome, Safari, Firefox.
Chrome, Safari, Firefox. ( Grand aperçu )

Chrome Safari et Firefox proposent également un onglet Animations dédié dans les outils de développement qui offre une vue plus détaillée aperçu, y compris les propriétés de l'animation, la durée, la chronologie, les images clés, le délai, etc.

 Chrome, Safari, Firefox.
Chrome, Safari, Firefox. ( Grand aperçu )

Outils et sites Web utiles

Il existe de nombreuses ressources en ligne utiles et des préréglages d'assouplissement qui peuvent donner beaucoup plus de variété aux fonctions d'assouplissement. ] Aide-mémoire sur les fonctions d'assouplissement d'Andrey Sitnik et Ivan Solovev et Outil d'animation d'assouplissement CSS de Matthew Lein. Ces outils offrent un large éventail de préréglages que vous pouvez utiliser comme base pour votre fonction d'accélération, puis affiner la courbe pour l'adapter à la chronologie de votre animation.

 La feuille de triche des fonctions d'accélération contient 30 préréglages de fonction Cubic Bézier utiles
Fonctions Cheat Sheet contient 30 préréglages de fonctions utiles. ( Grand aperçu )

Animations et accessibilité

Lorsque vous travaillez avec des fonctions d’assouplissement et des animations en général, il est important de répondre aux exigences d’accessibilité. Certaines personnes préfèrent naviguer sur le Web avec un mouvement réduit, nous devrions donc fournir une solution de secours appropriée. Cela peut être facilement réalisé avec une requête multimédia de préférence à mouvement réduit largement prise en charge. Cette requête multimédia nous permet soit de supprimer l'animation, soit d'attribuer une animation différente en fonction des préférences de l'utilisateur.

 .animated-element {
  animation: / * Animation régulière * /;
}

@media (préfère le mouvement réduit) {
  .animated-element {
    / * Animation accessible avec mouvement réduit * /
  }
} 

J'ai modifié un exemple d'horloge analogique par Alvaro Montoro pour inclure une animation alternative pour les utilisateurs avec le drapeau prefers-reduction-motion .

] Voir le stylo [CSS Analog Clock with prefers reduced motion] (https://codepen.io/smashingmag/pen/QWdoXPN) par Adrian Bece .

Voir le stylo Horloge analogique CSS avec préfère un mouvement réduit par Adrian Bece .

Sur une animation par défaut, l'aiguille des secondes de l'horloge bouge constamment, ce qui peut causer des difficultés à certains utilisateurs. Nous pouvons facilement rendre l'animation beaucoup plus accessible en changeant la fonction de synchronisation de l'animation en étapes . Dans l'exemple suivant, les utilisateurs avec le drapeau prefers-reduction-motion afficheront une animation où le bras des secondes tiquera toutes les cinq secondes.

 @media (prefers-reduction-motion) {
  .arm.second {
    fonction de synchronisation d'animation: étapes (12);
  }
} 

Conclusion

Les fonctions d’assouplissement, ou fonctions de synchronisation, modifient l’aspect et la convivialité de l’animation en affectant la vitesse (vitesse) de l’animation. Les fonctions d'assouplissement nous permettent de créer des animations qui ressemblent à un mouvement naturel, ce qui peut se traduire par une UX améliorée et plus agréable et avoir une meilleure impression sur les utilisateurs. Nous avons vu comment nous pouvons utiliser des valeurs prédéfinies comme linear easy-out eas etc. pour ajouter rapidement une fonction de chronométrage et comment créez des fonctions d'accélération personnalisées avec la fonction cubic-bezier pour des animations plus impressionnantes et percutantes. Nous avons également couvert les fonctions d'escalier qui peuvent être utilisées pour créer une animation de «ticking» et qui sont rarement utilisées. Lors de la création d'animations, il est important de garder à l'esprit l'accessibilité et de proposer une alternative, des animations moins distrayantes avec moins de mouvement aux utilisateurs avec le jeu d'indicateurs prefers-reduction-motion .

Il existe de nombreux navigateurs et outils en ligne qui peuvent simplifier et rationaliser la création de fonctions d'accélération personnalisées, de sorte que la création d'animations avec un beau flux est plus facile que jamais. Si vous ne l'avez pas déjà fait, je vous recommande d'expérimenter diverses fonctions d'accélération et de créer votre propre bibliothèque de fonctions d'accélération.

Références

 Smashing Editorial "width =" 35 "height =" 46 "loading =" lazy "decoding =" async ( vf, yk, il)




Source link