25 exemples d'animation CSS sympas à recréer

Bien utilisée, l'animation CSS est un outil incroyablement utile et puissant. Il peut ajouter de l'intérêt ou de l'excitation créative, diriger l'œil de l'utilisateur, expliquer quelque chose de manière rapide et succincte et améliorer la convivialité. Pour cette raison, les dernières années ont vu de plus en plus d'animation sur les sites et dans les applications.
Dans cet article, nous rassemblons quelques-uns des exemples d'animation CSS les plus cool que nous ayons vus et vous montrons comment les recréer. Poursuivez votre lecture pour découvrir une gamme de didacticiels détaillés et d'effets inspirants (et des liens vers leur code) à explorer.
Qu'est-ce que l'animation CSS?
L'animation CSS est une méthode pour animer certains éléments HTML sans avoir à utiliser de processeur et de JavaScript ou Flash gourmands en mémoire. Il n'y a pas de limite au nombre ou à la fréquence des propriétés CSS qui peuvent être modifiées. Les animations CSS sont initiées en spécifiant des images clés pour l'animation: ces images clés contiennent les styles que l'élément aura.
Bien que cela puisse sembler limité en matière d'animation, CSS est en fait un outil vraiment puissant et capable de produire des animations 60fps magnifiquement fluides. «Fournir des animations réfléchies et fluides qui apportent une profondeur significative à votre site ne doit pas être difficile», déclare le développeur Web frontal Adam Kuhn. 'Les propriétés CSS modernes vous offrent désormais presque tous les outils dont vous aurez besoin pour créer des expériences mémorables pour vos utilisateurs.'
Les meilleures animations ont toujours leurs racines dans le classique de Disney 12 principes d'animation - vous en verrez plusieurs mentions tout au long de ces exemples d'animation CSS, il vaut donc la peine de consulter cet article avant de commencer. Vous voudrez peut-être également explorer notre tour d'horizon des vidéos musicales animées pour d'autres exemples et inspiration.
La règle d'or est que vos animations CSS ne doivent pas être exagérées - même un petit mouvement peut avoir un impact important, et trop peut être distrayant et irritant pour les utilisateurs. Voici nos exemples préférés et comment les recréer.
01. Effet de souris amusant
- Auteur: Donovan Hutchinson
C'est un effet amusant qui suit votre souris. Cela peut être utile lorsque vous souhaitez attirer l'attention sur un élément de votre page.
Nous avons besoin de très peu de HTML pour cet effet:
Tout d'abord, nous positionnons la démo et définissons la perspective de notre transformation 3D:
.demo { background-color: hsl(207, 9%, 19%); display: flex; align-items: center; justify-content: center; height: 100vh; width: 100%; } .perspective-container { perspective: 800px; }
Puis stylisez le div que nous voulons animer:
.card { background-image: url(https://media.giphy.com/media/sIIhZliB2McAo/giphy.gif); background-size: cover; box-shadow: 0 0 140px 10px rgba(0,0,0,.5); position: relative; height: 300px; width: 500px; overflow: hidden; /* Try removing this to see how the sheen works! */ --sheenX: 0; /* Set these with JavaScript */ --sheenY: 0; }
Ici, nous définissons un arrière-plan, puis nous définissons débordement à caché afin que nous puissions ajouter un éclat effet plus tard. Nous définissons également variables css , sheenX et lustré .
Ces variables de brillance aideront à positionner l'effet de brillance. Nous les utilisons dans nos cartes après pseudo-élément:
.card::after { content: ''; position: absolute; top: -400px; right: -400px; bottom: -400px; left: -400px; background: linear-gradient(217deg, rgba(255,255,255,0), rgba(255,255,255,0) 35%, rgba(255,255,255,0.25) 45%, rgba(255,255,255,.25) 50%, rgba(255,255,255,0) 60%, rgba(255,255,255,0) 100%); transform: translateX(var(--sheenX)) translateY(var(--sheenY)); }
Ici, nous nous assurons que le pseudo-élément est plus grand que le conteneur. Cela nous donnera quelque chose à glisser sur le dessus carte utilisant transformer .
Le transformer property utilise les variables CSS que nous avons définies précédemment. Nous allons définir ceux avec JavaScript. Configurons le JavaScript pour écouter d'abord les événements de souris:
document.onmousemove = handleMouseMove;
Nous avons maintenant besoin d'un handleMouseMove fonction à gérer à la souris :
function handleMouseMove(event) { const height = window.innerHeight; const width = window.innerWidth; // Creates angles of (-20, -20) (left, bottom) and (20, 20) (right, top) const yAxisDegree = event.pageX / width * 40 - 20; const xAxisDegree = event.pageY / height * -1 * 40 + 20; target.style.transform = `rotateY(${yAxisDegree}deg) rotateX(${xAxisDegree}deg)`; // Set the sheen position setSheenPosition(event.pageX / width, event.pageY / width); }
Notre fonction prend la hauteur et la largeur de la fenêtre et crée un angle sur les axes X et Y. Nous les définissons ensuite sur transformer le style de notre carte . Cela donne à la carte un angle basé sur la souris!
Nous appelons ensuite une fonction pour définir la position du pseudo-élément:
function setSheenPosition(xRatio, yRatio) { // This creates a 'distance' up to 400px each direction to offset the sheen const xOffset = 1 - (xRatio - 0.5) * 800; const yOffset = 1 - (yRatio - 0.5) * 800; target.style.setProperty('--sheenX', `${xOffset}px`) target.style.setProperty('--sheenY', `${yOffset}px`) }
Notre pseudo-élément est plus esthétique lorsqu'il se déplace dans la direction opposée à la souris. Pour y parvenir, nous créons un nombre entre -0,5 et 0,5 qui change dans la direction opposée en calculant le ratio par -1.
Nous multiplions ce nombre par 800 car nous voulons qu'il évolue jusqu'à un maximum de 400px , qui est à quelle distance nous définissons le éclat pseudo-élément en dehors du carte .
Enfin, nous définissons ces valeurs de décalage sur nos propriétés de variable CSS, et le moteur de rendu du navigateur s'occupe du reste.
Nous avons maintenant une carte qui tourne pour faire face à notre souris tandis que l'effet de brillance se déplace dans la direction opposée sur le dessus. Cela crée un bel effet accrocheur.
02. La grande révélation
- Auteur: Adam Kuhn
Les effets de révélation de contenu animé semblent être très populaires en ce moment, et utilisés correctement, ils peuvent capturer l'attention de l'utilisateur et engager votre public. Vous avez déjà vu cela: un bloc de couleur se développe d'un côté ou de l'autre horizontalement ou verticalement, puis se retire vers le côté opposé, révélant cette fois du texte ou une image en dessous. C’est un concept qui peut sembler délicat mais qui ne repose en réalité que sur quelques éléments.
Tout d'abord, nous allons configurer notre positionnement d'élément ( téléchargez le code complet ici ) - définissez-le comme relatif (seul statique échouera dans ce cas). Dans les cas de texte, il est préférable d'autoriser la hauteur et la largeur automatiques, même si un peu de remplissage ne fait pas de mal. Nous allons également définir une origine de transformation, dans le cas de l'élément parent, nous voulons utiliser la position de départ. Étant donné que nous voulons que l'élément soit masqué au départ, nous utiliserons une transformation d'échelle le long de l'axe approprié pour le réduire.
Ensuite, un pseudo élément pour masquer notre parent, définissant l'origine de la transformation sur l'option opposée. Enfin, enchaînez les animations, en utilisant soit les fonctions de synchronisation, soit les retards pour les compenser.
Notez que nous avons décalé les animations de l'élément parent et du pseudo-élément avec un délai indiquant à la zone qui masque notre texte de ne le révéler qu'une fois que l'élément lui-même a été entièrement mis à l'échelle. Découvrez le Codepen ci-dessous.
03. Décaler sur
- Auteur: Adam Kuhn
Une fois que vous avez commencé à accumuler une bibliothèque décente de divers extraits d'accélération, il est temps de chercher d'autres moyens d'améliorer la profondeur de vos animations, et l'un des meilleurs moyens consiste à compenser vos éléments animés.
Il est trop courant qu'un déclencheur JavaScript soit configuré pour lancer un ensemble d'animations en fonction de la position de défilement, uniquement pour trouver tous les éléments se déplaçant efficacement en tandem. Heureusement, CSS lui-même fournit une propriété simple qui peut faire (ou casser) votre expérience animée: retard d'animation .
Disons, par exemple, que nous avons une grille d'images que nous voulons animer dans un cadre lorsque l'utilisateur fait défiler. Il existe plusieurs façons de déclencher cela, en ajoutant très probablement des classes aux éléments lorsqu'ils entrent dans la fenêtre. Cependant, cela peut être assez lourd pour le navigateur et peut être évité en ajoutant simplement une seule classe à un élément conteneur et en définissant des délais d'animation sur les éléments enfants.
C'est un cas d'utilisation particulièrement intéressant pour les préprocesseurs comme SCSS ou LESS, qui nous permettent d'utiliser un @pour boucle pour parcourir chaque élément.
#parent{ .child{ animation: animationName 1.5s ease-in-out 1 forwards; @for $i from 1 through 20{ &:nth-of-type(#{$i}){ animation-delay:#{$i/10}s; } } } }
Ici, vous verrez avec SCSS, nous sommes en mesure de parcourir chaque : nième de type sélecteur, puis appliquez un délai d'animation en fonction de la valeur numérique de chaque élément enfant. Dans ce cas, vous remarquerez que nous divisons notre temps pour réduire chaque incrément à une fraction de seconde. Bien que la compensation de vos éléments animés puisse donner de l'émotion à votre animation, trop de retard peut la rendre décousue. Découvrez ce CodePen ci-dessous.
04. Squigglevision
- Auteur: Adam Kuhn
Les filtres SVG offrent un excellent moyen d'obtenir une sensation naturelle et dessinée à la main et d'échapper à certaines des contraintes de rendu à plat du CSS seul. Les animer peut encore améliorer l'effet.
Exemple concret: Squigglevision. Oui, ce n’est pas un terme technique connu de la plupart des animateurs, mais vous l’avez sûrement vu utilisé dans les dessins animés. L'idée est que les bords de ces éléments animés ne sont pas seulement quelque peu irréguliers et grossièrement taillés, mais que ces bords rugueux varient rapidement, image par image, ce qui leur donne l'impression d'avoir été extraits des pages d'un carnet de croquis et amenés à la vie.
Pour obtenir cet effet, nous pouvons inclure un SVG sur notre page avec plusieurs filtres et de légères variations de niveaux de turbulence pour chacun. Ensuite, nous allons configurer notre chronologie d'animation, en appelant chaque filtre dans sa propre image clé. Il est important de jouer avec les durées de chronométrage, car nous prévoyons que l’animation sera «nerveuse», mais ne voulez pas qu’elle soit trop lente au point de se sentir décousue ou si rapide au point de paraître folle.
À cette fin, il est important de noter que CSS n'a pas la capacité de passer en douceur entre les filtres SVG car il n'y a aucun moyen d'accéder à des propriétés telles que la turbulence et l'échelle, de sorte que ces types d'animations doivent toujours être saccadés.
05. Lettrage tumbling
- Comme vu sur: Jeu de l'année
- Auteur: Leon marron
Google's Game of the Year propose une animation CSS ludique sur la page d'accueil, avec les mots du titre tombant et se cognant les uns dans les autres. Voici comment cela a été fait.
La première étape consiste à définir le document de la page Web avec HTML. Il se compose du conteneur de document HTML, qui stocke une section d'en-tête et de corps. Alors que la section head est utilisée pour charger les ressources CSS et JavaScript externes, le corps est utilisé pour stocker le contenu de la page.
Off Kilter Text Animation The Animated Title
The Animated Title
The Animated Title
Le contenu de la page se compose de trois balises de titre h1 qui montreront les différentes variations de l'effet d'animation. Bien que n'importe quel texte puisse être inséré dans ces balises, leur animation est définie par les noms dans l'attribut de classe. Les paramètres de présentation et d'animation de ces noms de classes seront définis ultérieurement dans le CSS.
Ensuite, créez un nouveau fichier appelé ' code.js ». Nous voulons trouver tous les éléments de page avec le Animé classe et créez un déployer liste représentant chaque mot du texte intérieur. Le délai d'animation initial est également défini dans cette étape. Le contenu de la page n'est pas disponible tant que la page n'est pas entièrement chargée, ce code est donc placé dans la fenêtre charge écouteur d'événements.
Le contenu des mots des éléments d'animation doit être contenu dans un portée élément. Pour ce faire, le contenu HTML existant est remis à blanc, puis une boucle est utilisée pour faire du mot dans la liste des «mots» identifiés un élément span. De plus, un animationDélai style est appliqué - calculé par rapport au délai initial (spécifié ci-dessous) et à la position d'index du mot.
window.addEventListener('load', function(){ var delay = 2; var nodes = document.querySelectorAll ('.animate'); for(var i=0; iCréez un nouveau fichier appelé styles.css . Nous allons maintenant définir les règles de présentation qui feront partie de chaque élément mot de l'animation, contrôlées par leur balise span. L'affichage sous forme de bloc, combiné à l'alignement du texte centré, fera apparaître chaque mot sur une ligne distincte alignée horizontalement au milieu de son conteneur. Le positionnement relatif servira à animer par rapport à son flux de texte positionner.
.animate span{ display: block; position: relative; text-align: center; }
Les éléments d'animation qui ont la classe avant et arrière ont une animation spécifique qui leur est appliquée. Cette étape définit l'animation à appliquer aux éléments span dont le conteneur parent a à la fois le Animé et en arrière ou les attaquants classer.
Notez qu'il n'y a pas d'espace entre les Animé et en arrière référence de classe, ce qui signifie que l'élément parent doit avoir les deux.
.animate.backwards > span{ animation: animateBackwards 1s ease-in-out forwards; } .animate.forwards > span{ animation: animateForwards 1s ease-in-out forwards; }
L'animation mixte est définie en utilisant les mêmes paramètres que ceux utilisés pour les animations avant et arrière. Au lieu d'appliquer les animations à chaque enfant du parent, le nième enfant Le sélecteur est utilisé pour appliquer des paramètres d'animation alternés. L'animation vers l'arrière est appliquée à chaque même -number enfant, tandis que l'animation avant est appliquée à chaque impair -nombre d'enfant.
.animate.mixed > span:nth-child(even){ animation: animateBackwards 1s ease-in-out forwards; } .animate.mixed > span:nth-child(odd){ animation: animateForwards 1s ease-in-out forwards; }
Les animations que nous venons de créer sont faites avec une initiale ' de 'position de départ, sans position verticale ni réglage de rotation. Le ' à 'position est l'état final de l'animation, qui définit les éléments avec une position verticale et un état de rotation ajustés. Des paramètres de fin légèrement différents sont utilisés pour les deux animations afin d'éviter que le texte ne devienne illisible en raison du chevauchement des animations mixtes.
@keyframes animateForwards { from { top: 0; transform: rotate(0deg); } to { top: .9em; transform: rotate(-15deg); } } @keyframes animateBackwards { from { top: 0; transform: rotate(0deg); } to { top: 1em; transform: rotate(25deg); } }
06. Flip book
- Auteur: Adam Kuhn
Lors de l'animation avec CSS, une approche très simple est parfois nécessaire. Et il existe peu de méthodes d'animation plus simples que le flip book. Utilisant pas () en tant que fonction de chronométrage, nous sommes en mesure de reproduire cet effet. Bien que cela puisse sembler saccadé et contredire directement notre mission de maintenir la fluidité, avec le bon rythme, cela peut sembler tout aussi parfaitement organique.
Alors, comment ça marche? Nous définissons notre fonction d’assouplissement de l’animation avec seulement quelques paramètres supplémentaires - indiquant à notre animation le nombre d’étapes nécessaires et à quel point au cours de la première étape nous souhaitons commencer (début Fin) - ressemblant un peu à ça, par exemple étapes (10, démarrer) .
Dans nos images clés, nous pouvons maintenant désigner un point final pour notre animation: pour cet exemple, supposons que notre animation dure 10 secondes et que nous utilisons 10 étapes. Dans ce cas, chaque étape durera une seconde, passant immédiatement à l'image suivante d'une seconde sans transition entre les deux.
Encore une fois, cela semble aller à l'encontre de la fluidité, mais c'est ici que les animations en escalier peuvent vraiment briller. Nous pouvons parcourir une feuille de sprite de manière incrémentielle et animer image par image comme un flip book. En définissant des images de taille égale mais en les compilant sur une seule image horizontale (ou verticale), nous pouvons définir cette image comme arrière-plan d'élément et définir une position d'arrière-plan en pixels ou en pourcentage comme point final de notre animation, permettant une seule étape pour chaque Cadre. La feuille de sprite se déplacera ensuite et remplira l'élément image par image avec une nouvelle image d'arrière-plan en fonction de sa position.
Prenons un exemple. Dans ce cas, des ensembles de jambes animées sont ajoutés à certains caractères de texte. Tout d'abord, nous allons définir le nom, la durée, le nombre de pas, la position de départ et le nombre d'itérations de notre animation:
animation:runner 0.75s steps(32, end) infinite;
Encore une fois, notez que la durée est relativement rapide à moins d'une seconde complète pour 32 images au total. Ensuite, nous définirons nos images clés:
@keyframes runner{ from{ background-position:0px 50%;} to{ background-position:- 1280px 50%; }}
Notez que le positionnement vertical de l'image est cohérent partout, ce qui nous indique que les sprites sont étirés horizontalement sur l'image, soit 1280px en largeur totale. Comme nous avons défini 32 images au total pour cette image, nous pouvons en déduire que chaque image doit avoir une largeur de 40 pixels. Découvrez ce Codepen ci-dessous.
Il est important de noter qu’une feuille de sprite volumineuse peut potentiellement nuire considérablement aux performances. Veillez donc à dimensionner et compresser les images. Avec une feuille de sprite bien conçue et une durée d'animation appropriée, vous disposez désormais d'une animation fluide capable de transmettre des mouvements complexes.
07. Faire des bulles
- Comme vu sur: 7 UP
- Voir le code
- Auteur: Steven Roberts
L'animation de bulles CSS qui figure sur 7UP est un bel exemple de transfert d'un thème de marque dans la conception de site Web. L'animation se compose de quelques éléments: le «dessin» SVG des bulles puis deux animations appliquées à chaque bulle.
La première animation modifie l'opacité de la bulle et la déplace verticalement dans la zone de visualisation; le second crée l'effet de vacillement pour plus de réalisme. Les décalages sont gérés en ciblant chaque bulle et en appliquant une durée et un délai d'animation différents.
Afin de créer nos bulles, nous utiliserons SVG . Dans notre SVG, nous créons deux couches de bulles: une pour les plus grosses bulles et une pour les plus petites. À l'intérieur du SVG, nous positionnons toutes nos bulles en bas de la zone de visualisation.
... ...
Afin d'appliquer deux animations distinctes à nos SVG, utilisant toutes deux la propriété transform, nous devons appliquer les animations à des éléments séparés. Le élément en SVG peut être utilisé un peu comme un div en HTML; nous devons envelopper chacune de nos bulles (qui sont déjà dans un groupe) dans une balise de groupe.
CSS a un moteur d'animation puissant et un code vraiment simple afin de produire des animations complexes. Nous allons commencer par déplacer les bulles vers le haut de l’écran et modifier leur opacité afin de les atténuer au début et à la fin de l’animation.
@keyframes up { 0% { opacity: 0; } 10%, 90% { opacity: 1; } 100% { opacity: 0; transform: translateY(-1024px); } }
Afin de créer un effet d'oscillation, nous devons simplement déplacer (ou traduire) la bulle vers la gauche et la droite, juste la bonne quantité - trop de choses donneront à l'animation un aspect trop décalé et déconnecté, tandis que trop peu passera la plupart du temps inaperçu. L'expérimentation est essentielle lorsque vous travaillez avec une animation.
@keyframes wobble { 33% { transform: translateX(-50px); } 66% { transform: translateX(50px); } }
Afin d'appliquer l'animation à nos bulles, nous utiliserons les groupes que nous avons utilisés précédemment et l'aide de nième de type pour identifier chaque groupe de bulles individuellement. Nous commençons par appliquer une valeur d'opacité aux bulles et changera propriété afin d'utiliser l'accélération matérielle.
.bubbles-large > g { opacity: 0; will-change: transform, opacity;} .bubbles-large g:nth-of-type(1) {...} ... .bubbles-small g:nth-of-type(10) {...}
Nous voulons garder tous les temps et délais d'animation à quelques secondes d'intervalle et les configurer pour qu'ils se répètent à l'infini. Enfin, nous appliquons le facilité d'entrée fonction de synchronisation de notre animation wobble pour lui donner un aspect un peu plus naturel.
.bubbles-large g:nth-of-type(1) { animation: up 6.5s infinite; } .bubbles-large g:nth-of-type(1) circle { animation: wobble 3s infinite ease-in-out; } ... bubbles-small g:nth-of-type(9) circle { animation: wobble 3s 275ms infinite ease-in-out; } .bubbles-small g:nth-of-type(10) { animation: up 6s 900ms infinite;}
08. Souris à défilement
- Comme vu sur: Formation balte
- Voir le code
- Auteur: Steven Roberts
Une animation subtile de la souris à défilement peut donner une direction à l'utilisateur lorsqu'il atterrit pour la première fois sur un site Web. Bien que cela puisse être accompli en utilisant des éléments et des propriétés HTML, nous allons utiliser SVG car cela est plus adapté au dessin.
À l'intérieur de notre SVG, nous avons besoin d'un rectangle avec des coins arrondis et un cercle pour l'élément que nous allons animer, en utilisant SVG, nous pouvons mettre à l'échelle l'icône à n'importe quelle taille dont nous avons besoin.
Maintenant que nous avons créé notre SVG, nous devons appliquer des styles simples afin de contrôler la taille et la position de l'icône dans notre conteneur. Nous avons enroulé un lien autour du SVG de la souris et l'avons positionné au bas de l'écran.
.scroll-link { position: absolute; bottom: 1rem; left: 50%; transform: translateX(-50%); } .mouse { max-width: 2.5rem; width: 100%; height: auto; }
Ensuite, nous allons créer notre animation. À 0 et 20% du parcours de notre animation, nous voulons définir l'état de notre élément lorsqu'il commence. En le réglant à 20% du chemin, il restera immobile pendant une partie du temps lorsqu'il sera répété à l'infini.
@keyframes scroll { 0%, 20% { transform: translateY(0) scaleY(1); } }
Nous devons ajouter le point de départ de l'opacité, puis transformer à la fois la position Y et l'échelle verticale à la marque 100%, la fin de notre animation. La dernière chose que nous devons faire est de supprimer l'opacité afin de faire disparaître notre cercle.
@keyframes scroll { ... 10% { opacity: 1; } 100% { transform: translateY(36px) scaleY(2); opacity: 0.01; } }
Enfin, nous appliquons l’animation au cercle, ainsi que la propriété ‘transform-origin’ et la changera propriété pour permettre l'accélération matérielle. Les propriétés d'animation sont assez explicites. Le cubique-bezier la fonction de synchronisation est utilisée pour d'abord tirer le cercle en arrière avant de le déposer au bas de la forme de notre souris; cela ajoute une sensation ludique à l'animation.
.scroll { animation-name: scroll; animation-duration: 1.5s; animation-timing-function: cubic-bezier(0.650, -0.550, 0.250, 1.500); animation-iteration-count: infinite; transform-origin: 50% 20.5px; will-change: transform; }
09. Écriture animée

Cliquez pour voir l'animation en action - Comme vu sur: Jardin huit
- Afficher le code du chemins et texte
- Auteur: Steven Roberts
Le site Web Garden Eight utilise une technique d'animation courante dans laquelle le texte semble être écrit. Pour obtenir l'effet, nous nous tournons vers SVG. Pour commencer, nous allons créer le SVG. Il existe deux approches ici: convertir le texte en chemins pour les animer ou utiliser du texte SVG. Les deux approches ont leurs avantages et leurs inconvénients.
Commencez par créer notre animation d'images clés. La seule fonction dont nous avons besoin est de changer le stroke-dashoffset . Maintenant que nous avons créé notre animation, nous devons appliquer les valeurs à partir desquelles nous voulons animer. Nous définissons le accident vasculaire cérébral-dasharray , ce qui créera des espaces dans le trait. Nous voulons définir notre trait sur une valeur suffisamment grande pour couvrir tout l'élément, en compensant finalement le tiret par la longueur du trait.
La magie se produit lorsque nous appliquons notre animation. En animant le décalage, nous faisons apparaître le contour - créant un effet de dessin. Nous voulons que les éléments soient dessinés un à la fois, avec un certain chevauchement entre la fin du dessin d'un élément et le début du dessin du suivant. Pour y parvenir, nous nous tournons vers Toupet / SCSS et nième de type pour retarder chaque lettre de la moitié de la longueur de l'animation, multipliée par la position de cette lettre particulière.
10. Oiseaux volants
- Comme vu sur: Fournier Père et Fils
- Afficher le code d'un seul oiseau ou la troupeau entier
- Auteur: Steven Roberts
Nous commençons par des lignes vectorielles complètement droites, dessinant chaque image de notre animation, représentant l'oiseau dans un état de vol différent. Nous manipulons ensuite les points vectoriels et arrondissons les lignes et les arêtes. Enfin, nous mettons chaque cadre dans une boîte de taille égale et les plaçons côte à côte. Exportez le fichier au format SVG.
La configuration HTML est vraiment simple. Nous avons juste besoin d'envelopper chaque oiseau dans un conteneur afin d'appliquer plusieurs animations - une pour faire voler l'oiseau et l'autre pour le déplacer sur l'écran.
Nous appliquons notre SVG d'oiseau comme arrière-plan à notre div d'oiseau et choisissons la taille que nous voulons que chaque cadre soit. Nous utilisons la largeur pour calculer approximativement la nouvelle position d'arrière-plan. Le SVG a 10 cellules, nous multiplions donc notre largeur par 10, puis modifions légèrement le nombre jusqu'à ce qu'il semble correct.
.bird { background-image: url('bird.svg'); background-size: auto 100%; width: 88px; height: 125px; will-change: background-position; } @keyframes fly-cycle { 100% { background-position: -900px 0; } }
L'animation CSS a quelques astuces dont vous n'êtes peut-être pas au courant. Nous pouvons utiliser le fonction de synchronisation d'animation pour afficher l'image par étapes - un peu comme feuilleter les pages d'un cahier pour faire allusion à une animation.
animation-name: fly-cycle; animation-timing-function: steps(10); animation-iteration-count: infinite; animation-duration: 1s; animation-delay: -0.5s;
Maintenant que nous avons créé notre cycle de mouches, notre oiseau bat actuellement des ailes mais ne va nulle part. Afin de la déplacer sur l'écran, nous créons une autre animation d'image clé. Cette animation déplacera l'oiseau sur l'écran horizontalement tout en changeant également la position verticale et l'échelle pour permettre à l'oiseau de se déplacer de manière plus réaliste.
Une fois que nous avons créé nos animations, nous devons simplement les appliquer. Nous pouvons créer plusieurs copies de notre oiseau et appliquer différents temps et délais d'animation.
.bird--one { animation-duration: 1s; animation-delay: -0.5s; } .bird--two { animation-duration: 0.9s; animation-delay: -0.75s; }
11. Traversez mon hamburger
- Comme vu sur: Meilleure agence de marque
- Afficher le code du travées et SVG
- Auteur: Steven Roberts
Cette animation est utilisée partout sur le Web, transformant trois lignes en une croix ou une icône de fermeture. Jusqu'à récemment, la majorité des implémentations ont été réalisées à l'aide d'éléments HTML, mais en réalité SVG est beaucoup plus adapté à ce type d'animation - il n'est plus nécessaire de gonfler le code de vos boutons avec plusieurs étendues.
En raison de la nature animable et du SVG et de son DOM navigable, le code pour accomplir l'animation ou la transition change très peu - la technique est la même.
Nous commençons par créer quatre éléments, que ce soit à l'intérieur d'un div ou des chemins à l'intérieur d'un SVG. Si nous utilisons des étendues, nous devons utiliser CSS pour les positionner à l'intérieur du div; si nous utilisons SVG, cela est déjà pris en charge. Nous voulons positionner les lignes 2 et 3 au centre - l'une sur l'autre - tout en espaçant les lignes 1 et 4 uniformément au-dessus et en dessous, en veillant à centrer l'origine de la transformation.
Nous allons nous appuyer sur la transition de deux propriétés: l'opacité et la rotation. Tout d'abord, nous voulons atténuer les lignes 1 et 4, que nous pouvons cibler à l'aide de la : nième enfant sélecteur.
.menu-icon.is-active {element-type}:nth-child(1), .menu-icon.is-active {element-type}:nth-child(4) { opacity: 0; }
La seule chose à faire est de cibler les deux lignes médianes et de les faire pivoter de 45 degrés dans des directions opposées.
.menu-icon.is-active {element-type}:nth-child(2) { transform: rotate(45deg); } .menu-icon.is-active {element-type}:nth-child(3) { transform: rotate(-45deg); }
12. Cercles de chasse
- Comme vu sur: Meilleure agence de marque
- Voir le code
- Auteur: Steven Roberts
L'icône de chargement animée est composée de quatre cercles. Les cercles n'ont pas de remplissage, mais ont des couleurs de trait alternées.
Dans notre CSS, nous pouvons définir des propriétés de base pour tous nos cercles, puis utiliser le : nième de type sélecteur pour appliquer un autre accident vasculaire cérébral-dasharray à chaque cercle.
circle:nth-of-type(1) { stroke-dasharray: 550; } circle:nth-of-type(2) { stroke-dasharray: 500; } circle:nth-of-type(3) { stroke-dasharray: 450;} circle:nth-of-type(4) { stroke-dasharray: 300; }
Ensuite, nous devons créer notre animation d'images clés. Notre animation est vraiment simple: il suffit de faire pivoter le cercle de 360 degrés. En plaçant notre transformation à 50% de l'animation, le cercle retournera également à sa position d'origine.
@keyframes preloader { 50% { transform: rotate(360deg); } }
Une fois notre animation créée, il ne nous reste plus qu'à l'appliquer à nos cercles. Nous définissons le nom de l'animation; durée; nombre d'itérations et fonction de synchronisation. Le 'easy-in-out' donnera à l'animation une sensation plus ludique.
animation-name: preloader; animation-duration: 3s; animation-iteration-count: infinite; animation-timing-function: ease-in-out;
Pour le moment, nous avons notre chargeur, mais tous les éléments tournent ensemble en même temps. Pour résoudre ce problème, nous appliquerons des délais. Nous allons créer nos retards en utilisant une boucle Sass for.
@for $i from 1 through 4 { &:nth-of-type(#{$i}) { animation-delay: #{$i * 0.15}s; } }
En raison des retards, notre cercle s'anime maintenant à son tour, créant l'illusion des cercles se poursuivant. Le seul problème avec cela est que lorsque la page se charge pour la première fois, les cercles sont statiques, puis ils commencent à se déplacer, un à la fois. Nous pouvons obtenir le même effet de décalage, mais arrêter la pause indésirable dans notre animation en réglant simplement les retards sur une valeur négative.
animation-delay: -#{$i * 0.15}s;
Page suivante: Plus d'exemples d'animation CSS à explorer
- 1
- deux
Page actuelle: Tutoriels d'animation CSS
Page suivante Effets d'animation CSS