


Le?ons apprises de soixante jours de zombies réanimants avec du CSS codé à la main
Apr 02, 2025 pm 06:20 PMDix le?ons tirées de 60 jours d'animation de zombie CSS pure
AVERTISSEMENT: AVERTISSEMENT à éLéMENTAGE à LA PLUSE, un grand nombre de zombies et de contenu parodie arrivent! Cet article partagera quelques conseils pratiques, mais les exemples sont presque tous liés aux zombies et aux blagues dr?les. Veuillez être préparé mentalement.
Je vais créer un lien vers des travaux d'animation individuelle dans la discussion, mais si vous voulez conna?tre l'intégralité du projet, visitez l'Institut Undead pour voir la série d'animation 60 jours. Le projet a commencé le 1er juin 2020 et s'est terminé le 1er ao?t, ce qui co?ncide avec la date de publication d'un livre que j'ai écrit sur l'animation, l'humour et les zombies de CSS - car il est évident que les zombies détruiront le monde sans utiliser vos compétences Web pour arrêter la fin du monde. Rien ne peut mieux frapper les zombies que les éléments HTML dynamiques!
J'ai fait des règles pour moi tout au long du projet:
- Tout le code CSS doit être écrit manuellement. (Je suis juste un masochiste.)
- Toutes les animations sont déclenchées par l'utilisateur. (Je déteste les animations qui sont à mi-chemin.)
- Utilisez JavaScript le moins possible et ne l'utilisez jamais pour l'animation. (Je n'ai utilisé JavaScript qu'une seule fois dans l'animation finale, c'était pour démarrer l'audio. Je ne suis pas contre JavaScript, c'est juste qu'il n'est pas nécessaire ici.)
Le?on 1: 80 jours sont trop longs.
Le titre ne dit-il pas ?60 jours?? Oui, mais mon objectif initial était de 80 jours, et lorsque le premier jour est arrivé, j'avais moins de 20 animations prêtes, et le temps de production moyen pour chaque animation était de 3 jours, j'ai été paniqué et changé à 60 jours. Cela m'a donné 20 jours supplémentaires de temps de préparation et réduit 20 ?uvres d'animation.
Le?on 1A: 60 jours sont encore trop longs.
C'est en effet un défi d'accomplir tant d'animation avec un temps limité, une créativité et des compétences artistiques plus limitées. Bien que j'avais pensé à raccourcir à 30 jours, je suis content de ne pas avoir fait ?a. 60 jours m'ont permis de traverser moi-même et de mieux comprendre comment les animations CSS - et le CSS lui-même - travaille. Je suis également fier de la plupart des ?uvres que j'ai terminées plus tard parce que mes compétences se sont améliorées, je dois être plus innovant et réfléchir plus profondément à la fa?on de rendre le travail plus intéressant. Une fois que vous manqueriez de toutes les options simples, le vrai travail et les meilleurs résultats commenceront. (Oui, cela finit par avoir 62 jours, car j'ai commencé le 1er juin et je voulais terminer l'animation finale le 1er ao?t. Cela semble gênant à partir du 3 juin)
Donc, vraie le?on 1: mettez-vous au défi .
Le?on 2: L'animation interactive est difficile à produire et la conception réactive est encore plus difficile.
Si vous voulez qu'un élément vole sur l'écran et se connecte avec un autre élément, ou semblez initier le mouvement d'un autre élément, vous devez utiliser toutes les unités standard et inflexibles ou toutes les unités flexibles.
Trois variables déterminent le temps et la position d'un élément d'animation pendant tout processus d'animation: durée, de la vitesse et de la distance. La durée de l'animation est définie dans la propriété animation
et ne peut pas être modifiée en fonction de la taille de l'écran. La fonction du temps d'animation détermine la vitesse; La taille de l'écran ne peut pas changer cela. Par conséquent, si la distance varie avec la taille de l'écran, il y aura des écarts de synchronisation, sauf pour la largeur et la hauteur de l'écran spécifiques.
Découvrez le réservoir! Exécutez des animations sur des écrans larges et étroits. Bien que je l'ai prévu de très près, si vous comparez, vous constaterez que lorsque le dernier zombie tombe, la position du réservoir par rapport au zombie est différente.
Pour éviter ces problèmes de temps, vous pouvez utiliser des unités fixes et un nombre plus grand, tel que 2000 ou 5000 pixels ou plus, afin que l'animation puisse couvrir la largeur (ou la hauteur) de tous les écrans, sauf l'affichage maximal.
Le?on 3: Si vous voulez des animations réactives, mettez tout dans (l'une d'entre elles) des unités de fenêtre.
Prendre une solution de compromis pour les proportions unitaires (par exemple, le réglage de la largeur et de la hauteur dans les pixels, mais la position de réglage et le mouvement dans les unités de la fenêtre) peut conduire à des résultats imprévisibles. N'utilisez pas non plus vw
et vh
en même temps, mais utilisez l'une d'elles; qui est la direction principale. Un mélange d'unités vh
et vw
rendra votre animation "bizarre", qui, je crois, est un terme professionnel.
Par exemple, jetez un ?il à superbement zomborrifique. Il utilise un mélange de pixels, vw
et d'unités vh
. La prémisse est que le super zombie vole vers le haut et que la "caméra" suit. Le super zombie frappe un rebord et tombe pendant que la caméra continue de se déplacer, mais si votre écran est suffisamment haut, vous ne comprendrez pas cela.
Cela signifie également que si vous avez besoin de quelque chose pour aller du haut - comme je l'ai fait dans personne ici que nous, les humains, vous devez régler vw
suffisamment élevée pour vous assurer que les zombies ninja ne sont pas visibles dans la plupart des rapports d'aspect.
Le?on 3A: Utilisez des unités de pixels pour le mouvement à l'intérieur d'un élément SVG.
Autrement dit, la conversion des éléments dans les éléments SVG ne doit pas utiliser les unités de la fenêtre. Les balises SVG sont leur propre univers proportionnel. Le SVG "Pixel" conservera un rapport de tous ses autres éléments SVG dans l'élément SVG , contrairement à l'unité de la fenêtre. Par conséquent, utilisez des unités de pixels dans l'élément SVG pour la conversion, mais utilisez des unités de fenêtre ailleurs.
Le?on 4: SVG évolue mal au moment de l'exécution.
Pour les animations, comme OOPS…, j'ai zoom sur l'image SVG du zombie à cinq fois l'original, mais cela a brouillé les bords. [Wave Fists sur les graphiques vectoriels "évolutifs". ]]
/ * Code d'origine qui provoque le flou des bords * / .zombie { transformée: échelle (1); Largeur: 15VW; } .Toggle-Checkbox: coché ~ .zombie { Animation: 5S Facteur-out-out 0s reverseshRinkyDink Forward; } @keyframes reverseshRinkyDink { 0% { transformée: échelle (1); } 100% { transformée: échelle (5); } }
J'ai appris à régler leur taille sur la taille finale qui prendra effet à la fin de l'animation, puis utiliser la transformation du zoom pour les réduire à la taille au début de l'animation.
/ * Code modifié * / .zombie { transformée: échelle (0,2); Largeur: 75VW; } .Toggle-Checkbox: coché ~ .zombie { Animation: 5S Facteur-out-out 0s reverseshRinkyDink Forward; } @keyframes reverseshRinkyDink { 0% { transformée: échelle (0,2); } 100% { transformée: échelle (1); } }
En bref, le code modifié passe d'une version réduite de l'image à sa pleine largeur et à sa hauteur. Le navigateur se rend toujours à 1, de sorte que les bords sont clairs et nets à une échelle de 1. Ainsi, au lieu de mettre à l'échelle de 1 à 5, j'ai évolué de 0,2 à 1.
Le?on 5: Les axes ne sont pas des vérités universelles.
L'axe d'un élément est maintenu en synchronisation avec lui-même, pas la page. La réalisation d'une rotation à 90 degrés avant translateX
change la direction de translateX
de horizontal à vertical. Dans personne ici que nous, les humains, 2, j'ai retourné les zombies en utilisant une rotation à 180 degrés. Mais une valeur y positive déplacera les ninjas vers le haut et une valeur négative les déplacera vers le bas (par opposition à la normale). Notez comment la rotation affecte les transformations ultérieures.
Le?ons 6. Décomposer des animations complexes en éléments concentriques pour un ajustement facile.
Lors de la création d'animations complexes qui se déplacent dans plusieurs directions, l'ajout de divins ou d'éléments parentaux enveloppement et animer chaque élément séparément peut réduire les conflits de transformation et vous empêcher de vous écraser.
Par exemple, dans Space Cadet, j'ai trois transformations différentes. Le premier est le mouvement de haut en bas des astronautes et des zombies. Le second est un mouvement horizontal. Le troisième est la rotation. Au lieu d'essayer de tout faire en une seule transformation, j'ai ajouté deux éléments d'enveloppe et les ai animés sur chaque élément (j'ai également sauvé mes cheveux ... au moins une partie de celui-ci). Cela permet d'éviter le problème de l'axe discuté dans la le?on précédente, car je tournais sur l'élément le plus intérieur, conservant ainsi l'axe de ses éléments parent et grand-parent.
Le?on 7: Les transformations SVG et CSS sont les mêmes.
Certains chemins, groupes et autres éléments SVG ont déjà défini des transformations. Cela peut être causé par des algorithmes d'optimisation, ou c'est peut-être la fa?on dont le logiciel d'illustration génère du code. Si un chemin, un groupe ou tout autre élément d'un SVG a déjà une transformation SVG, la suppression de cette transformation réinitialise l'élément, généralement avec un changement singulier de position ou de taille par rapport au reste des dessins.
étant donné que les transformations SVG et CSS sont les mêmes, toute transformée CSS que vous remplacez la transformation SVG, ce qui signifie que votre transformée CSS commencera à cette position ou taille singulière, pas la position ou la taille définie dans le SVG.
Vous pouvez copier la transformée de l'élément SVG en CSS et le définir sur la position de début dans le CSS (mettez-le d'abord à mettre à jour vers la syntaxe CSS). Vous pouvez ensuite le modifier dans l'animation CSS.
Par exemple, dans mon travailleur de bureau, un travail hommage UHHH, ouais…, le bras supérieur supérieur droit de Renberg (élément # ARM2) a une transformation du code SVG d'origine.
<path d="M0 171h9v9H0z" fill="#91c1a3" fill-rule="nonzero" transform="translate(0 -343) scale(4 3.55)"></path>
Déplacez la transformation en CSS comme suit:
<path d="M0 171h9v9H0z" fill="#91c1a3" fill-rule="nonzero"></path>
# arm2 { Transform: traduire (0, -343px) échelle (4, 3,55); }
... Je peux alors créer une animation qui ne réinitialise pas accidentellement la position et l'échelle:
.Toggle-Checkbox: coché ~ .z # arm2 {? Animation: 6S Faisons de 0,15s ARM2Move Forward; } @keyframes arm2move { 0%, 100% { Transform: traduire (0, -343px) échelle (4, 3,55); } 40%, 60% { Transformer: traduire (0, -403px) échelle (4, 3,55); } 50% { Transformer: traduire (0, -408px) échelle (4, 3,55); } }
Ce processus est encore plus difficile lorsque l'outil qui génère du code SVG essaie de "simplifier" la transformation en matrice. Bien que vous puissiez recréer des transformations matricielles en les copie en CSS, en élargissant, en tournant ou en panorant exactement comme vous le souhaitez est une tache intimidante.
Alternativement, vous pouvez utiliser la traduction, la rotation et la mise à l'échelle pour recréer la transformation de la matrice, mais si le chemin est complexe, les chances que vous puissiez le recréer dans le temps sans vous mettre en difficulté sont faibles.
La dernière option la plus simple est d'utiliser un groupe (
Le?on 8: Restez sain d'esprit lorsque vous transformez une partie d'un SVG
La propriété transform-origin
CSS déplace le point auquel la transformation se produit. Si vous essayez de faire tourner vos bras - comme je l'ai fait dans Clubbin ’It - votre animation sera plus naturelle si vous faites pivoter vos bras du centre de votre épaule, mais l'origine de transformation naturelle de ce chemin est dans le coin supérieur gauche. Utilisez transform-origin
pour résoudre ce problème pour une sensation plus lisse et plus naturelle… vous savez ce look d'art de pixels très naturel …
Lors du zoom, il est également utile de transformer l'origine, comme je l'ai fait dans des oups moustachés, ou lors de la rotation du mouvement de la bouche, comme le menton d'un dinosaure en super savoureux. Si vous ne modifiez pas l'origine, la transformation utilisera l'origine dans le coin supérieur gauche de l'élément SVG.
Le?on 9: les animations de sprite peuvent être réactives
J'ai fini par faire beaucoup d'animations Sprite pour ce projet (c'est-à-dire que vous utilisez plusieurs cadres incrémentiels et basculez rapidement entre eux pour faire en sorte que le personnage se déplace). J'ai créé des images dans un fichier large, je les ai ajoutés sous forme d'images d'arrière-plan aux éléments d'une seule taille de trame, à définir l'image d'arrière-plan sur la largeur de l'image à l'aide background-size
et à masquer le débordement. Ensuite, j'utilise background-position
et la fonction de temps d'animation step()
pour itérer à travers l'image; Par exemple: célébrations post-apocalyptiques.
Avant le projet, j'ai utilisé des images inflexibles. Je vais évoluer un peu pour qu'il y ait au moins quelques effets réactifs, mais je ne pense pas que vous puissiez en faire une largeur complètement flexible. Cependant, si vous utilisez SVG comme image d'arrière-plan, vous pouvez utiliser des unités de fenêtre pour évoluer les éléments à mesure que la taille de l'écran change. Le seul problème est l'emplacement d'arrière-plan. Cependant, si vous utilisez des unités de fenêtre pour cela, il restera synchronisé. Vérifiez-le enfin, seul avec mon sandwich….
Le?on 9A: Définissez la taille de l'arrière
Comme je l'ai appris dans ce projet, l'utilisation d'un seul type d'unité est presque toujours possible. Initialement, j'ai utilisé des pourcentages pour définir la taille de l'arrière-plan du sprite. Le calcul est simple (100% * (étape 1)) et fonctionne bien dans la plupart des cas. Cependant, dans les animations plus longues, le suivi précis du cadre peut mal tourner et peut afficher des parties du mauvais cadre de sprite. Le problème s'aggravera à mesure que davantage de cadres sont ajoutés au sprite.
Je ne sais pas exactement pourquoi cela cause le problème, mais je pense que cela est d? à l'erreur d'arrondi accumulée sur la longueur du tableau des sprites (la quantité de déplacement augmente à mesure que le nombre de trames augmente).
Dans ma dernière animation, ce n'est pas fini jusqu'à ce que le zombie chante, j'ai laissé un dinosaure ouvrir ma bouche pour révéler un chant de viking zombie (bien qu'il y ait du laser tirant en arrière-plan, et bien s?r, la danse, le jeu d'accordéon et les zombies tirés à partir de canons). Oui, je sais comment organiser une fête… une fête de geek.
Les dinosaures et les Vikings sont l'une des plus longues animations d'Elfes faites pour le projet. Cependant, lorsque j'utilise des pourcentages pour définir la taille de l'arrière-plan, certaines tailles de suivi dans les erreurs de safari. à la fin de l'animation, une partie du nez de dinosaure de différents cadres semble appara?tre sur le c?té droit, tandis qu'une partie similaire du nez manque sur le c?té gauche.
Ceci est très difficile à diagnostiquer car cela semble fonctionner correctement dans Chrome, et je pense que je l'ai corrigé dans Safari et je regarde simplement une taille d'écran légèrement différente et je revois la déviation du cadre. Mais si j'utilise des unités cohérentes - c'est-à-dire vw
pour background-size
, la largeur du cadre et background-position
- tout fonctionne bien. Encore une fois, cela revient à utiliser des unités cohérentes!
Le?on 10: invitez les gens à participer au projet.
Bien que j'aie beaucoup appris dans le processus, j'ai passé la plupart de mon temps à frapper le mur (souvent jusqu'à ce que le mur soit cassé ou que ma tête soit cassée… Je ne peux pas faire la différence). Bien qu'il s'agisse d'une méthode, même si vous êtes têtu, vous finirez par avoir mal à la tête. Invitez les autres à participer à votre projet, qu'il s'agisse de chercher des conseils, de souligner des angles morts évidents que vous avez manqués, de fournir des commentaires, d'aider au projet ou de vous encourager à continuer lorsque vous pensez que la portée est trop grande.
Alors permettez-moi de mettre cette le?on en pratique. Que pensez-vous? Comment allez-vous bloquer les zombies avec l'animation CSS? Quels projets entreprenez-vous qui sont trop importants pour vous mettre au défi?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Il existe trois fa?ons d'inclure sélectivement CSS sur une page spécifique: 1. CSS en ligne, adapté aux pages qui ne sont pas fréquemment accessibles ou qui nécessitent des styles uniques; 2. Chargez des fichiers CSS externes à l'aide de conditions JavaScript, adaptées aux situations où une flexibilité est requise; 3. CONFIGMENT DU SERVEUR, adapté aux scénarios utilisant les langages c?té serveur. Cette approche peut optimiser les performances du site Web et la maintenabilité, mais nécessite un équilibre de modularité et de performances.

Flexboxisidealforone-dimensionallayouts, tandis que GridSuitStwo-dimensional, complexlayouts.USEFLEXBOXFORALIGNINGITEMSINASingleAxisandgridForpreciseControlOverrowsandColumnSinIntriciatedEsigns.

L'attribut HTML Popover transforme les éléments en éléments de couche supérieure qui peuvent être ouverts et fermés avec un bouton ou un javascript. Les popovers peuvent être rejetées de plusieurs fa?ons, mais il n'y a pas de possibilité de les fermer automatiquement. Preethi a une technique tu peux u

CSS bloque le rendu de la page car les navigateurs affichent le CSS en ligne et le CSS externe comme des ressources clés par défaut, en particulier avec les feuilles de styles importées, les grandes quantités de CSS en ligne et les styles de requête multimédia non optimisés. 1. Extraire CSS critique et l'intégrez-la dans HTML; 2. Retard Chargement CSS non critique via JavaScript; 3. Utilisez des attributs multimédias pour optimiser le chargement tel que les styles d'impression; 4. Comprimer et fusionner CSS pour réduire les demandes. Il est recommandé d'utiliser des outils pour extraire les CS de clé, combiner le chargement asynchrone rel = "précharge" et utiliser le chargement retardé des médias raisonnablement pour éviter une division excessive et un contr?le de script complexe.

Dans le tutoriel suivant, je vais vous montrer comment créer des animations Lottie sur Figma. Nous utiliserons deux designs colorés pour expliquer comment vous pouvez animer sur Figma, puis je vais vous montrer comment passer de Figma aux animations Lottie. Tout ce dont vous avez besoin est une figue libre

Nous le mettons à l'épreuve et il s'avère que SASS peut remplacer JavaScript, du moins en ce qui concerne la logique de bas niveau et le comportement du puzzle. Avec rien d'autre que des cartes, des mixins, des fonctions et beaucoup de mathématiques, nous avons réussi à donner vie à notre puzzle Tangram, non J

TheBestApproachForCSSDependSonTheproject'sspecificneeds.ForLargerProjects, externalcsisBetterDueTomaintainiabilityAndReUsability; ForsmallerProjectsorSingle-pageApplications, internecssigh

NON, CSSDOOSNOTHAVETOBEINLOWLOWERCASE.CI, USING USINGERCASERASERISROMEND pour: 1) Cohérence et réadaptation, 2) évitant les technologies de perception liées à la pertinence, 3) Potentiel PerformanceBenefits, and4) Amélioration de la collaboration.
