{"id":4226,"date":"2014-12-13T17:13:06","date_gmt":"2014-12-13T16:13:06","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=4226"},"modified":"2015-02-26T20:24:10","modified_gmt":"2015-02-26T19:24:10","slug":"creer-une-animation-de-neige-ou-de-particules-en-css3","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/css-css3\/creer-une-animation-de-neige-ou-de-particules-en-css3","title":{"rendered":"Cr\u00e9er une animation de neige ou de particules en CSS3"},"content":{"rendered":"<p>Je vous propose aujourd&rsquo;hui une <strong>animation de particules<\/strong> dans un tuto qui affichera une chute de neige en boucle. Il existe souvent une foule de solutions pour ce genre d&rsquo;animation. Je vous pr\u00e9sente une solution en <strong>CSS3<\/strong> en utilisant la propri\u00e9t\u00e9 <strong><code>animation<\/code><\/strong> et les s\u00e9quences de <strong><code>keyframes<\/code><\/strong>.<!--more--><\/p>\n<h2>Logique de l&rsquo;animation<\/h2>\n<p>Avant de toucher au code, analysons comment rendre r\u00e9aliste l&rsquo;animation et sch\u00e9matiser les plans dont nous aurons besoin.<br \/>\nRegardons le sch\u00e9ma ci-dessous :<\/p>\n<p class=\"center\"><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2014\/09\/Sch\u00e9ma.jpg\" alt=\"Sch\u00e9ma pr\u00e9cisant les quatres plans n\u00e9cessaires \u00e0 l'animation\" \/><\/p>\n<p>Nous remarquons une silhouette humaine, un c\u00f4ne repr\u00e9sentant son champs de vision ainsi que trois sph\u00e8res de m\u00eame dimension \u00e0 trois distances diff\u00e9rentes.<br \/>\nDans le principe, le sch\u00e9ma devrait suffire \u00e0 illustrer l&rsquo;ensemble de la logique de l&rsquo;animation que nous allons mettre en place. Les trois sph\u00e8res repr\u00e9sentent les <strong>trois niveaux de calques<\/strong> que nous allons animer. Remarquez ces d\u00e9tails :<\/p>\n<ol>\n<li>Une sph\u00e8re occupe une portion plus importante du champs visuel quand elle est proche et nettement moindre lorsqu&rsquo;elle est distante. On peut donc conclure facilement que nos particules devront \u00eatre repr\u00e9sent\u00e9es plus grosses pour le calque proche de nos yeux et plus fines au fur et \u00e0 mesure qu&rsquo;elles s&rsquo;\u00e9loignent.<\/li>\n<li>Si toutes les sph\u00e8res tombent \u00e0 une m\u00eame vitesse, la sph\u00e8re proche de la silhouette restera moins longtemps dans le champs que la sph\u00e8re \u00e9loign\u00e9e. Pour une animation \u00e0 l&rsquo;\u00e9cran cela voudra dire que le calque \u00ab\u00a0proche\u00a0\u00bb devra passer plus rapidement \u00e0 l&rsquo;\u00e9cran et nous ralentirons les calques qui sont cens\u00e9s \u00eatre plus distants.<\/li>\n<\/ol>\n<p class=\"message remember\"><u>Conclusion<\/u> : les particules proches seront plus grosses et plus rapides, alors qu&rsquo;en s\u2019\u00e9loignant, les autres calques de particules seront fins et lents.<\/p>\n<h2>Listons nos besoins<\/h2>\n<p>Le principe de l&rsquo;animation acquis, vous devriez vous rendre compte que vous allez donc avoir besoin de quatre surfaces de calque (du plus profond au plus proche) :<\/p>\n<ul>\n<li>un fond (illustration, photo, aplat contrast\u00e9, etc)<\/li>\n<li>nos particules fines (attention \u00e0 la pollution !)<\/li>\n<li>nos particules moyennes<\/li>\n<li>nos particules larges<\/li>\n<\/ul>\n<p>Sur ce tuto, cela devrait vous donner ces 4 images (attention c&rsquo;est un jpeg tout b\u00eate) :<\/p>\n<p class=\"center\"><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2014\/09\/illustration-small-medium-large.jpg\" alt=\"4 images n\u00e9cessaire \u00e0 l'animation\" \/><\/p>\n<p>Attention ici, chaque image est travaill\u00e9e de telle sorte qu&rsquo;aucune particule (ici les flocons) ne soient coup\u00e9e sur leurs bordures. Pour que ce travail soit fait efficacement je vous invite \u00e0 utiliser l&rsquo;outil Translation de Photoshop (Filtres &gt; Divers).<\/p>\n<h2>Passons au code<\/h2>\n<p>Du c\u00f4t\u00e9 du code HTML, nous allons simplement ins\u00e9rer dans <code class=\"element\">body<\/code> un conteneur avec 3 items \u00e0 l&rsquo;int\u00e9rieur.<br \/>\nC\u00f4t\u00e9 <code>body<\/code><\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;div class=\"illustration\"&gt;\r\n\t&lt;div class=\"i-large\"&gt;&lt;\/div&gt;\r\n\t&lt;div class=\"i-medium\"&gt;&lt;\/div&gt;\r\n\t&lt;div class=\"i-small\"&gt;&lt;\/div&gt;\r\n&lt;\/div&gt;<\/code><\/pre>\n<p>Voici en quelques lignes notre animation.<\/p>\n<pre class=\"code\"><code class=\"language-css\">.illustration {\r\n\tposition: relative;\r\n\tmargin: 0 auto;\r\n\twidth : 716px;\r\n\theight: 413px;\r\n\tbackground : url(\".\/illustration.jpg\") no-repeat top center;\r\n}\r\n&nbsp;\r\n.i-large,\r\n.i-medium,\r\n.i-small {\r\n\tposition : absolute;\r\n\ttop: 0; right: 0; bottom: 0; left: 0;\r\n}\r\n&nbsp;\r\n.i-large {\r\n\tbackground: url(\".\/particules_large.png\") repeat 0px 0px;\r\n\t-webkit-animation: dropFlowParticles 2s linear infinite;\r\n\t     -o-animation: dropFlowParticles 2s linear infinite;\r\n\t        animation: dropFlowParticles 2s linear infinite;\r\n}\r\n.i-medium {\r\n\tbackground: url(\".\/particules_medium.png\") repeat 0px 0px;\r\n\t-webkit-animation: dropFlowParticles 12s linear infinite;\r\n\t     -o-animation: dropFlowParticles 12s linear infinite;\r\n\t        animation: dropFlowParticles 12s linear infinite;\r\n}\r\n.i-small {\r\n\tbackground:url(\".\/particules_small.png\") repeat 0px 0px;\r\n\t-webkit-animation: dropFlowParticles 27s linear infinite;\r\n\t     -o-animation: dropFlowParticles 27s linear infinite;\r\n\t        animation: dropFlowParticles 27s linear infinite;\r\n}\r\n&nbsp;\r\n@-webkit-keyframes dropFlowParticles {\r\n\tfrom { background-position: 0 0; }\r\n\tto { background-position: 0 413px; }\r\n}\r\n@keyframes dropFlowParticles {\r\n\tfrom { background-position: 0 0; }\r\n\tto { background-position: 0 413px; }\r\n}<\/code><\/pre>\n<p><a class=\"demonstration\" href=\"https:\/\/www.creativejuiz.fr\/blog\/doc\/snow-animation-css3\/\">Voir un aper\u00e7u de l&rsquo;animation CSS3<\/a><\/p>\n<h2>Aller plus loin<\/h2>\n<p>Le tuto pr\u00e9sente une animation extr\u00eamement simple avec une seul s\u00e9quence <code>keyframes<\/code>. Lors de vos animations, augmenter les \u00e9tapes, changer les directions et multiplier les s\u00e9quences permet d&rsquo;augmenter le r\u00e9alisme. Mais attention, c&rsquo;est \u00e0 utiliser si vous ma\u00eetrisez bien le sch\u00e9ma de votre animation. Par exemple, lors d&rsquo;une animation de particules de braises pour un feu il est probable que ces derni\u00e8res volent dans tous les sens, faire varier les directions et les dur\u00e9es, voire les transparences, rendrait l&rsquo;animation tr\u00e8s r\u00e9aliste.<\/p>\n<p>Sur notre tuto, remarquez que les flocons proches sont flout\u00e9s, lorsque le regard se pose sur un paysage lointain, il normal que les \u00e9l\u00e9ments proches de notre regard ne soient pas identifi\u00e9s clairement, le flou traduit ce focus sur l&rsquo;arri\u00e8re plan.<\/p>\n<p class=\"message\">Note : Ne vous amusez pas \u00e0 placer ce genre d&rsquo;animation sur la totalit\u00e9 de votre site Web, \u00e7a n&rsquo;est pas l&rsquo;objet de cette proposition d&rsquo;animation&nbsp;! Bonnes f\u00eates&nbsp;!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je vous propose aujourd&rsquo;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&rsquo;animation. Je vous pr\u00e9sente une solution en CSS3 en utilisant la propri\u00e9t\u00e9 animation et les s\u00e9quences de keyframes.<\/p>\n","protected":false},"author":10,"featured_media":4453,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[17],"tags":[120,428,35,122],"coauthors":[598],"class_list":["post-4226","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-css3","tag-animation","tag-css3","tag-illustration","tag-keyframes"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/4226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=4226"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/4226\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/4453"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=4226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=4226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=4226"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=4226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}