Animation-timeline - Propriété CSS

animation-timeline

Résumé des caractéristiques de la propriété animation-timeline

Description rapide
Associe l'animation à autre chose que le temps, par exemple le défilement d'un élément.
Statut
Problèmes de compatibilité
S'applique à
Tous les éléments.
Utilisable sur
HTML
Valeurs prédéfinies
none | auto
Pourcentages
Ne s'appliquent pas.
Valeur initiale
auto
Héritée par défaut
Non.
Type d'animation
Not animable : la propriété animation-timeline ne peut pas être animée.
Module W3C
Module CSS - Animations
Références (W3C)
Statut du document: WD (document de travail)

Schéma de la syntaxe de animation-timeline.

Schéma syntaxique de la propriété CSS animation-timelineSyntaxe de animation-timeline (propriété CSS). auto auto none none name name scroll( scroll( view( view( axis axis axis axis root root nearest nearest self self length length ) ) ) )animation-timeline:;animation-timeline:;
Schéma syntaxique de la propriété animation-timeline.
Cliquez sur les liens du schéma pour plus de précisons sur les valeurs.

Description des termes utilisés sur le schéma :

  • name est un identifiant défini au préalable.
  • axis est l'indication d'un axe : inline, block,x ou y.
  • length est une valeur numérique suivie d'une des unités de dimension.

Description de la propriété animation-timeline.

La propriété animation-timeline permet d'associer une animation à autre chose que le temps.

Par défaut, une animation est une variation de la valeur d'une propriété en fonction du temps, compté à partir du chargement de la page (temps 0). Avec animation-timeline il est possible de faire varier la valeur d'une propriété en fonction d'autre chose que le temps, le plus souvent le défilement (scrolling) d'un élément.

Par exemple : l'opacité de l'élément ci-dessous est associée à son défilement. Attention ! Cela ne fonctionne pas encore avec tous les navigateurs.

En faisant défiler le contenu de cet élément pour en lire la suite, vous constaterez qu'il est de plus en plus difficile de voir les caractères.
En effet, l'opacité de l'élément a été liée à son défilement.
Heureusement que l'opacité ne descend pas à 0 sinon il vous aurait été impossible de lire la fin de ce texte.

 

Valeurs pour animation-timeline.

  • animation-timeline: auto;

    L'animation est synchronisée sur la ligne de temps du document.

  • animation-timeline: none;

    L'animation n'est associée à aucune ligne de temps, pas même celle du document par défaut : elle ne se déroule plus.

  • animation-timeline: --xxx;

    --xxx est un identifiant précédé d'un double tiret. Il doit avoir été défini avec la propriété scroll-timeline-name ou la propriété résumée scroll-timeline.

  • animation-timeline: scroll(block self); x s

    La fonction scroll() accepte deux arguments : l'axe à prendre en compte, et l'élément dont le défilement servira à synchroniser l'animation.

    Le paramètre x peut prendre une des valeurs suivantes :

    • block
    • inline
    • x
    • y

    Les valeurs horizontal et vertical sont reconnues par Firefox mais ne sont pas standardisées.

    Le paramètre s peut prendre une des valeurs suivantes :

    • root : le document dans son ensemble.
    • nearest : l'élément défilable le plus proche dans les parents.
    • self : l'élément lui-même : celui sur lequel l'animation est appliquée.
  • animation-timeline: view(block 50% 10%); a b c

    Avec view() la ligne de temps est calée sur la visibilité d'un élément. Celui-ci doit donc faire partie du contenu qui défile.

    • a : l'axe à considérer (block, inline, x ou y). Ce paramètre est optionnel : la valeur est par défaut block.
    • b : fin de l'animation (coté to de la directive @keyframes). Il s'agit d'un pourcentage ou d'une longueur, positif ou négatif. S'il s'agit d'un pourcentage il est calculé par rapport à la dimension de l'élément qui défile, dans le sens de l'axe de défilement. Dans le cas d'une valeur négative, l'animation démarre alors que l'élément n'est pas encore affiché.
    • c : début de l'animation (coté from de la directive @keyframes). Un pourcentage ou une longueur, positif ou négatif. Ces deux valeurs sont calculées conformément au dessin ci-dessous.

    Animation-timeline, calcul de b et c

Valeurs globales
(communes à toutes les propriétés)

animation-timeline: initial (auto) animation-timeline: inherit animation-timeline: revert animation-timeline: revertLayer animation-timeline: unset

Consultez les pages suivantes pour plus de détails : initial, inherit, revert, revert-layer, unset.

Exemples d'utilisation de la propriété animation-timeline.

Un indicateur de défilement.

Voici une petite application amusante de la possibilité de synchroniser la valeur d'une propriété sur un défilement. Ici, c'est l'angle de rotation d'une image qui est associé au défilement d'un élément. Cela se traduit par un indicateur en forme d'un compteur de vitesse.

Cet indicateur est composé de deux images : la graduation, qui est fixe, et l'aiguille du compteur, dont l'angle de rotation est associé au défilement de l'élément autrement dit à la position de la barre de défilement verticale. Ces deux images sont positionnée en stiky pour ne pas défiler avec le reste du contenu.

Les différents éléments constituant cet exemple sont identifiés de la façon suivante :

  • container : le conteneur avec défilement.
  • graduation : l'image représentant la graduation.
  • indicator : l'image représentant l'aiguille.
  • content : l'élément contenant le texte.

Attention ! Ce code ne fonctionne pas sur certains navigateur, comme Firefox par exemple.

Exemple avec animation-timeline - Aiguille Exemple avec animation-timeline - Graduation
Cet élément a été défini comme un conteneur avec défilement, condition indispensable pour qu'il puisse piloter une animation. (overflow-y:scroll;)

Le code réellement nécessaire pour faire fonctionner l'indicateur se résume à la définition d'une animation avec @keyframes et aux quelques propriétés ci-dessous. Mais le CSS complet comporte de nombreuses autres règles pour dimensionner et positionner les éléments de cet exemple.
#indicator { transform-origin:5px 32px; animation:rotation; animation-timeline: scroll(block nearest); }

Un autre exemple.

L'exemple ci-dessous est construit avec view() : il affiche sur fond orange un partie du texte. L'animation se déroule lorsque cette partie est visible.

Ceci est du texte suffisamment grand pour nécessiter un défilement. Utilisez l'ascenseur pour faire défiler ce texte et déclencher l'animation.
Ceci est la partie où l'animation est appliquée




 

Exemple d'animation de animation-timeline.

Étant elle-même une propriété définissant les animations, animation-timeline ne peut pas être animée.

Accéder à la propriété animation-timeline par programme.

Les modifications de la propriété animation-timeline sont prises en compte immédiatement. Si l'animation n'est pas encore démarrée, l'effet de la modification sera visible au prochain démarrage. Si l'animation est déjà en cours, la modification de animation-timeline provoque généralement un saut dans la progression de l'animation.

Modifier la valeur de animation-timeline en Javascript.

En Javascript, voici comment modifier la valeur de animation-timeline. On voit que Javascript propose une syntaxe avec la notation kebab-case classique en CSS (un tiret pour séparer les mots), et une autre syntaxe avec la notation camel-case (une majuscule pour séparer les mots).

Javascript
let el = document.getElementById('id'); el.style['animation-timeline'] = 'scroll(block self)'; // ou let el = document.getElementById('id'); el.style.animationTimeline = 'scroll(block self)';

Lire en Javascript la valeur de animation-timeline.

Le code ci-dessous renvoie la valeur de animation-timeline lorsque celle-ci a été affectée via l'attribut style du HTML. La valeur affectée dans la feuille de styles, via un sélecteur CSS, n'est pas prise en compte.

Javascript
let el = document.getElementById('id'); let value = el.style['animation-timeline']; // ou let el = document.getElementById('id'); let value = el.style.animationTimeline;

Lire la valeur calculée de animation-timeline en Javascript.

La valeur calculée est celle qui résulte de l'évaluation de la cascade des héritages : ce sera en priorité la valeur éventuellement affectée via l'attribut style du HTML, puis la valeur affectée via un sélecteur CSS (après résolution des contradictions en fonction des priorités des sélecteur), une valeur héritée, ou enfin la valeur initiale de animation-timeline.

Dans le cas de animation-timeline, la valeur est renvoyée en secondes, quelque soit l'unité utilisée pour la définir. Si plusieurs animations sont associées à l'élément, les différentes valeurs de animation-timeline sont renvoyées séparées par des virgules.

Javascript
let el = document.getElementById('id'); let value = window.getComputedStyle(el).getPropertyValue('animation-timeline');

Modifier la valeur de la propriété animation-timeline avec JQuery.

JQuery

$('#id').css('animation-timeline', 'scroll(block self)');
// ou
$('#id').css('animationTimeline', 'scroll(block self)');

Lire la valeur calculée de la propriété animation-timeline avec JQuery.

Comme en Javascript, la ou les valeurs de animation-timeline sont retournées en secondes.

JQuery
let value = $('#id').css('animation-timeline');

Testez vous-même.

Les deux boutons ci-dessous appliquent une valeur à la propriété animation-timeline. Ils relisent ensuite, soit la valeur affectée pour le premier bouton, soit la valeur calculée pour le deuxième. Ce deuxième bouton vous permet de visualiser comment sont mémorisées les différentes valeurs pour la propriété.

Si votre navigateur ne reconnaît pas les animations pilotées par un défilement, la valeur calculée sera vide.

Exemple interactif avec la propriété animation-timeline.

L'élément ci-dessous est défini comme un container avec défilement. Utilisez l'ascenseur pour activer l'animation : changement de la couleur du fond.

animation-timeline :
Cet élément a été défini comme un conteneur avec défilement, condition indispensable pour qu'il puisse piloter une animation.

Utiliser l'ascenseur pour faire défiler ce container et pour activer l'animation : le fond doit passer progressivement du blanc au noir.



 

Compatibilité des navigateurs avec animation-timeline.

Sur Firefox  , les fonctionnalités de la propriété animation-timeline sont désactivées par défaut. Elle peuvent être activées en fixant à true l'option layout.css.scroll-driven-animation.enabled (2024). Voir accéder aux flags sur Firefox.

Colonne 1
Support de la propriété animation-timeline. Sur Firefox cette fonctionnalité doit être activée.
Colonne 2
Support de la fonction view() utilisée avec la propriété animation-timeline.
Colonne 3
Support de la fonction scroll() utilisée avec la propriété animation-timeline.

Remarques :

(1) Désactivé par défaut. Peut être activé en positionnant le flag layout.css.scroll-driven-animations.enabled à true.

1
Propriété
animation-timeline
2
Fonction
view()
3
Fonction
scroll()
Estimation de la prise en charge globale.
74%
74%
74%

Navigateurs sur ordinateurs :

Navigateurs sur mobiles :

Navigateurs obsolètes ou marginaux :

Internet Explorer

UC Browser pour Androïd

Opéra Mobile

QQ Browser

Baidu Browser

Opéra

Samsung Internet

Firefox pour Androïd

Edge

Firefox

Chrome pour Androïd

Androïd Brower

Safari

Safari sur IOS

Chrome

KaiOS Browser

Opéra mini

Histoire de la propriété animation-timeline.

Voir aussi, à propos des animations.

Toutes les définitions concernant les animations en CSS sont regroupées dans la spécification "Module CSS - Animations" (voir CSS Animations). La propriété animation-timeline, ainsi que les suivantes, figurent donc dans cette spécification.

Propriétés :

animation
Propriété résumée définissant la plupart des paramètres d'animation : durée, fonction d'accélération, nombre de répétition, direction, etc.
animation-composition
Définit comment interagissent plusieurs animations appliquées à la même propriété.
animation-delay
Temps d'attente avant le démarrage de l'animation.
animation-direction
Sens de l'animation (normal ou inverse).
animation-duration
Définit la durée totale d'un cycle d'animation.
animation-fill-mode
Définit le remplacement lorsque l'animation n'est pas en cours d'exécution.
animation-iteration-count
Définit le nombre de fois qu'une animation doit être jouée.
animation-name
Définit l'animation à appliquer à l'élément.
animation-play-state
État de l'animation (en cours ou en pause).
animation-timing-function
Définit la fonction d'accélération à utiliser pendant une animation.

Directives :

@keyframes
Définit le nom d'une animation et quelles sont les propriétés qui sont animées.

Et à propos des animations pilotées par un défilement.

Les animations pilotées par un défilement (Scroll-driven Animations) sont quant à elles décrites dans un module de spécification à part : Scroll-driven Animations.

Propriétés :

animation-range
Spécifie le point de départ et le point final de l'animation, dans le cas d'une animation pilotée par un défilement.
animation-range-end
Spécifie le point final de l'animation, dans le cas d'une animation pilotée par un défilement.
animation-range-start
Spécifie le point de départ de l'animation, dans le cas d'une animation pilotée par un défilement.
scroll-timeline-axis
Indique suivant quel axe (vertical ou horizontal) doit se synchroniser l'animation pilotée par le défilement.
scroll-timeline-name
Définit un identifiant pour une animation synchronisée sur le défilement.
timeline-scope
Définit la portée d'une ligne de temps pour une animation pilotée par le défilement.
view-timeline
Propriété résumée définissant les paramètres d'une animation pilotée par le défilement.
view-timeline-axis
Définit quel axe (vertical ou horizontal) est utilisé par une animation pilotée par le défilement.
view-timeline-inset
Spécifie un ajustement de la boite de défilement dans le cadre d'une animation pilotée par le défilement.
view-timeline-name
Définit un identifiant pour une animation pilotée par le défilement.

Fonctions :

scroll()
Facilite la mise en œuvre des animations pilotées par un défilement (Scroll Driven Animation).
view()
Définit une animation pilotée par un défilement (Scroll Driver Animation).