diff options
| author | julieng <julien.gattelier@gmail.com> | 2021-09-17 20:59:20 +0200 |
|---|---|---|
| committer | SphinxKnight <SphinxKnight@users.noreply.github.com> | 2021-10-12 07:57:33 +0200 |
| commit | 258ba7b4be62d8640477a3bd3146d08b00cb70ec (patch) | |
| tree | a8476eee4c369ff47bdfe08353774414f2281ba3 /files/fr/web/css/css_animations | |
| parent | 149319bb8c7b1394a443f0877c3460cd362aa815 (diff) | |
| download | translated-content-258ba7b4be62d8640477a3bd3146d08b00cb70ec.tar.gz translated-content-258ba7b4be62d8640477a3bd3146d08b00cb70ec.tar.bz2 translated-content-258ba7b4be62d8640477a3bd3146d08b00cb70ec.zip | |
convert content to md
Diffstat (limited to 'files/fr/web/css/css_animations')
4 files changed, 287 insertions, 294 deletions
diff --git a/files/fr/web/css/css_animations/detecting_css_animation_support/index.md b/files/fr/web/css/css_animations/detecting_css_animation_support/index.md index 7f33e6daf9..de84d1848a 100644 --- a/files/fr/web/css/css_animations/detecting_css_animation_support/index.md +++ b/files/fr/web/css/css_animations/detecting_css_animation_support/index.md @@ -8,19 +8,18 @@ tags: translation_of: Web/CSS/CSS_Animations/Detecting_CSS_animation_support original_slug: Web/CSS/Animations_CSS/Détecter_la_prise_en_charge_des_animations_CSS --- -<div>{{CSSRef}}{{obsolete_header}}</div> +{{CSSRef}}{{obsolete_header}} -<div class="warning"> -<p><strong>Attention :</strong> Les techniques décrites dans cet article sont obsolètes et peuvent être remplacées par l'utilisation de {{cssxref("@supports")}}.</p> -</div> +> **Attention :** Les techniques décrites dans cet article sont obsolètes et peuvent être remplacées par l'utilisation de {{cssxref("@supports")}}. -<p>Avec les animations CSS, on peut ajouter des animations sur du contenu, uniquement en utilisant CSS. Toutefois, cette fonctionnalité n'est parfois pas disponible et on souhaiterait alors pouvoir gérer ce cas et appliquer un effet similaire avec JavaScript. Cet article, <a href="https://hacks.mozilla.org/2011/09/detecting-and-generating-css-animations-in-javascript/">basé sur ce billet de Christian Heilmann</a>, illustre une technique pour détecter la prise en charge des animations CSS.</p> +Avec les animations CSS, on peut ajouter des animations sur du contenu, uniquement en utilisant CSS. Toutefois, cette fonctionnalité n'est parfois pas disponible et on souhaiterait alors pouvoir gérer ce cas et appliquer un effet similaire avec JavaScript. Cet article, [basé sur ce billet de Christian Heilmann](https://hacks.mozilla.org/2011/09/detecting-and-generating-css-animations-in-javascript/), illustre une technique pour détecter la prise en charge des animations CSS. -<h2 id="Détecter_la_prise_en_charge_des_animations_CSS">Détecter la prise en charge des animations CSS</h2> +## Détecter la prise en charge des animations CSS -<p>Ce code JavaScript permet de vérifier que les animations CSS peuvent être utilisées dans le navigateur :</p> +Ce code JavaScript permet de vérifier que les animations CSS peuvent être utilisées dans le navigateur : -<pre class="brush: js">var animation = false, +```js +var animation = false, animationstring = 'animation', keyframeprefix = '', domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), @@ -30,7 +29,7 @@ original_slug: Web/CSS/Animations_CSS/Détecter_la_prise_en_charge_des_animation if( elem.style.animationName !== undefined ) { animation = true; } if( animation === false ) { - for( var i = 0; i < domPrefixes.length; i++ ) { + for( var i = 0; i < domPrefixes.length; i++ ) { if( elem.style[ domPrefixes[i] + 'AnimationName' ] !== undefined ) { pfx = domPrefixes[ i ]; animationstring = pfx + 'Animation'; @@ -40,21 +39,22 @@ if( animation === false ) { } } } -</pre> +``` -<p>Pour commencer, on définit quelques variables et on part de l'hypothèse que les animations ne sont pas prises en charge en définissant <code>animation</code> avec <code>false</code>. On utilise la chaîne de caractères <code>animationstring</code> avec la valeur "animation" car celle-ci représentera le nom de la propriété qu'on souhaite définir. On crée également un tableau contenant les préfixes des différents navigateurs afin de pouvoir parcourir ces différents cas et qu'on utilisera avec la variable <code>pfx</code> qu'on définit pour le moment avec la chaîne vide.</p> +Pour commencer, on définit quelques variables et on part de l'hypothèse que les animations ne sont pas prises en charge en définissant `animation` avec `false`. On utilise la chaîne de caractères `animationstring` avec la valeur "animation" car celle-ci représentera le nom de la propriété qu'on souhaite définir. On crée également un tableau contenant les préfixes des différents navigateurs afin de pouvoir parcourir ces différents cas et qu'on utilisera avec la variable `pfx` qu'on définit pour le moment avec la chaîne vide. -<p>Ensuite, on vérifie si la propriété CSS {{cssxref("animation-name")}} on est définie sur l'élément représenté par la variable <code>elem</code>. Cela signifie alors que le navigateur prend en charge les animations CSS sans préfixe.</p> +Ensuite, on vérifie si la propriété CSS {{cssxref("animation-name")}} on est définie sur l'élément représenté par la variable `elem`. Cela signifie alors que le navigateur prend en charge les animations CSS sans préfixe. -<p>Si le navigateur ne prend pas en charge la version sans préfixe et que <code>animation</code> vaut toujours <code>false</code>, on parcourt les différents préfixes des principaux navigateurs et on modifie le nom de <code>AnimationName</code> de la même façon.</p> +Si le navigateur ne prend pas en charge la version sans préfixe et que `animation` vaut toujours `false`, on parcourt les différents préfixes des principaux navigateurs et on modifie le nom de `AnimationName` de la même façon. -<p>Une fois que ce code a fini son exécution, la valeur de <code>animation</code> sera <code>false</code> si les animations ne sont pas prises en charge ou <code>true</code> si <code>animation</code> est le bon nom et que le préfixe est correct. Pour les préfixes, on fera attention à la variation entre le <em>camelCase</em> (ex. <code>MozAnimation</code>) et les tirets (<code>-moz-x</code>).</p> +Une fois que ce code a fini son exécution, la valeur de `animation` sera `false` si les animations ne sont pas prises en charge ou `true` si `animation` est le bon nom et que le préfixe est correct. Pour les préfixes, on fera attention à la variation entre le _camelCase_ (ex. `MozAnimation`) et les tirets (`-moz-x`). -<h2 id="Appliquer_des_animations_avec_la_bonne_syntaxe_selon_le_navigateur">Appliquer des animations avec la bonne syntaxe selon le navigateur</h2> +## Appliquer des animations avec la bonne syntaxe selon le navigateur -<p>Maintenant qu'on sait que les animations CSS sont prises en charge, on peut appliquer des animations :</p> +Maintenant qu'on sait que les animations CSS sont prises en charge, on peut appliquer des animations : -<pre class="brush: js">if( animation === false ) { +```js +if( animation === false ) { // on utilise JavaScript en fallback @@ -66,7 +66,7 @@ if( animation === false ) { 'to {' + keyframeprefix + 'transform:rotate( 360deg ) }'+ '}'; - if( document.styleSheets && document.styleSheets.length ) { + if( document.styleSheets && document.styleSheets.length ) { document.styleSheets[0].insertRule( keyframes, 0 ); @@ -79,22 +79,20 @@ if( animation === false ) { } } -</pre> +``` -<p>Ce code utilise la valeur d'<code>animation</code> : si c'est <code>false</code>, on utilise JavaScript pour recréer l'effet de l'animation. Sinon, on utilise JavaScript pour manipuler les animations CSS.</p> +Ce code utilise la valeur d'`animation` : si c'est `false`, on utilise JavaScript pour recréer l'effet de l'animation. Sinon, on utilise JavaScript pour manipuler les animations CSS. -<p>Pour définir la propriété d'animation, il suffit de mettre à jour la valeur dans la collection de style. Cependant, c'est un peu plus compliqué de gérer les étapes/<em>keyframes</em> car elles n'utilisent pas la syntaxe CSS traditionnelle.</p> +Pour définir la propriété d'animation, il suffit de mettre à jour la valeur dans la collection de style. Cependant, c'est un peu plus compliqué de gérer les étapes/_keyframes_ car elles n'utilisent pas la syntaxe CSS traditionnelle. -<p>Pour définir les étapes de l'animation avec JavaScript, il faut les écrire dans une chaîne de caractères CSS. On définit alors une variable <code>keyframes</code> qu'on construit avec le préfixe à utiliser. Une fois construite, cette variable contient la description complète des différentes étapes nécessaires à la description.</p> +Pour définir les étapes de l'animation avec JavaScript, il faut les écrire dans une chaîne de caractères CSS. On définit alors une variable `keyframes` qu'on construit avec le préfixe à utiliser. Une fois construite, cette variable contient la description complète des différentes étapes nécessaires à la description. -<p>Ensuite, il faut ajouter les étapes au CSS de la page. Pour commencer, on regarde s'il n'y a pas déjà une feuille de style associée au document et si c'est le cas, on ajoute la description des étapes dans la feuille de style (cf. les lignes 13 et 15 du fragment de code ci-avant).</p> +Ensuite, il faut ajouter les étapes au CSS de la page. Pour commencer, on regarde s'il n'y a pas déjà une feuille de style associée au document et si c'est le cas, on ajoute la description des étapes dans la feuille de style (cf. les lignes 13 et 15 du fragment de code ci-avant). -<p>S'il n'y aucune feuille de style pré-existante, on crée un nouvel élément {{HTMLElement("style")}} et on remplit son contenu avec la valeur des étapes. Ensuite, on insère ce nouvel élément {{HTMLElement("style")}} dans l'élément {{HTMLElement("head")}} du document ce qui ajoute la nouvelle feuille de style au document.</p> +S'il n'y aucune feuille de style pré-existante, on crée un nouvel élément {{HTMLElement("style")}} et on remplit son contenu avec la valeur des étapes. Ensuite, on insère ce nouvel élément {{HTMLElement("style")}} dans l'élément {{HTMLElement("head")}} du document ce qui ajoute la nouvelle feuille de style au document. -<p><a href="https://jsfiddle.net/codepo8/ATS2S/8/embedded/result">Voir dans JSFiddle</a></p> +[Voir dans JSFiddle](https://jsfiddle.net/codepo8/ATS2S/8/embedded/result) -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/CSS/CSS_Animations/Using_CSS_animations">Les animations CSS</a></li> -</ul> +- [Les animations CSS](/fr/docs/Web/CSS/CSS_Animations/Using_CSS_animations) diff --git a/files/fr/web/css/css_animations/index.md b/files/fr/web/css/css_animations/index.md index a0db694124..e4aa4c4df1 100644 --- a/files/fr/web/css/css_animations/index.md +++ b/files/fr/web/css/css_animations/index.md @@ -7,70 +7,49 @@ tags: translation_of: Web/CSS/CSS_Animations original_slug: Web/CSS/Animations_CSS --- -<div>{{CSSRef}}</div> +{{CSSRef}} -<p>Les <strong>animations CSS</strong> sont un module CSS qui définit la façon dont les valeurs des propriétés CSS peuvent être animées au fur et à mesure d'une période via des étapes intermédiaires (<em>keyframes</em> en anglais). Le comportement de ces animations séquencées peut être défini en termes de durée, de nombre de répétitions et de la façon dont elles sont répétées.</p> +Les **animations CSS** sont un module CSS qui définit la façon dont les valeurs des propriétés CSS peuvent être animées au fur et à mesure d'une période via des étapes intermédiaires (_keyframes_ en anglais). Le comportement de ces animations séquencées peut être défini en termes de durée, de nombre de répétitions et de la façon dont elles sont répétées. -<h2 id="Référence">Référence</h2> +## Référence -<h3 id="Propriétés_CSS">Propriétés CSS</h3> +### Propriétés CSS -<ul> - <li>{{cssxref("animation")}}</li> - <li>{{cssxref("animation-delay")}}</li> - <li>{{cssxref("animation-direction")}}</li> - <li>{{cssxref("animation-duration")}}</li> - <li>{{cssxref("animation-fill-mode")}}</li> - <li>{{cssxref("animation-iteration-count")}}</li> - <li>{{cssxref("animation-name")}}</li> - <li>{{cssxref("animation-play-state")}}</li> - <li>{{cssxref("animation-timing-function")}}</li> -</ul> +- {{cssxref("animation")}} +- {{cssxref("animation-delay")}} +- {{cssxref("animation-direction")}} +- {{cssxref("animation-duration")}} +- {{cssxref("animation-fill-mode")}} +- {{cssxref("animation-iteration-count")}} +- {{cssxref("animation-name")}} +- {{cssxref("animation-play-state")}} +- {{cssxref("animation-timing-function")}} -<h3 id="Règles_CSS">Règles @ CSS</h3> +### Règles @ CSS -<ul> - <li>{{cssxref("@keyframes")}}</li> -</ul> +- {{cssxref("@keyframes")}} -<h2 id="Guides">Guides</h2> +## Guides -<dl> - <dt><a href="/fr/docs/Web/CSS/CSS_Animations/Detecting_CSS_animation_support">Détecter la prise en charge des animations CSS</a></dt> - <dd>Cet article décrit une technique permettant de détecter si le navigateur prend en charge les animations CSS.</dd> - <dt><a href="/fr/docs/Web/CSS/CSS_Animations/Utiliser_les_animations_CSS">Manipuler les animations CSS</a></dt> - <dd>Un tutoriel pas-à-pas qui explique comment créer des animations CSS. Cet article décrit les différentes propriétés et règles @ relatives aux animations et comment elles interagissent.</dd> - <dt><a href="/fr/docs/Web/CSS/Animations_CSS/Conseils">Conseils pour les animations CSS</a></dt> - <dd>Des conseils et astuces pour tirer le meilleur parti des animations CSS. Dans cet article, on décrit une technique qui permet de relancer une animation qui a déjà été exécutée, ce que l'API ne permet pas de faire nativement.</dd> -</dl> +- [Détecter la prise en charge des animations CSS](/fr/docs/Web/CSS/CSS_Animations/Detecting_CSS_animation_support) + - : Cet article décrit une technique permettant de détecter si le navigateur prend en charge les animations CSS. +- [Manipuler les animations CSS](/fr/docs/Web/CSS/CSS_Animations/Utiliser_les_animations_CSS) + - : Un tutoriel pas-à-pas qui explique comment créer des animations CSS. Cet article décrit les différentes propriétés et règles @ relatives aux animations et comment elles interagissent. +- [Conseils pour les animations CSS](/fr/docs/Web/CSS/Animations_CSS/Conseils) + - : Des conseils et astuces pour tirer le meilleur parti des animations CSS. Dans cet article, on décrit une technique qui permet de relancer une animation qui a déjà été exécutée, ce que l'API ne permet pas de faire nativement. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">État</th> - <th scope="col">Commentaires</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{SpecName('CSS3 Animations')}}</td> - <td>{{Spec2('CSS3 Animations')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | État | Commentaires | +| ---------------------------------------- | ------------------------------------ | -------------------- | +| {{SpecName('CSS3 Animations')}} | {{Spec2('CSS3 Animations')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<h3 id="Propriété_animation">Propriété <code>animation</code></h3> +### Propriété `animation` -<p>{{Compat("css.properties.animation")}}</p> +{{Compat("css.properties.animation")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/CSS/CSS_Transitions">Les transitions CSS</a> qui permettent de déclencher des animations suite à des actions utilisateur.</li> -</ul> +- [Les transitions CSS](/fr/docs/Web/CSS/CSS_Transitions) qui permettent de déclencher des animations suite à des actions utilisateur. diff --git a/files/fr/web/css/css_animations/tips/index.md b/files/fr/web/css/css_animations/tips/index.md index 011e1c6e3a..2f3ea5c601 100644 --- a/files/fr/web/css/css_animations/tips/index.md +++ b/files/fr/web/css/css_animations/tips/index.md @@ -10,19 +10,20 @@ tags: translation_of: Web/CSS/CSS_Animations/Tips original_slug: Web/CSS/Animations_CSS/Conseils --- -<div>{{CSSRef}}</div> +{{CSSRef}} -<p>Les animations CSS permettent de réaliser réaliser des effets incroyables en mainpulant les éléments de vos documents et applications.. Cependant, il est parfois compliqué d'obtenir l'effet désiré. Dans cet article, on explorera différents conseils visant à simplifier la réalisation d'animations.</p> +Les animations CSS permettent de réaliser réaliser des effets incroyables en mainpulant les éléments de vos documents et applications.. Cependant, il est parfois compliqué d'obtenir l'effet désiré. Dans cet article, on explorera différents conseils visant à simplifier la réalisation d'animations. -<h2 id="Relancer_une_animation">Relancer une animation</h2> +## Relancer une animation -<p>La spécifications des <a href="/en-US/docs/Web/CSS/CSS_Animations">animations CSS</a> ne permet pas de relancer une animation. Il n'existe pas de méthode <code>resetAnimation()</code> qui puisse être appelée sur les éléments et on ne peut pas utiliser la propriété {{cssxref("animation-play-state")}} pour la redéfinir sur <code>"running"</code>. Pour obtenir cet effet qui permette de relancer une animation terminée, on utilisera cette astuce.</p> +La spécifications des [animations CSS](/en-US/docs/Web/CSS/CSS_Animations) ne permet pas de relancer une animation. Il n'existe pas de méthode `resetAnimation()` qui puisse être appelée sur les éléments et on ne peut pas utiliser la propriété {{cssxref("animation-play-state")}} pour la redéfinir sur `"running"`. Pour obtenir cet effet qui permette de relancer une animation terminée, on utilisera cette astuce. -<h3 id="CSS">CSS</h3> +### CSS -<p>Tout d'abord, on définit l'animation avec des règles CSS (certaines règles superflues sont masquées ici à des fins de concision).</p> +Tout d'abord, on définit l'animation avec des règles CSS (certaines règles superflues sont masquées ici à des fins de concision). -<pre class="brush: css hidden">.runButton { +```css hidden +.runButton { cursor: pointer; width: 300px; border: 1px solid black; @@ -34,9 +35,11 @@ original_slug: Web/CSS/Animations_CSS/Conseils color: white; background-color: darkgreen; font: 14px "Open Sans", "Arial", sans-serif; -}</pre> +} +``` -<pre class="brush: css">@keyframes colorchange { +```css +@keyframes colorchange { 0% { background: yellow } 100% { background: blue } } @@ -49,66 +52,70 @@ original_slug: Web/CSS/Animations_CSS/Conseils .changing { animation: colorchange 2s; -}</pre> +} +``` -<p>On a deux classes qui sont définies. La classe <code>box</code> qui décrit l'apparence de la boîte, sans aucune information relative à l'animation. Les détails de l'animation sont inclus dans la classe <code>changing</code> qui indique que les {{cssxref("@keyframes")}} intitulées <code>colorchange</code> doivent être utilisées sur une période de deux secondes afin d'animer la boîte.</p> +On a deux classes qui sont définies. La classe `box` qui décrit l'apparence de la boîte, sans aucune information relative à l'animation. Les détails de l'animation sont inclus dans la classe `changing` qui indique que les {{cssxref("@keyframes")}} intitulées `colorchange` doivent être utilisées sur une période de deux secondes afin d'animer la boîte. -<p>Si on n'utilise que ces règles, la boîte n'est pas animée lorsqu'elle s'affiche.</p> +Si on n'utilise que ces règles, la boîte n'est pas animée lorsqu'elle s'affiche. -<h3 id="HTML">HTML</h3> +### HTML -<p>Voici le fragment de HTML où on utilise un élément {{HTMLElement("div")}} qu'on veut animer et un bouton pour lancer (ou relancer) l'animation.</p> +Voici le fragment de HTML où on utilise un élément {{HTMLElement("div")}} qu'on veut animer et un bouton pour lancer (ou relancer) l'animation. -<pre class="brush: html"><div class="box"> -</div> +```html +<div class="box"> +</div> -<div class="runButton" onclick="play()">Cliquer pour lancer l'animation</div></pre> +<div class="runButton" onclick="play()">Cliquer pour lancer l'animation</div> +``` -<h3 id="JavaScript">JavaScript</h3> +### JavaScript -<p>Enfin, voyons le JavaScript qui sera utilisé. Cette technique repose principalement sur la fonction <code>play()</code> qui est appelée lorsque l'utilisateur clique sur le bouton.</p> +Enfin, voyons le JavaScript qui sera utilisé. Cette technique repose principalement sur la fonction `play()` qui est appelée lorsque l'utilisateur clique sur le bouton. -<pre class="brush: js">function play() { +```js +function play() { document.querySelector(".box").className = "box"; window.requestAnimationFrame(function(time) { window.requestAnimationFrame(function(time) { document.querySelector(".box").className = "box changing"; }); }); -}</pre> +} +``` -<p>Cela paraît un peu étrange. Mais afin que l'animation soit lancée à nouveau, il faut : retirer l'effet d'animation, lancer le recalcul des styles dans le document pour que cette action soit enregistrée puis ajouter l'animation à nouveau sur l'élément.</p> +Cela paraît un peu étrange. Mais afin que l'animation soit lancée à nouveau, il faut : retirer l'effet d'animation, lancer le recalcul des styles dans le document pour que cette action soit enregistrée puis ajouter l'animation à nouveau sur l'élément. -<p>Voici ce qui se produit lorsque la fonction <code>play()</code> est appelée :</p> +Voici ce qui se produit lorsque la fonction `play()` est appelée : -<ol> - <li>On réinitialise la liste des classes CSS de la boîte avec uniquement <code>box</code>. Ce faisant, on retire toutes les autres classes qui s'appliquaient à la boîte, y compris la classe <code>changing</code> en charge de l'animation. Autrement dit, on retire l'effet d'animation. Toutefois, ces modifications de classes n'auront pas d'effet tant que les styles ne sont pas recalculés et qu'un rafraîchissement est réalisé pour appliquer ces modifications.</li> - <li>Afin de s'assurer que les styles sont recalculés, on utilise {{domxref("window.requestAnimationFrame()")}} en définissant une fonction de rappel (<em>callback</em>). La fonction de rappel est exécutée juste avant le prochain rafraîchissement du document. Seul problème : avant le rafraîchissement, le recalcul des styles n'a pas encore eu lieu. Aussi…</li> - <li>Notre fonction de rappel invoque à nouveau <code>requestAnimationFrame()</code> ! Cette fois, la fonction de rappel est lancée avant le prochain rafraîchissement qui aura lieu après le recalcul des styles. Dans cette nouvelle fonction de rappel, on ajoute la classe <code>changing</code> à la boîte afin que l'animation soit lancée lors du rafraîchissement.</li> -</ol> +1. On réinitialise la liste des classes CSS de la boîte avec uniquement `box`. Ce faisant, on retire toutes les autres classes qui s'appliquaient à la boîte, y compris la classe `changing` en charge de l'animation. Autrement dit, on retire l'effet d'animation. Toutefois, ces modifications de classes n'auront pas d'effet tant que les styles ne sont pas recalculés et qu'un rafraîchissement est réalisé pour appliquer ces modifications. +2. Afin de s'assurer que les styles sont recalculés, on utilise {{domxref("window.requestAnimationFrame()")}} en définissant une fonction de rappel (_callback_). La fonction de rappel est exécutée juste avant le prochain rafraîchissement du document. Seul problème : avant le rafraîchissement, le recalcul des styles n'a pas encore eu lieu. Aussi… +3. Notre fonction de rappel invoque à nouveau `requestAnimationFrame()` ! Cette fois, la fonction de rappel est lancée avant le prochain rafraîchissement qui aura lieu après le recalcul des styles. Dans cette nouvelle fonction de rappel, on ajoute la classe `changing` à la boîte afin que l'animation soit lancée lors du rafraîchissement. -<p>Bien entendu, on ajoutera également un gestion d'événement au bouton pour que l'ensemble soit bien branché :</p> +Bien entendu, on ajoutera également un gestion d'événement au bouton pour que l'ensemble soit bien branché : -<pre class="brush: js">document.querySelector(".runButton").addEventListener("click", play, false);</pre> +```js +document.querySelector(".runButton").addEventListener("click", play, false); +``` -<h3 id="Résultat">Résultat</h3> +### Résultat -<p>{{EmbedLiveSample('Relancer_une_animation', 320, 160)}}</p> +{{EmbedLiveSample('Relancer_une_animation', 320, 160)}} -<h2 id="Arrêter_une_animation">Arrêter une animation</h2> +## Arrêter une animation -<p>Si on retire la propriété {{cssxref("animation-name")}} appliquée à un élément, l'animation s'arrêtera au prochain état défini. Si on souhaite plutôt que l'animation se termine et parvienne à un point d'arrêt, il faudra utiliser une autre approche. Voici quelques pistes :</p> +Si on retire la propriété {{cssxref("animation-name")}} appliquée à un élément, l'animation s'arrêtera au prochain état défini. Si on souhaite plutôt que l'animation se termine et parvienne à un point d'arrêt, il faudra utiliser une autre approche. Voici quelques pistes : -<ol> - <li>L'animation doit être la plus isolée possible et on ne doit pas reposer sur <code>animation-direction: alternate</code>. Il faut une animation explicitement séquencée qui parcourt l'ensemble de l'animation en un cycle.</li> - <li>Utiliser JavaScript pour retirer l'animation lorsque l'évènement <code>animationiteration</code> se déclenche.</li> -</ol> +1. L'animation doit être la plus isolée possible et on ne doit pas reposer sur `animation-direction: alternate`. Il faut une animation explicitement séquencée qui parcourt l'ensemble de l'animation en un cycle. +2. Utiliser JavaScript pour retirer l'animation lorsque l'évènement `animationiteration` se déclenche. -<p>Ces pistes sont utilisées dans la démonstration suivante :</p> +Ces pistes sont utilisées dans la démonstration suivante : -<h3 id="CSS_2">CSS</h3> +### CSS -<pre class="brush: css">.slidein { +```css +.slidein { animation-duration: 5s; animation-name: slidein; animation-iteration-count: infinite; @@ -129,36 +136,36 @@ original_slug: Web/CSS/Animations_CSS/Conseils margin-left: 0%; } } -</pre> +``` -<h3 id="HTML_2">HTML</h3> +### HTML -<pre class="brush: html"><h1 id="watchme">Cliquer pour arrêter</h1> -</pre> +```html +<h1 id="watchme">Cliquer pour arrêter</h1> +``` -<h3 id="JavaScript_2">JavaScript</h3> +### JavaScript -<pre class="brush: js">let watchme = document.getElementById('watchme') +```js +let watchme = document.getElementById('watchme') watchme.className = 'slidein' -const listener = (e) => { +const listener = (e) => { watchme.className = 'slidein stopped' } -watchme.addEventListener('click', () => +watchme.addEventListener('click', () => watchme.addEventListener('animationiteration', listener, false) ) -</pre> +``` -<h3 id="Résultat_2">Résultat</h3> +### Résultat -<p>{{EmbedLiveSample("Arrêter_une_animation")}}</p> +{{EmbedLiveSample("Arrêter_une_animation")}} -<p><a href="https://jsfiddle.net/morenoh149/5ty5a4oy/">Voir cette démo</a></p> +[Voir cette démo](https://jsfiddle.net/morenoh149/5ty5a4oy/) -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/CSS/Animations_CSS/Utiliser_les_animations_CSS">Manipuler les animations CSS</a></li> - <li><a href="/fr/docs/Web/CSS/Animations_CSS">Les animations CSS</a></li> - <li>{{domxref("Window.requestAnimationFrame()")}}</li> -</ul> +- [Manipuler les animations CSS](/fr/docs/Web/CSS/Animations_CSS/Utiliser_les_animations_CSS) +- [Les animations CSS](/fr/docs/Web/CSS/Animations_CSS) +- {{domxref("Window.requestAnimationFrame()")}} diff --git a/files/fr/web/css/css_animations/using_css_animations/index.md b/files/fr/web/css/css_animations/using_css_animations/index.md index 2c0364c3f4..d2a8d98d17 100644 --- a/files/fr/web/css/css_animations/using_css_animations/index.md +++ b/files/fr/web/css/css_animations/using_css_animations/index.md @@ -9,64 +9,59 @@ tags: translation_of: Web/CSS/CSS_Animations/Using_CSS_animations original_slug: Web/CSS/Animations_CSS/Utiliser_les_animations_CSS --- -<div>{{CSSRef}}</div> +{{CSSRef}} -<p>Les <strong>animations CSS</strong> permettent de créer des transitions entre deux états de mise en forme. Une animation est décrite par deux choses : des propriétés propres à l'animation d'une part et un ensemble d'étapes (<em>keyframes</em>) qui indiquent l'état initial, final et éventuellement des états intermédiaires d'autre part.</p> +Les **animations CSS** permettent de créer des transitions entre deux états de mise en forme. Une animation est décrite par deux choses : des propriétés propres à l'animation d'une part et un ensemble d'étapes (_keyframes_) qui indiquent l'état initial, final et éventuellement des états intermédiaires d'autre part. -<p>Trois avantages permettent de distinguer les animations CSS des techniques d'animations utilisant JavaScript :</p> +Trois avantages permettent de distinguer les animations CSS des techniques d'animations utilisant JavaScript : -<ol> - <li>On peut aisément obtenir des animations simples sans avoir à connaître JavaScript.</li> - <li>Les animations s'exécuteront correctement même lorsque le système est soumis à une charge modérée. Il est possible que des animations JavaScript s'exécutent lentement si elles sont mal décrites. Dans le cadre des animations CSS, le moteur de rendu peut utiliser certaines techniques (comme le <em>frame-skipping</em>) afin que le résultat obtenu soit aussi fluide que possible.</li> - <li>En laissant le contrôle de l'animation au navigateur, celui-ci peut optimiser les performances et l'efficacité du système, par exemple en réduisant la fréquence de mise à jour des animations qui sont exécutées dans des onglets qui ne sont pas visibles à l'écran.</li> -</ol> +1. On peut aisément obtenir des animations simples sans avoir à connaître JavaScript. +2. Les animations s'exécuteront correctement même lorsque le système est soumis à une charge modérée. Il est possible que des animations JavaScript s'exécutent lentement si elles sont mal décrites. Dans le cadre des animations CSS, le moteur de rendu peut utiliser certaines techniques (comme le _frame-skipping_) afin que le résultat obtenu soit aussi fluide que possible. +3. En laissant le contrôle de l'animation au navigateur, celui-ci peut optimiser les performances et l'efficacité du système, par exemple en réduisant la fréquence de mise à jour des animations qui sont exécutées dans des onglets qui ne sont pas visibles à l'écran. -<h2 id="Paramétrer_l'animation">Paramétrer l'animation</h2> +## Paramétrer l'animation -<p>Pour créer une animation CSS, il faut utiliser la propriété raccourcie {{cssxref("animation")}} ou les propriétés détaillées correspondantes sur un ou plusieurs éléments. Cette propriété permet de configurer la durée, le minutage et d'autres détails à propos de l'animation. <strong>Attention, cela ne détermine pas l'apparence visuelle de l'animation.</strong> Celle-ci est définie en utilisant des règles CSS de mise en forme au sein de la règle @ {{cssxref("@keyframes")}} comme décrit ci-après.</p> +Pour créer une animation CSS, il faut utiliser la propriété raccourcie {{cssxref("animation")}} ou les propriétés détaillées correspondantes sur un ou plusieurs éléments. Cette propriété permet de configurer la durée, le minutage et d'autres détails à propos de l'animation. **Attention, cela ne détermine pas l'apparence visuelle de l'animation.** Celle-ci est définie en utilisant des règles CSS de mise en forme au sein de la règle @ {{cssxref("@keyframes")}} comme décrit ci-après. -<p>Les propriétés détaillées rattachées à la propriété raccourcie {{cssxref("animation")}} sont :</p> +Les propriétés détaillées rattachées à la propriété raccourcie {{cssxref("animation")}} sont : -<dl> - <dt>{{cssxref("animation-delay")}}</dt> - <dd>Cette propriété définit le délai entre le moment où l'élément est chargé et le moment où l'animation commence.</dd> - <dt>{{cssxref("animation-direction")}}</dt> - <dd>Cette propriété indique si l'animation doit alterner entre deux directions de progressions (faire des allers-retours) ou recommencer au début à chaque cycle de répétition.</dd> - <dt>{{cssxref("animation-duration")}}</dt> - <dd>Cette propriété définit la durée d'un cycle de l'animation.</dd> - <dt>{{cssxref("animation-fill-mode")}}</dt> - <dd>Cette propriété indique les valeurs qui doivent être appliquées aux propriétés avant et après l'exécution de l'animation.</dd> - <dt>{{cssxref("animation-iteration-count")}}</dt> - <dd>Cette propriété détermine le nombre de fois que l'animation est répétée. On peut utiliser le mot-clé <code>infinite</code> afin de répéter une animation infiniment.</dd> - <dt>{{cssxref("animation-name")}}</dt> - <dd>Cette propriété permet de déclarer un nom qui pourra être utilisé comme référence à l'animation pour la règle @ {{cssxref("@keyframes")}}.</dd> - <dt>{{cssxref("animation-play-state")}}</dt> - <dd>Cette propriété permet d'interrompre (« pause ») ou de reprendre l'exécution d'une animation.</dd> - <dt>{{cssxref("animation-timing-function")}}</dt> - <dd>Cette propriété configure la fonction de minutage d'une animation, autrement dit comment celle-ci accélère entre l'état initial et l'état final notamment grâce à des fonctions décrivant des courbes d'accélération.</dd> -</dl> +- {{cssxref("animation-delay")}} + - : Cette propriété définit le délai entre le moment où l'élément est chargé et le moment où l'animation commence. +- {{cssxref("animation-direction")}} + - : Cette propriété indique si l'animation doit alterner entre deux directions de progressions (faire des allers-retours) ou recommencer au début à chaque cycle de répétition. +- {{cssxref("animation-duration")}} + - : Cette propriété définit la durée d'un cycle de l'animation. +- {{cssxref("animation-fill-mode")}} + - : Cette propriété indique les valeurs qui doivent être appliquées aux propriétés avant et après l'exécution de l'animation. +- {{cssxref("animation-iteration-count")}} + - : Cette propriété détermine le nombre de fois que l'animation est répétée. On peut utiliser le mot-clé `infinite` afin de répéter une animation infiniment. +- {{cssxref("animation-name")}} + - : Cette propriété permet de déclarer un nom qui pourra être utilisé comme référence à l'animation pour la règle @ {{cssxref("@keyframes")}}. +- {{cssxref("animation-play-state")}} + - : Cette propriété permet d'interrompre (« pause ») ou de reprendre l'exécution d'une animation. +- {{cssxref("animation-timing-function")}} + - : Cette propriété configure la fonction de minutage d'une animation, autrement dit comment celle-ci accélère entre l'état initial et l'état final notamment grâce à des fonctions décrivant des courbes d'accélération. -<h2 id="Définir_les_étapes_composant_une_animation_(keyframes)">Définir les étapes composant une animation (<code>@keyframes</code>)</h2> +## Définir les étapes composant une animation (`@keyframes`) -<p>Une fois qu'on a définit les propriétés propres à l'animation, on doit définir la mise en forme qui évolue lors de cette animation. Pour cela on définit deux étapes ou plus grâce à la règle @ {{cssxref("@keyframes")}}. Chaque étape décrit la façon dont l'élément animé doit être affiché à un instant donné lors de l'animation.</p> +Une fois qu'on a définit les propriétés propres à l'animation, on doit définir la mise en forme qui évolue lors de cette animation. Pour cela on définit deux étapes ou plus grâce à la règle @ {{cssxref("@keyframes")}}. Chaque étape décrit la façon dont l'élément animé doit être affiché à un instant donné lors de l'animation. -<p>La durée de l'animation est définie avant et la règle <code>@keyframes</code> utilise donc des valeurs exprimées en pourcentages (type CSS {{cssxref("percentage")}}) pour indiquer l'instant correspondant à cet état. 0% indique l'état initial de l'animation et 100% indique l'état final. Ces deux états étant très important, il existe deux alias pour les décrire : <code>from</code> et <code>to</code>. Ces états sont optionnels et si <code>from</code>/<code>0%</code> ou <code>to</code>/<code>100%</code> ne sont pas définis, le navigateur utilisera les valeurs calculées des différentes propriétés.</p> +La durée de l'animation est définie avant et la règle `@keyframes` utilise donc des valeurs exprimées en pourcentages (type CSS {{cssxref("percentage")}}) pour indiquer l'instant correspondant à cet état. 0% indique l'état initial de l'animation et 100% indique l'état final. Ces deux états étant très important, il existe deux alias pour les décrire : `from` et `to`. Ces états sont optionnels et si `from`/`0%` ou `to`/`100%` ne sont pas définis, le navigateur utilisera les valeurs calculées des différentes propriétés. -<p>Il est également possible d'ajouter des étapes intermédiaires, entre l'état initial et l'état final de l'animation.</p> +Il est également possible d'ajouter des étapes intermédiaires, entre l'état initial et l'état final de l'animation. -<h2 id="Exemples">Exemples</h2> +## Exemples -<div class="note"> - <p><strong>Note :</strong> Les exemples ci-après n'utilisent pas la version préfixée des propriétés liées aux animations. Il est possible que d'anciens navigateurs (antérieurs à 2017) aient besoin de ces préfixes pour fonctionner auquel cas l'exemple « <em>live</em> » ne fonctionnera pas.</p> -</div> +> **Note :** Les exemples ci-après n'utilisent pas la version préfixée des propriétés liées aux animations. Il est possible que d'anciens navigateurs (antérieurs à 2017) aient besoin de ces préfixes pour fonctionner auquel cas l'exemple « _live_ » ne fonctionnera pas. -<h3 id="Utiliser_une_animation_pour_que_le_texte_traverse_la_fenêtre_du_navigateur">Utiliser une animation pour que le texte traverse la fenêtre du navigateur</h3> +### Utiliser une animation pour que le texte traverse la fenêtre du navigateur -<p>Dans cet exemple simple, on met en forme l'élément {{HTMLElement("p")}} afin que le texte passe de la droite vers la gauche de l'écran</p> +Dans cet exemple simple, on met en forme l'élément {{HTMLElement("p")}} afin que le texte passe de la droite vers la gauche de l'écran -<p>On notera que les animations comme celle-ci peuvent agrandir la page qui sera alors plus grande que la fenêtre du navigateur. Pour éviter ce problème, on pourra placer l'élément animé dans un conteneur et utiliser {{cssxref("overflow")}}<code>:hidden</code> sur ce conteneur.</p> +On notera que les animations comme celle-ci peuvent agrandir la page qui sera alors plus grande que la fenêtre du navigateur. Pour éviter ce problème, on pourra placer l'élément animé dans un conteneur et utiliser {{cssxref("overflow")}}`:hidden` sur ce conteneur. -<pre class="brush: css">p { +```css +p { animation-duration: 3s; animation-name: slidein; } @@ -82,39 +77,40 @@ original_slug: Web/CSS/Animations_CSS/Utiliser_les_animations_CSS width: 100%; } } -</pre> +``` -<p>Dans cet exemple, on indique dans les propriétés de {{HTMLElement("p")}} que l'animation doit durer trois secondes entre le début et la fin (c'est le rôle de {{cssxref("animation-duration")}}) et que le nom utilisé par la règle @ {{cssxref("@keyframes")}} pour faire référence à cette animation sera <code>slidein</code>.</p> +Dans cet exemple, on indique dans les propriétés de {{HTMLElement("p")}} que l'animation doit durer trois secondes entre le début et la fin (c'est le rôle de {{cssxref("animation-duration")}}) et que le nom utilisé par la règle @ {{cssxref("@keyframes")}} pour faire référence à cette animation sera `slidein`. -<p>Ici, on ne souhaite illustrer que les animations mais on aurait très bien pu avoir d'autres règles « classiques » pour d'autres propriétés à déclarer sur l'élément.</p> +Ici, on ne souhaite illustrer que les animations mais on aurait très bien pu avoir d'autres règles « classiques » pour d'autres propriétés à déclarer sur l'élément. -<p>Les étapes (<em>keyframes</em>) de l'animation sont définies via la règle @ {{cssxref("@keyframes")}}. Dans ce premier exemple, on a uniquement deux étapes. La première décrit l'état à 0% (on utilise l'alias <code>from</code>). Pour cet état initial, on veut que la marge gauche de l'élément soit à 100% (c'est-à-dire tout à droite de l'élément englobant) et que la largeur de l'élément soit de 300% (soit trois fois la largeur de l'élément englobant). Cela permet que le contenu soit dessiné hors de la fenêtre lors de l'état initial.</p> +Les étapes (_keyframes_) de l'animation sont définies via la règle @ {{cssxref("@keyframes")}}. Dans ce premier exemple, on a uniquement deux étapes. La première décrit l'état à 0% (on utilise l'alias `from`). Pour cet état initial, on veut que la marge gauche de l'élément soit à 100% (c'est-à-dire tout à droite de l'élément englobant) et que la largeur de l'élément soit de 300% (soit trois fois la largeur de l'élément englobant). Cela permet que le contenu soit dessiné hors de la fenêtre lors de l'état initial. -<p>La seconde, et dernière, étape, se produit à 100% d'avancement (dans l'exemple, on utilise l'alias <code>to</code>). Pour cet état, la marge gauche vaut 0% et la largeur de l'élément vaut 100%. De cette façon le contenu finit sa course contre le borde gauche de la zone de contenu.</p> +La seconde, et dernière, étape, se produit à 100% d'avancement (dans l'exemple, on utilise l'alias `to`). Pour cet état, la marge gauche vaut 0% et la largeur de l'élément vaut 100%. De cette façon le contenu finit sa course contre le borde gauche de la zone de contenu. -<pre class="brush: html"><p>The Caterpillar and Alice looked at each other for some time in silence: +```html +<p>The Caterpillar and Alice looked at each other for some time in silence: at last the Caterpillar took the hookah out of its mouth, and addressed -her in a languid, sleepy voice.</p> -</pre> +her in a languid, sleepy voice.</p> +``` -<div class="note"> -<p><strong>Note :</strong> Pour observer l'animation, il peut être nécessaire de rafraîchir la page ou d'utiliser la vue CodePen/JSFiddle.</p> -</div> +> **Note :** Pour observer l'animation, il peut être nécessaire de rafraîchir la page ou d'utiliser la vue CodePen/JSFiddle. -<p>{{EmbedLiveSample("Définir_les_étapes_composant_une_animation_(@keyframes)","100%","250")}}</p> +{{EmbedLiveSample("Définir_les_étapes_composant_une_animation_(@keyframes)","100%","250")}} -<h3 id="Ajouter_une_autre_étape">Ajouter une autre étape</h3> +### Ajouter une autre étape -<p>Ajoutons une autre étape à partir de l'animation précédente. Ici, nous allons agrandir la taille de police utilisée lorsque l'élément arrive de la droite avant qu'elle ne réduise à nouveau pour revenir à la taille originale une fois arrivée la fin de l'animation. Pour cela, on ajoute une étape dans la règle @ <code>@keyframes</code> :</p> +Ajoutons une autre étape à partir de l'animation précédente. Ici, nous allons agrandir la taille de police utilisée lorsque l'élément arrive de la droite avant qu'elle ne réduise à nouveau pour revenir à la taille originale une fois arrivée la fin de l'animation. Pour cela, on ajoute une étape dans la règle @ `@keyframes` : -<pre class="brush: css">75% { +```css +75% { font-size: 300%; margin-left: 25%; width: 150%; } -</pre> +``` -<pre class="brush: css hidden">p { +```css hidden +p { animation-duration: 3s; animation-name: slidein; } @@ -136,33 +132,34 @@ her in a languid, sleepy voice.</p> width: 100%; } } -</pre> +``` -<pre class="brush: html hidden"><p>The Caterpillar and Alice looked at each other for some time in silence: +```html hidden +<p>The Caterpillar and Alice looked at each other for some time in silence: at last the Caterpillar took the hookah out of its mouth, and addressed -her in a languid, sleepy voice.</p> -</pre> +her in a languid, sleepy voice.</p> +``` -<p>Cette nouvelle étape indique au navigateur que, lorsqu'on atteint 75% d'avancement, il faut que la marge à gauche soit de 25% et que la largeur du paragraphe représente 150% de la largeur de l'élément englobant.</p> +Cette nouvelle étape indique au navigateur que, lorsqu'on atteint 75% d'avancement, il faut que la marge à gauche soit de 25% et que la largeur du paragraphe représente 150% de la largeur de l'élément englobant. -<div class="note"> -<p><strong>Note :</strong> Pour observer l'animation, il peut être nécessaire de rafraîchir la page ou d'utiliser la vue CodePen/JSFiddle.</p> -</div> +> **Note :** Pour observer l'animation, il peut être nécessaire de rafraîchir la page ou d'utiliser la vue CodePen/JSFiddle. -<p>{{EmbedLiveSample("Ajouter_une_autre_étape","100%","250")}}</p> +{{EmbedLiveSample("Ajouter_une_autre_étape","100%","250")}} -<h3 id="Répéter_une_animation">Répéter une animation</h3> +### Répéter une animation -<p>Pour que l'animation se répète, il suffit d'utiliser la propriété {{cssxref("animation-iteration-count")}} et d'indiquer le nombre de répétitions souhaitées. Ici, on utilise la valeur <code>infinite</code> pour que l'animation se répète à l'infini :</p> +Pour que l'animation se répète, il suffit d'utiliser la propriété {{cssxref("animation-iteration-count")}} et d'indiquer le nombre de répétitions souhaitées. Ici, on utilise la valeur `infinite` pour que l'animation se répète à l'infini : -<pre class="brush: css">p { +```css +p { animation-duration: 3s; animation-name: slidein; animation-iteration-count: infinite; } -</pre> +``` -<pre class="brush: css hidden">@keyframes slidein { +```css hidden +@keyframes slidein { from { margin-left: 100%; width: 300%; @@ -173,28 +170,31 @@ her in a languid, sleepy voice.</p> width: 100%; } } -</pre> +``` -<pre class="brush: html hidden"><p>The Caterpillar and Alice looked at each other for some time in silence: +```html hidden +<p>The Caterpillar and Alice looked at each other for some time in silence: at last the Caterpillar took the hookah out of its mouth, and addressed -her in a languid, sleepy voice.</p> -</pre> +her in a languid, sleepy voice.</p> +``` -<p>{{EmbedLiveSample("Répéter_une_animation","100%","250")}}</p> +{{EmbedLiveSample("Répéter_une_animation","100%","250")}} -<h3 id="Obtenir_un_effet_aller-retour">Obtenir un effet aller-retour</h3> +### Obtenir un effet aller-retour -<p>On a donc une animation qui se répète mais on obtient un résultat étrange, l'animation redémarre à chaque fois depuis l'état initial. Si on veut que le texte parcourt l'écran de droite à gauche puis de gauche à droite, on pourra utiliser la propriété {{cssxref("animation-direction")}} avec la valeur <code>alternate</code> :</p> +On a donc une animation qui se répète mais on obtient un résultat étrange, l'animation redémarre à chaque fois depuis l'état initial. Si on veut que le texte parcourt l'écran de droite à gauche puis de gauche à droite, on pourra utiliser la propriété {{cssxref("animation-direction")}} avec la valeur `alternate` : -<pre class="brush: css">p { +```css +p { animation-duration: 3s; animation-name: slidein; animation-iteration-count: infinite; animation-direction: alternate; } -</pre> +``` -<pre class="brush: css hidden">@keyframes slidein { +```css hidden +@keyframes slidein { from { margin-left: 100%; width: 300%; @@ -205,70 +205,79 @@ her in a languid, sleepy voice.</p> width: 100%; } } -</pre> +``` -<pre class="brush: html hidden"><p>The Caterpillar and Alice looked at each other for some time in silence: +```html hidden +<p>The Caterpillar and Alice looked at each other for some time in silence: at last the Caterpillar took the hookah out of its mouth, and addressed -her in a languid, sleepy voice.</p> -</pre> +her in a languid, sleepy voice.</p> +``` -<p>{{EmbedLiveSample("Obtenir_un_effet_aller-retour","100%","250")}}</p> +{{EmbedLiveSample("Obtenir_un_effet_aller-retour","100%","250")}} -<h3 id="Utiliser_la_propriété_raccourcie_animation">Utiliser la propriété raccourcie <code>animation</code></h3> +### Utiliser la propriété raccourcie `animation` -<p>La propriété raccourcie {{cssxref("animation")}} permet d'économiser de l'espace. Par exemple, si on prend cette règle :</p> +La propriété raccourcie {{cssxref("animation")}} permet d'économiser de l'espace. Par exemple, si on prend cette règle : -<pre class="brush: css">p { +```css +p { animation-duration: 3s; animation-name: slidein; animation-iteration-count: infinite; animation-direction: alternate; } -</pre> +``` -<p>On peut la réécrire de façon plus concise :</p> +On peut la réécrire de façon plus concise : -<pre class="brush: css">p { +```css +p { animation: 3s infinite alternate slidein; -}</pre> +} +``` -<div class="note"> -<p><strong>Note :</strong> Pour plus de détails, vous pouvez consulter la page de référence sur la propriété {{cssxref("animation")}}.</p> -</div> +> **Note :** Pour plus de détails, vous pouvez consulter la page de référence sur la propriété {{cssxref("animation")}}. -<h3 id="Utiliser_plusieurs_valeurs_pour_différentes_animations">Utiliser plusieurs valeurs pour différentes animations</h3> +### Utiliser plusieurs valeurs pour différentes animations -<p>Les propriétés CSS détaillées permettent d'utiliser plusieurs valeurs, séparées par des virgules. Cela permet de paramétrer plusieurs animations via une seule règle. Prenons quelques exemples.</p> +Les propriétés CSS détaillées permettent d'utiliser plusieurs valeurs, séparées par des virgules. Cela permet de paramétrer plusieurs animations via une seule règle. Prenons quelques exemples. -<p>Dans ce premier exemple, on a trois animations nommées différemment mais qui utilisent la même durée et le même nombre d'itération :</p> +Dans ce premier exemple, on a trois animations nommées différemment mais qui utilisent la même durée et le même nombre d'itération : -<pre class="brush: css">animation-name: fadeInOut, moveLeft300px, bounce; +```css +animation-name: fadeInOut, moveLeft300px, bounce; animation-duration: 3s; -animation-iteration-count: 1;</pre> +animation-iteration-count: 1; +``` -<p>Dans ce deuxième exemple, les trois propriétés ont cette fois des composantes distinctes, pour la durée et le nombre d'itération. Ici, par exemple <code>fadeInOut</code> a une durée de 2.5s et 2 itérations.</p> +Dans ce deuxième exemple, les trois propriétés ont cette fois des composantes distinctes, pour la durée et le nombre d'itération. Ici, par exemple `fadeInOut` a une durée de 2.5s et 2 itérations. -<pre class="brush: css">animation-name: fadeInOut, moveLeft300px, bounce; +```css +animation-name: fadeInOut, moveLeft300px, bounce; animation-duration: 2.5s, 5s, 1s; -animation-iteration-count: 2, 1, 5;</pre> +animation-iteration-count: 2, 1, 5; +``` -<p>Dans ce troisième cas, on a toujours trois animations mais uniquement deux durées et deux nombres d'itération. Lorsqu'il y a moins de valeurs que d'animations, on boucle sur les valeurs. Par exemple, avec le code qui suit, <code>fadeInOut</code> durera <code>2.5s</code>, <code>moveLeft300px</code> durera <code>5s</code>. On arrive à la fin de la liste des valeurs de durée et on reprend donc au début : <code>bounce</code> aura donc une durée de <code>2.5s</code>. Le nombre d'itérations sera affecté de la même façon.</p> +Dans ce troisième cas, on a toujours trois animations mais uniquement deux durées et deux nombres d'itération. Lorsqu'il y a moins de valeurs que d'animations, on boucle sur les valeurs. Par exemple, avec le code qui suit, `fadeInOut` durera `2.5s`, `moveLeft300px` durera `5s`. On arrive à la fin de la liste des valeurs de durée et on reprend donc au début : `bounce` aura donc une durée de `2.5s`. Le nombre d'itérations sera affecté de la même façon. -<pre class="brush: css">animation-name: fadeInOut, moveLeft300px, bounce; +```css +animation-name: fadeInOut, moveLeft300px, bounce; animation-duration: 2.5s, 5s; -animation-iteration-count: 2, 1;</pre> +animation-iteration-count: 2, 1; +``` -<h3 id="Utiliser_les_événements_liés_aux_animations">Utiliser les événements liés aux animations</h3> +### Utiliser les événements liés aux animations -<p>Il est possible d'obtenir des informations et un certain contrôle sur les animations en utilisant l'objet {{domxref("AnimationEvent")}}. Celui-ci peut être utilisé pour détecter quand les animations commencent, finissent et il peut déclencher une nouvelle itération. Chaque événement inclue l'instant auquel il s'est produit et le nom de l'animation qui a déclenché l'événement.</p> +Il est possible d'obtenir des informations et un certain contrôle sur les animations en utilisant l'objet {{domxref("AnimationEvent")}}. Celui-ci peut être utilisé pour détecter quand les animations commencent, finissent et il peut déclencher une nouvelle itération. Chaque événement inclue l'instant auquel il s'est produit et le nom de l'animation qui a déclenché l'événement. -<p>Dans la suite de cet article, nous allons modifier l'exemple précédent pour obtenir des informations supplémentaires sur chaque événement d'animation lorsqu'il se produit afin de mieux voir comment cela fonctionne.</p> +Dans la suite de cet article, nous allons modifier l'exemple précédent pour obtenir des informations supplémentaires sur chaque événement d'animation lorsqu'il se produit afin de mieux voir comment cela fonctionne. -<h4 id="La_feuille_de_style_CSS">La feuille de style CSS</h4> +#### La feuille de style CSS -<p>On commence par rédiger le CSS pour l'animation. Ici, l'animation durera 3 secondes, sera intitulée <code>slidein</code>, se répètera trois fois et changera de direction pour faire des allers-retours. Dans la règle @ {{cssxref("@keyframes")}}, on manipule la largeur et la marge à gauche de l'élément afin que ce dernier traverse l'écran.</p> +On commence par rédiger le CSS pour l'animation. Ici, l'animation durera 3 secondes, sera intitulée `slidein`, se répètera trois fois et changera de direction pour faire des allers-retours. Dans la règle @ {{cssxref("@keyframes")}}, on manipule la largeur et la marge à gauche de l'élément afin que ce dernier traverse l'écran. -<pre class="brush: css">.slidein { +```css +.slidein { animation-duration: 3s; animation-name: slidein; animation-iteration-count: 3; @@ -285,29 +294,32 @@ animation-iteration-count: 2, 1;</pre> margin-left:0%; width:100%; } -}</pre> +} +``` -<h4 id="Les_gestionnaires_d'événements">Les gestionnaires d'événements</h4> +#### Les gestionnaires d'événements -<p>On utilisera JavaScript pour « écouter » les trois événements possibles. Le code qui suit permet de définir les gestionnaires d'événement (à utiliser une fois que le document a été chargé).</p> +On utilisera JavaScript pour « écouter » les trois événements possibles. Le code qui suit permet de définir les gestionnaires d'événement (à utiliser une fois que le document a été chargé). -<pre class="brush: js">var element = document.getElementById("watchme"); +```js +var element = document.getElementById("watchme"); element.addEventListener("animationstart", listener, false); element.addEventListener("animationend", listener, false); element.addEventListener("animationiteration", listener, false); element.className = "slidein"; -</pre> +``` -<p>Ce code est plutôt classique, n'hésitez pas à consulter la documentation de {{domxref("eventTarget.addEventListener()")}} si besoin. Pour finir, ce script attribut une classe sur <code>slidein</code> sur l'élément.</p> +Ce code est plutôt classique, n'hésitez pas à consulter la documentation de {{domxref("eventTarget.addEventListener()")}} si besoin. Pour finir, ce script attribut une classe sur `slidein` sur l'élément. -<p>Quel est l'intérêt ? En fait, l'événement <code>animationstart</code> est déclenché dès que l'animation démarre et cela se produit alors avant l'exécution du script. Pour éviter cela, on démarre l'animation via le script en définissant la classe de l'élément à animer.</p> +Quel est l'intérêt ? En fait, l'événement `animationstart` est déclenché dès que l'animation démarre et cela se produit alors avant l'exécution du script. Pour éviter cela, on démarre l'animation via le script en définissant la classe de l'élément à animer. -<h4 id="Écouter_les_événements">Écouter les événements</h4> +#### Écouter les événements -<p>Les événements sont transmis à la fonction <code>listener()</code> décrite ici :</p> +Les événements sont transmis à la fonction `listener()` décrite ici : -<pre class="brush: js">function listener(event) { +```js +function listener(event) { var l = document.createElement("li"); switch(event.type) { case "animationstart": @@ -322,45 +334,42 @@ element.className = "slidein"; } document.getElementById("output").appendChild(l); } -</pre> +``` -<p>Ce code consulte {{domxref("event.type")}} afin de déterminer l'événement qui s'est produit puis ajoute un élément {{HTMLElement("ul")}} au document pour alimenter un journal des événements.</p> +Ce code consulte {{domxref("event.type")}} afin de déterminer l'événement qui s'est produit puis ajoute un élément {{HTMLElement("ul")}} au document pour alimenter un journal des événements. -<p>Le résultat obtenu devrait ressembler à quelque chose comme :</p> +Le résultat obtenu devrait ressembler à quelque chose comme : -<ul> - <li>Début : durée écoulée : 0</li> - <li>Nouvelle boucle démarrée à : 3.01200008392334</li> - <li>Nouvelle boucle démarrée à : 6.00600004196167</li> - <li>Fin : durée écoulée : 9.234000205993652</li> -</ul> +- Début : durée écoulée : 0 +- Nouvelle boucle démarrée à : 3.01200008392334 +- Nouvelle boucle démarrée à : 6.00600004196167 +- Fin : durée écoulée : 9.234000205993652 -<p>On voit ici que les durées sont proches mais pas exactes. On voit également que, lors de la fin de l'animation, l'événement <code>animationiteration</code> n'est pas envoyé, seul <code>animationend</code> est déclenché.</p> +On voit ici que les durées sont proches mais pas exactes. On voit également que, lors de la fin de l'animation, l'événement `animationiteration` n'est pas envoyé, seul `animationend` est déclenché. -<h4 id="Le_document_HTML">Le document HTML</h4> +#### Le document HTML -<p>Afin d'être tout à fait complet, voici le code HTML qui peut être utilisé et qui contint la liste dans laquelle on enregistrera les événements reçus :</p> +Afin d'être tout à fait complet, voici le code HTML qui peut être utilisé et qui contint la liste dans laquelle on enregistrera les événements reçus : -<pre class="brush: html"><h1 id="watchme">Regardez-moi bouger</h1> -<p> +```html +<h1 id="watchme">Regardez-moi bouger</h1> +<p> Un exemple d'animation CSS pour déplacer - un élément <code>H1</code> sur une page. -</p> -<p> + un élément <code>H1</code> sur une page. +</p> +<p> Voici les événements relatifs aux animations : -</p> -<ul id="output"> -</ul> -</body> -</pre> +</p> +<ul id="output"> +</ul> +</body> +``` -<p>{{EmbedLiveSample('Utiliser_les_événements_liés_aux_animations', '600', '300')}}</p> +{{EmbedLiveSample('Utiliser_les_événements_liés_aux_animations', '600', '300')}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{domxref("AnimationEvent")}}</li> - <li><a href="/fr/docs/Web/CSS/CSS_Animations/Detecting_CSS_animation_support">Détecter la prise en charge des animations CSS</a></li> - <li><a href="/fr/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions">Manipuler les transitions CSS</a></li> - <li><a href="https://www.cssdebutant.com">CSS</a></li> -</ul> +- {{domxref("AnimationEvent")}} +- [Détecter la prise en charge des animations CSS](/fr/docs/Web/CSS/CSS_Animations/Detecting_CSS_animation_support) +- [Manipuler les transitions CSS](/fr/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions) +- [CSS](https://www.cssdebutant.com) |
