Cet article a 10 ans. Il commence à dater mais n'est pas forcément obsolète. Lisez-le en gardant son âge en tête ! Merci.
Article invité par Michaël Crofte
Infographiste et webdesigner depuis 2009, Michaël est un curieux dans l'âme et aime parcourir les coins reculés du web pour vous dénicher quelques petites ressources, logiciels et astuces.
Aimant s'aventurer sur toutes les voix, il peut vous parler de 2D, de 3D, de vidéo et de code. Essayez de le suivre...
Retrouvez-le également sur son site perso.
Je vous propose aujourd’hui une animation de particules dans un tuto qui affichera une chute de neige en boucle. Il existe souvent une foule de solutions pour ce genre d’animation. Je vous présente une solution en CSS3 en utilisant la propriété animation et les séquences de keyframes.
Logique de l’animation
Avant de toucher au code, analysons comment rendre réaliste l’animation et schématiser les plans dont nous aurons besoin.
Regardons le schéma ci-dessous :
Nous remarquons une silhouette humaine, un cône représentant son champs de vision ainsi que trois sphères de même dimension à trois distances différentes.
Dans le principe, le schéma devrait suffire à illustrer l’ensemble de la logique de l’animation que nous allons mettre en place. Les trois sphères représentent les trois niveaux de calques que nous allons animer. Remarquez ces détails :
Une sphère occupe une portion plus importante du champs visuel quand elle est proche et nettement moindre lorsqu’elle est distante. On peut donc conclure facilement que nos particules devront être représentées plus grosses pour le calque proche de nos yeux et plus fines au fur et à mesure qu’elles s’éloignent.
Si toutes les sphères tombent à une même vitesse, la sphère proche de la silhouette restera moins longtemps dans le champs que la sphère éloignée. Pour une animation à l’écran cela voudra dire que le calque « proche » devra passer plus rapidement à l’écran et nous ralentirons les calques qui sont censés être plus distants.
Conclusion : les particules proches seront plus grosses et plus rapides, alors qu’en s’éloignant, les autres calques de particules seront fins et lents.
Listons nos besoins
Le principe de l’animation acquis, vous devriez vous rendre compte que vous allez donc avoir besoin de quatre surfaces de calque (du plus profond au plus proche) :
un fond (illustration, photo, aplat contrasté, etc)
nos particules fines (attention à la pollution !)
nos particules moyennes
nos particules larges
Sur ce tuto, cela devrait vous donner ces 4 images (attention c’est un jpeg tout bête) :
Attention ici, chaque image est travaillée de telle sorte qu’aucune particule (ici les flocons) ne soient coupée sur leurs bordures. Pour que ce travail soit fait efficacement je vous invite à utiliser l’outil Translation de Photoshop (Filtres > Divers).
Passons au code
Du côté du code HTML, nous allons simplement insérer dans body un conteneur avec 3 items à l’intérieur.
Côté body
Le tuto présente une animation extrêmement simple avec une seul séquence keyframes. Lors de vos animations, augmenter les étapes, changer les directions et multiplier les séquences permet d’augmenter le réalisme. Mais attention, c’est à utiliser si vous maîtrisez bien le schéma de votre animation. Par exemple, lors d’une animation de particules de braises pour un feu il est probable que ces dernières volent dans tous les sens, faire varier les directions et les durées, voire les transparences, rendrait l’animation très réaliste.
Sur notre tuto, remarquez que les flocons proches sont floutés, lorsque le regard se pose sur un paysage lointain, il normal que les éléments proches de notre regard ne soient pas identifiés clairement, le flou traduit ce focus sur l’arrière plan.
Note : Ne vous amusez pas à placer ce genre d’animation sur la totalité de votre site Web, ça n’est pas l’objet de cette proposition d’animation ! Bonnes fêtes !
Partager la publication "Créer une animation de neige ou de particules en CSS3"
J’ai suivi les étapes en découpant les 4 images comme indiquer, en respectant le css et le html prescrit, mais au moment du test rien à faire soit l’image small reste fixe, soit la neige (small)tombe très lentement. Quand à l’image jpg elle n’apparaît pas du tout. Ce qui serait sympas, ce serait que les programmeurs pensent à inclure des codes qui fonctionnent réellement. Attention, je ne critique pas votre bonne volonté, mais simplement de pensé au novice qui débute.
Et malheureusement comme sur toutes les démos, les pros s’adressent qu’au pro, c’est vraiment dommage.
Les articles de ce blog sont adressés aux personnes qui connaissent au moins la définition de CSS et HTML. Il est vrai qu’il est difficile de s’adresser à tout le monde sans connaître leur niveau de compréhension du code.
C’est pourquoi je me suis permis de permettre aux personnes qui n’auraient pas compris un article, de commenter et de partager leur code. Mais comme beaucoup de novice, vous pensez que les pro ne s’adressent qu’aux pro, et avez omis de lire les informations au-dessus du formulaire de commentaire que vous avez rempli, et n’avez pas partagé votre code. C’est vous punir vous-même en ne vous offrant pas la possibilité d’être corrigé par ces pro que vous critiquez.
Et sachez-le, nous aimons la critique, elle fait avancer 😉
Agréable journée.
NB. Avant d’être pro, nous avons tous été novices et apprécions les tutoriels accessibles, c’est pourquoi nous souhaitons mettre (bénévolement) toutes les chances du côté d’une compréhension optimale de nos tutoriels.
Comme l’a très bien indiqué Geoffrey nous vous invitons à partager votre code par le biais de CodePen.io, nous devrions rapidement mettre le doigt sur ce qui cloche.
N’oubliez pas que l’obsolescence de votre navigateur peut aussi être à l’origine du dysfonctionnement. La démo proposée est elle fonctionnelle ?
Cordialement.
Catherine
dit :
Bonjour,
J’aimerais ajouter un lien dans la partie où il y a l’animation, mais même si j’ajoute un z-index:1000, mon lien est « dessous » l’animation. Comment puis-je faire?
Quand j’utilise les flocons de neiges avec un fond noir, je n’arrive pas à avoir ma photo comme quoi, j’obtiens toujours des flocons quo tombent sur un fond noir, comment se débarasser du fond noir?
Salut, ce tutos m’a été très pratiques, le seul dommage est de ne pas avoir eu les images en transparence.
Bonjour,
J’ai suivi les étapes en découpant les 4 images comme indiquer, en respectant le css et le html prescrit, mais au moment du test rien à faire soit l’image small reste fixe, soit la neige (small)tombe très lentement. Quand à l’image jpg elle n’apparaît pas du tout. Ce qui serait sympas, ce serait que les programmeurs pensent à inclure des codes qui fonctionnent réellement. Attention, je ne critique pas votre bonne volonté, mais simplement de pensé au novice qui débute.
Et malheureusement comme sur toutes les démos, les pros s’adressent qu’au pro, c’est vraiment dommage.
Merci quand même,pour cette démo.
Bonjour,
Les articles de ce blog sont adressés aux personnes qui connaissent au moins la définition de CSS et HTML. Il est vrai qu’il est difficile de s’adresser à tout le monde sans connaître leur niveau de compréhension du code.
C’est pourquoi je me suis permis de permettre aux personnes qui n’auraient pas compris un article, de commenter et de partager leur code. Mais comme beaucoup de novice, vous pensez que les pro ne s’adressent qu’aux pro, et avez omis de lire les informations au-dessus du formulaire de commentaire que vous avez rempli, et n’avez pas partagé votre code. C’est vous punir vous-même en ne vous offrant pas la possibilité d’être corrigé par ces pro que vous critiquez.
Et sachez-le, nous aimons la critique, elle fait avancer 😉
Agréable journée.
NB. Avant d’être pro, nous avons tous été novices et apprécions les tutoriels accessibles, c’est pourquoi nous souhaitons mettre (bénévolement) toutes les chances du côté d’une compréhension optimale de nos tutoriels.
Bonjour Armand,
Comme l’a très bien indiqué Geoffrey nous vous invitons à partager votre code par le biais de CodePen.io, nous devrions rapidement mettre le doigt sur ce qui cloche.
N’oubliez pas que l’obsolescence de votre navigateur peut aussi être à l’origine du dysfonctionnement. La démo proposée est elle fonctionnelle ?
Cordialement.
Bonjour,
J’aimerais ajouter un lien dans la partie où il y a l’animation, mais même si j’ajoute un z-index:1000, mon lien est « dessous » l’animation. Comment puis-je faire?
merci!
Bonjour,
z-index ne fonctionne que si votre élément est positionné, c’est à dire qu’il possède une valeur de
position
différente destatic
.Essayez quelque chose comme :
Bonne soirée.
Bonjour,
merci pour ce tutoriel. Existe t’il un moyen de créer les flocons de neiges en CSS pour remplacer les fichier PNG ?
Avec border-radius border-shadow et de la transparence
Ou bien d’utiliser une police comme http://fontawesome.io/icon/snowflake-o
Faire un peu comme ce code :
https://codepen.io/saransh/full/BKJun/
Bonjour,
Quand j’utilise les flocons de neiges avec un fond noir, je n’arrive pas à avoir ma photo comme quoi, j’obtiens toujours des flocons quo tombent sur un fond noir, comment se débarasser du fond noir?
.snow{
position: relative;
background-image: url(« fond.jpg »);
background-size: cover;
height: 1000px;
}
.snow__layer {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image: url(« flocon.png »);
animation: dropFlowParticles 25s infinite ;
}
@keyframes dropFlowParticles {
from { background-position: 0 0; }
to { background-position: 0 413px; }
}