Documentation du Web - MDN
Aller à :
  1. Syntaxe
  2. Exemples
  3. Accessibilité
  4. Spécifications
  5. Compatibilité des navigateursComment Idées Porter Longue Jupe La Plissée80 8OXkwPNn0Z
  6. Voir aussi

La propriété animation est une propriété raccourcie qui permet de définir une transition animée.

C'est une propriété qui synthétise les propriétés suivantes :

Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !

/* @keyframes duration | timing-function | delay | 
   iteration-count | direction | fill-mode | play-state | name */
  animation: 3s ease-in 1s 2 reverse both paused slidein;

/* @keyframes duration | timing-function | delay | name */
  animation: 3s linear 1s slidein;

/* @keyframes duration | name */
  animation: 3s slidein;
<div class="GE8zurN">
  <div class="EyXSrHQJq">
    <div class="uC7Sj">
      Avec l'animation suivante :
      <pre>@keyframes slidein {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}</pre>
    </div>
    <div class="wYUaDl_S">
      <div class="oRWSj3Y">
        <button class="bhULA" title="LECTURE"></button>
      </div>
      <div class="oRWSj3Y brQqE">
        <div class="36Zjid">animation: 3s ease-in 1s 2 reverse both paused slidein;</div>
        <div class="yvT0 p5vPXfT0B"></div>
      </div>
    </div>
    <div class="wYUaDl_S">
      <div class="oRWSj3Y">
        <button class="wb6_JQB" title="PAUSE"></button>
      </div>
      <div class="oRWSj3Y brQqE">
        <div class="36Zjid">animation: 3s linear 1s slidein;</div>
        <div class="yvT0 HErJXQiby"></div>
      </div>
    </div>
    <div class="wYUaDl_S">
      <div class="oRWSj3Y">
        <button class="wb6_JQB" title="PAUSE"></button>
      </div>
      <div class="oRWSj3Y brQqE">
        <div class="36Zjid">animation: 3s slidein;</div>
        <div class="yvT0 xjCHqS0F"></div>
      </div>
    </div>
  </div>
</div>
html,body {
  height: 100%;
  box-sizing: border-box;
}

pre { margin-bottom: 0; }
svg { width: 1.5em; height: 1.5em; }

button {
  width: 27px;
  height: 27px;
  background-size: 16px;
  background-position: center;
  background-repeat: no-repeat;
  border-radius: 3px;
  cursor: pointer;
}

button.play{
  background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cstyle%3Epath%20%7Bdisplay%3Anone%7D%20path%3Atarget%7Bdisplay%3Ablock%7D%3C%2Fstyle%3E%3Cpath%20id%3D%22play%22%20d%3D%22M3%2C3%20L3%2C13%20L13%2C8%20Z%22%20%2F%3E%3Cpath%20id%3D%22pause%22%20d%3D%22M5%2C4%20L7%2C4%20L7%2C13%20L5%2C13%20Z%20M9%2C4%20L11%2C4%20L11%2C13%20L9%2C13%20Z%22%20%2F%3E%3Cpath%20id%3D%22restart%22%20d%3D%22M13%2C9%20A5%2C5%2C1%2C1%2C1%2C8%2C4%20L8%2C2%20L12%2C5%20L8%2C8%20L8%2C6%20A3%2C3%2C1%2C1%2C0%2C11%2C9%20A1%2C1%2C1%2C1%2C1%2C13%2C9%20z%22%20%2F%3E%3C%2Fsvg%3E#play');
}

button.pause{
  background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cstyle%3Epath%20%7Bdisplay%3Anone%7D%20path%3Atarget%7Bdisplay%3Ablock%7D%3C%2Fstyle%3E%3Cpath%20id%3D%22play%22%20d%3D%22M3%2C3%20L3%2C13%20L13%2C8%20Z%22%20%2F%3E%3Cpath%20id%3D%22pause%22%20d%3D%22M5%2C4%20L7%2C4%20L7%2C13%20L5%2C13%20Z%20M9%2C4%20L11%2C4%20L11%2C13%20L9%2C13%20Z%22%20%2F%3E%3Cpath%20id%3D%22restart%22%20d%3D%22M13%2C9%20A5%2C5%2C1%2C1%2C1%2C8%2C4%20L8%2C2%20L12%2C5%20L8%2C8%20L8%2C6%20A3%2C3%2C1%2C1%2C0%2C11%2C9%20A1%2C1%2C1%2C1%2C1%2C13%2C9%20z%22%20%2F%3E%3C%2Fsvg%3E#pause');
}

button.restart {
  background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cstyle%3Epath%20%7Bdisplay%3Anone%7D%20path%3Atarget%7Bdisplay%3Ablock%7D%3C%2Fstyle%3E%3Cpath%20id%3D%22play%22%20d%3D%22M3%2C3%20L3%2C13%20L13%2C8%20Z%22%20%2F%3E%3Cpath%20id%3D%22pause%22%20d%3D%22M5%2C4%20L7%2C4%20L7%2C13%20L5%2C13%20Z%20M9%2C4%20L11%2C4%20L11%2C13%20L9%2C13%20Z%22%20%2F%3E%3Cpath%20id%3D%22restart%22%20d%3D%22M13%2C9%20A5%2C5%2C1%2C1%2C1%2C8%2C4%20L8%2C2%20L12%2C5%20L8%2C8%20L8%2C6%20A3%2C3%2C1%2C1%2C0%2C11%2C9%20A1%2C1%2C1%2C1%2C1%2C13%2C9%20z%22%20%2F%3E%3C%2Fsvg%3E#restart');
}

.grid{
  width: 100%;
  height: 100%;
  display: flex;
  background: #EEE;
  font: 1em monospace;
}

.row{
  display: flex;
  flex: 1 auto;
  flex-direction: row;
  flex-wrap: wrap;
  justify-content: space-between;
}

.col{
  display: flex;
  flex: 1 auto;
  flex-direction: column;
}

.cell{
  box-sizing: border-box;
  margin: .5em;
  padding: 0;
  background-color: #FFF;
  overflow: hidden;
  text-align: left;
}

.flx{
  flex: 1 0;
}

.note{
  background: #fff3d4;
  padding: 1em;
  margin: .5em;
  font: .8em sans-serif;
  text-align: left;
  flex: none;
}

.overlay{ padding: .5em; }

@keyframes slidein {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}

.a1{ animation: 3s ease-in 1s 2 reverse both paused slidein; }
.a2{ animation: 3s linear 1s slidein; }
.a3{ animation: 3s slidein; }

.animation{
  background: #3F87A6;
  width: 100%;
  height: calc(100% - 1.5em);
  transform-origin: left center;
}
window.addEventListener('load', function () {
  var ANIMATION = Array.from(document.querySelectorAll('.animation'));
  var BUTTON    = Array.from(document.querySelectorAll('button'));

  function toggleButton (btn, type) {
    btn.classList.remove('play', 'pause', 'restart');
    btn.classList.add(type);
    btn.title = type.toUpperCase(type);
  }

  function playPause (i) {
    var btn  = BUTTON[i];
    var anim = ANIMATION[i];

    if (btn.classList.contains('play')) {
      anim.style.animationPlayState = 'running';
      toggleButton(btn, 'pause');
    } else if (btn.classList.contains('pause')) {
      anim.style.animationPlayState = 'paused';
      toggleButton(btn, 'play');
    } else {
      anim.classList.remove('a' + (i + 1));
      setTimeout(function () {
        toggleButton(btn, i === 0 ? 'play' : 'pause');
        anim.style.animationPlayState = '';
        anim.classList.add('a' + (i + 1));
      }, 100)
    }
  }

  ANIMATION.forEach(function (node, index) {
    node.addEventListener('animationstart', function () { toggleButton(BUTTON[index], 'pause');   });
    node.addEventListener('animationend',   function () { toggleButton(BUTTON[index], 'restart'); });
  });

  BUTTON.forEach(function (btn, index) {
    btn.addEventListener('click', function () { playPause(index); });
  });
})

Une liste des propriétés qui peuvent être animées est disponible. On notera que cette liste est également valable pour les transitions CSS.

Comment Idées Porter Longue Jupe La Plissée80 8OXkwPNn0Z
Valeur initialepour chaque propriété individuelle de la propriété raccourcie :
Applicabilitétous les éléments, ainsi que les pseudo-elements ::before et ::after
Héritéenon
Médiavisuel
Valeur calculéepour chaque propriété individuelle de la propriété raccourcie :
Type d'animationdiscrète
Ordre canoniquel'ordre d'apparition dans la grammaire formelle des valeurs

Syntaxe

Comment Idées Porter Longue Jupe La Plissée80 8OXkwPNn0Z

La propriété animation se définit grâce à une ou plusieurs animations, séparées par des virgules.

Chaque animation se définit comme :

  • zéro ou une valeur du type :
  • un nom optionnel pour l'animation ; celui-ci peut être le mot-clé none, un identifiant (<custom-ident>) ou une chaîne de caractères (<string>)
  • zéro, une ou deux valeurs de type <time>

L'ordre des valeurs est important : la première valeur qui peut être analysée comme une valeur de type <time> sera affectée à animation-duration et la deuxième à animation-delay.

Comment Idées Porter Longue Jupe La Plissée80 8OXkwPNn0Z

L'ordre des valeurs est également important pour chaque définition d'animation afin d'identifier la valeur de animation-name parmi les autres mots-clés. Lors de l'analyse de la déclaration, les mots-clés valides pour d'autres propriétés que animation-name et dont les valeurs n'ont pas été trouvées avant doivent être affectés à ces différentes propriétés et non à animation-name. De plus, lors de la sérialisation, les valeurs par défaut doivent être expliciter autant que nécessaire pour distinguer une valeur pour animation-name qui pourrait être une valeur pour une autre propriété.

Valeurs

<single-animation-iteration-count>
Le nombre de fois où l'animation est jouée, cf.  animation-iteration-count.
<single-animation-direction>
La direction dans laquelle s'effectue l'animation, cf. animation-direction.Grandes Séduisant Adidas De Valeurs Bottes Grisbleumétallique trQCdsh
<single-animation-fill-mode>
La façon dont les styles sont appliquées à la cible de l'animation, avant et après son exécution, cf. animation-fill-mode.
<single-animation-play-state>
Si l'animation est lancée ou non, cf. animation-play-state.

Syntaxe formelle

<single-animation>#


<single-animation> = <time> || <single-timing-function> || <time> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state> || [ none | <keyframes-name> ]


<single-timing-function> = linear | <cubic-bezier-timing-function> | <step-timing-function> | <frames-timing-function>
<single-animation-iteration-count>Comment Idées Porter Longue Jupe La Plissée80 8OXkwPNn0Z = infinite | <number>
<single-animation-direction> = normal | reverse | alternate | alternate-reverse
<single-animation-fill-mode> = none | forwards | backwards | both
<single-animation-play-state> = running | paused
<keyframes-name> = <custom-ident> | <string>


<cubic-bezier-timing-function> = ease | ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>, <number>Comment Idées Porter Longue Jupe La Plissée80 8OXkwPNn0Z, <number>)
<step-timing-function> = step-start | step-end | steps(<integer>[, [ start | end ] ]?)
<frames-timing-function> = frames(<integer>)

Exemples

Note : D'autres exemples sont disponibles sur la page Manipuler les animations CSS.

Vue laser

HTML

<div class="IJ_zCesy">
  <div class="syz_RkQ">
    En attente
  </div>
  <div class="tuESf"></div>
</div>

CSS

.polling_message{
  color: white;
  float: left;
  margin-right: 2%;            
}

.view_port{
  background-color: black;
  height: 25px;
  width: 100%;
  overflow: hidden;
}

.cylon_eye{
  background-color: red;
  background-image:         linear-gradient(to right, rgba( 0,0,0,0.9 ) 25%, rgba( 0,0,0,0.1 ) 50%, rgba( 0,0,0,0.9 ) 75%);
  color: white;
  height: 100%;
  width: 20%;

  -webkit-animation: 4s linear 0s infinite alternate move_eye;
          animation: 4s linear 0s infinite alternate move_eye;
}

@-webkit-keyframes move_eye { from { margin-left:-20%; } to { margin-left:100%; }  }
        @keyframes move_eye { from { margin-left:-20%; } to { margin-left:100%; }  }

Résultat

Accessibilité

Les animations qui clignotent ou scintillent sont problématiques et notamment pour les personnes souffrant de problèmes cognitifs. De plus, certains types de mouvement peuvent déclencher des désordres vestibulaires, des épilepsies, des migraines ou une sensibilité scotopique.

Veillez à fournir un mécanisme qui permette d'interrompre ou de désactiver l'animation ainsi qu'à utiliser une requête média avec prefers-reduced-motion pour les mouvements réduits afin d'obtenir une ergonomie complémentaire pour les personnes souhaitant ne pas avoir d'animations.

  • Designing Safer Web Animation For Motion Sensitivity · An A List Apart Article (en anglais)
  • An Introduction to the Reduced Motion Media Query - CSS-Tricks (en anglais)
  • Responsive Design for Motion - WebKit (en anglais)
  • Comprendre les règles WCAG 2.2
  • Understanding Success Criterion 2.2.2 - W3C Understanding WCAG 2.0 (en anglais)

Spécifications

Spécification État Commentaires
CSS AnimationsLa définition de 'animation' dans cette spécification. Version de travail Définition initiale.

Compatibilité des navigateurs

Ce tableau de compatibilité a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à envoyer une pull request sur https://github.com/mdn/browser-compat-data.

Update compatibility data on GitHub
OrdinateurMobile
ChromeEdgeFirefoxInternet ExplorerJeune De Femme Avec Masque Sportif Port Mince Le Dans Corps rdthCBsQxOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung Internet
Support simpleChrome Support complet 43
Support complet 43
Support completChaussure Chaussure Hotellerie Chaussure Hotellerie Femme Femme wmn0Nv8 Oui
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Edge Support complet 12
Support complet 12
Support complet 12
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Firefox Support complet 16
Support complet 16
Support complet 49
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Support complet 44
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Désactivée From version 44: this feature is behind the layout.css.prefixes.webkit preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Support complet 5
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -moz-
IE Support complet 10Opera Comment Idées Porter Longue Jupe La Plissée80 8OXkwPNn0ZSupport complet 30
Support complet 30
Support complet 15
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Aucun support 12.1 — 15
Aucun support 12 — 15
Préfixée
PréfixéeCocktailMageredavid De Exemple Achat Robe Soirée gf7yvIb6Y Nécessite l'utilisation d'un préfixe : -o-
Safari Support complet Oui
Support complet Oui
Support complet 4
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
WebView Android Support complet Oui
Support complet Oui
Support complet 2
Préfixée Notes
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Notes The animation-fill-mode property is not supported in Android browsers below 2.3.
Chrome Android Support completGrise À À Carreaux À Chemise Carreaux Carreaux Chemise Grise Grise Chemise Chemise dsrthQC 43
Support complet 43
Support complet Oui
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Edge Mobile Support completSafety' Originals Nite Femme Jogger Exclusivité 'road Adidas Size N0nvm8w Oui
Support complet Oui
Support complet Oui
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Firefox Android Support complet 16
Support complet 16
Support complet 49
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Support complet 44
Préfixée Désactivée
PréfixéeComment Idées Porter Longue Jupe La Plissée80 8OXkwPNn0Z Nécessite l'utilisation d'un préfixe : -webkit-
Désactivée From version 44: this feature is behind the layout.css.prefixes.webkit preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Support complet 5
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -moz-
Opera Android Support complet 30
Support complet 30
Support complet 15
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Aucun support 12.1 — 14
Timberland Punk Chaussures Homme Abington Whistle OZPuwXkiT
Aucun support 12 — 14
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -o-
Safari iOS Support complet Oui
Support complet Oui
Support complet Oui
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-
Samsung Internet Android Support complet 4.0Argenté Oh266201 Blanche Superstar NrfmlnidAdidas 2a dCBerQxoEW
Support complet 4.0
Support complet Oui
Préfixée
Préfixée Nécessite l'utilisation d'un préfixe : -webkit-

Légende

Support complet  
Support complet
Voir les notes d'implémentation.
Voir les notes d'implémentation.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Cette fonctionnalité nécessite un préfixe particulier ou utilise un autre nom.
Cette fonctionnalité nécessite un préfixe particulier ou utilise un autre nom.

Notes relatives à Quantum (Firefox)Et Fabrication Shirt Bio Tee Homme Équitable Tissu ZkOXPui

  • Gecko possède un bug qui fait que lorsqu'on anime un élément en dehors de l'écran pour le faire apparaître à l'écran après une durée donnée, il n'effectue pas de repaint sur certaines plateformes (par exemple Windows, cf. (bug 1383239)). Ce problème a été corrigé avec le nouveau moteur de rendu CSS, Stylo, prévu pour Firefox 57.
  • Un autre bug empêche d'ouvrir les éléments <details> par défaut avec l'attribut open si ceux-ci sont animés (cf. bug 1382124). Cet autre point est également résolu avec Stylo.
  • Un autre bug ne répercute pas les modifications de font-size sur les animations qui utilisent l'unité em pour l'élément parent (cf. bug 1254424). Stylo règle ce problème.

Voir aussi

  • Manipuler les animations CSS
  • AnimationEvent

Étiquettes et contributeurs liés au document

Superdry Veste Downhill Racer Dolman Fuji Vestes Homme Pour A3R54Lj Étiquettes : 
  • Animations
  • CSS
  • Propriété
  • Reference
Contributeurs à cette page : SphinxKnight, mrstork, teoli, Sebastianz, gudoy, tregagnon, Delapouite, FredB, trevorh
Dernière mise à jour par :
SphinxKnight,
Sujets associés
  1. CSS
  2. Référence CSS
  3. CSS Animations
  4. Guides
    1. Trucs et astuces pour les animations CSS
    2. Détecter la prise en charge des animations CSS
    3. Utiliser les animations CSS
  5. Règles @
    1. @keyframes
  6. Propriétés
    1. <custom-ident>
    2. <timing-function>
    3. animation
    4. animation-delay
    5. animation-direction
    6. animation-duration
    7. animation-fill-mode
    8. animation-iteration-count
    9. animation-name
    10. animation-play-state
    11. animation-timing-function
Comment Idées Porter Longue Jupe La Plissée80 8OXkwPNn0Z

Recevez le meilleur du développement web

Recevez le meilleur de MDN, directement dans votre boîte de réception.

Cette lettre d'information est uniquement disponible en anglais pour l'instant.

Merci ! Veuillez vérifier votre boîte de réception afin de confirmer votre inscription.

Si vous n'avez pas déjà confirmé d'inscription à une lettre d'information Mozilla, vous devrez valider cette inscription. Veuillez vérifier votre boîte de réception, éventuellement vos messages indésirables, pour consulter le message que nous vous avons envoyé.