Data✨ Premium

Bar Chart Animated

Histogramme vertical en HTML : chaque barre pousse depuis le bas avec un petit rebond, l'une après l'autre, au moment où le graphique entre à l'écran.

CSSStagger

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Data comprend 28 effets, dont 1 gratuits. Découvrir la catégorie →

3 exemples d'usage

Affluence d'une piscine jour par jour, révélée en arrivant sur « Quand venir ? » — Bar Chart Animated exemple 1

① Affluence d'une piscine jour par jour, révélée en arrivant sur « Quand venir ? »

QuandLa page horaires d'une piscine municipale : le visiteur descend sous le bandeau, la carte « Entrées par jour » entre à l'écran et les sept barres montent l'une après l'autre, valeur au-dessus. Dans la capture, la page défile toute seule pour montrer ce moment.
PourquoiLe visiteur cherche le jour le plus calme : sept hauteurs comparées d'un coup d'œil répondent mieux qu'un tableau, et la montée attire l'œil sur le creux du mercredi au moment précis où il arrive dessus.
Réglagesdata-show-values, valeurs de 110 à 390 (maximum automatique), --brc-height: 170px, --brc-bar-width: 30px, --brc-bg: transparent, cinq dégradés bleus dans --brc-c1 à --brc-c5.
Mini-histogramme des ventes sur sept jours en bout de ligne, back-office d'une céramiste — Bar Chart Animated exemple 2

② Mini-histogramme des ventes sur sept jours en bout de ligne, back-office d'une céramiste

QuandLa liste des pièces en vente d'un atelier de céramique : chaque ligne (photo, nom, stock) se termine par un histogramme de 30 px de haut, un par pièce, avec le total à côté. Les cinq graphiques jouent ensemble à l'ouverture de la liste.
PourquoiOn repère sans lire les chiffres la pièce qui part le week-end et celle qui ne se vend plus ; la petite montée signale que la liste vient d'être actualisée.
RéglagesCinq racines indépendantes, --brc-height: 30px, --brc-bar-width: 9px, --brc-max-width: 104px, --brc-min-height: 0, libellés L M M J V S D masqués à l'écran par le CSS de la page (toujours lus), dégradés terre cuite.
Les pas de la semaine affichés après la synchronisation du podomètre, club de marche — Bar Chart Animated exemple 3

③ Les pas de la semaine affichés après la synchronisation du podomètre, club de marche

QuandDans l'espace membre d'un club de marche, la carte « Votre semaine » reste vide tant que le podomètre n'est pas synchronisé. Le bouton « Synchroniser » affiche le panneau masqué : le graphique entre à l'écran et ses barres montent avec les valeurs en milliers de pas.
PourquoiLa montée fait office de confirmation : la synchronisation a abouti et voici le résultat, sans message supplémentaire. C'est l'apparition du panneau qui lance l'effet, aucun code à ajouter.
Réglagesdata-show-values, valeurs décimales (6,2 à 12,8) écrites au format de la page, --brc-height: 168px, --brc-bar-width: 26px, dégradés vert d'eau ; le panneau est un simple hidden retiré au clic.

Comment ça marche

Les données sont écrites dans le HTML : une liste ul.brc-chart dont chaque li.brc-item porte sa valeur dans data-value et son libellé dans span.brc-label. Au démarrage, le script ajoute dans chaque élément une piste .brc-track (décorative, aria-hidden) qui contient la barre .brc-bar, et un texte .brc-val avec la valeur mise en forme. La hauteur d'une barre vaut valeur ÷ maximum : le maximum est l'attribut data-max de la racine s'il existe, sinon la plus grande valeur de la liste.

Le graphique ne joue pas au chargement de la page mais à son apparition : un IntersectionObserver attend qu'au moins 35 % de la liste soit visible, relit les valeurs, puis ajoute la classe brc-on sur la racine. Chaque barre passe alors de scaleY(0) à scaleY(1) en 1 s avec une courbe cubic-bezier(.34, 1.56, .64, 1) qui dépasse légèrement avant de se poser, avec 0,1 s de décalage par barre. L'animation n'a lieu qu'une fois.

Avec data-show-values sur la racine, une étiquette .brc-tip s'affiche au-dessus de chaque barre et apparaît en fondu juste après elle. Les nombres sont écrits avec Intl.NumberFormat dans la langue de la page (attribut lang le plus proche) : « 1 240 » sur une page française, « 1,240 » sur une page anglaise. data-unit="%" donne un pourcentage localisé, toute autre unité est ajoutée après une espace insécable.

La taille suit le conteneur : la liste prend toute la largeur disponible jusqu'à --brc-max-width et les barres se partagent l'espace sans dépasser --brc-bar-width. Les cinq dégradés d'origine (indigo, violet, magenta, rose, rouge) reviennent en boucle tous les cinq éléments.

Accessibilité

  • Lecteur d'écran : la liste est lue comme une vraie liste (« Activité de la semaine, liste de 5 éléments ») et chaque élément donne son libellé suivi de sa valeur, par exemple « Lun 60 ». La valeur vient du texte .brc-val, présent même quand rien n'est affiché à l'écran. Pensez à adapter l'aria-label de la liste.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, les barres et leurs valeurs sont dessinées tout de suite à leur hauteur finale, sans montée ni fondu.
  • Rien à manipuler : le graphique ne contient ni bouton ni lien, il ne prend donc pas le focus clavier et ne réagit ni au survol ni au toucher.
  • Couleur et lecture : les dégradés ne portent aucune information, la valeur est toujours écrite ; si vous les remplacez, gardez un contraste suffisant avec le fond.

Compatibilité navigateur

HTML, CSS (variables, transform, @keyframes) et un petit script (IntersectionObserver, Intl.NumberFormat). Mesuré le 08/11/2026 dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : deux copies indépendantes dans la même page, la seconde attend d'être affichée pour jouer, mouvement réduit, largeur de 390 px, aucune erreur.

Chrome 74+✓ Complet (mesuré dans Chromium 151)
Firefox 63+✓ Complet (mesuré dans Firefox 153)
Safari 12.1+✓ Mesuré dans WebKit 26.5, pas en vrai Safari
Edge 79+✓ Complet (moteur Chromium)
Safari iOS 12.2+✓ Non vérifié sur appareil
Chrome Android 74+✓ Complet (moteur Chromium)

Sans IntersectionObserver, les barres jouent tout de suite au chargement. Sans JavaScript, seuls les libellés s'affichent (les hauteurs sont calculées par le script).

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0225-root">
  <ul class="brc-chart" aria-label="Activité de la semaine">
    <li class="brc-item" data-value="60"><span class="brc-label">Lun</span></li>
    <li class="brc-item" data-value="90"><span class="brc-label">Mar</span></li>
    <li class="brc-item" data-value="45"><span class="brc-label">Mer</span></li>
    <li class="brc-item" data-value="75"><span class="brc-label">Jeu</span></li>
    <li class="brc-item" data-value="55"><span class="brc-label">Ven</span></li>
  </ul>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
Valeurs (HTML — data-value sur chaque li.brc-item) 60, 90, 45, 75, 55 Un nombre positif par élément ; ajoutez ou retirez des li pour changer le nombre de barres. Une valeur négative ou absente compte pour 0.
Maximum de l'échelle (HTML — data-max sur la racine) La plus grande valeur Fixez-le (ex. data-max="100") pour comparer plusieurs graphiques sur la même échelle.
Valeurs visibles (HTML — data-show-values sur la racine) Absent : valeurs lues par les lecteurs d'écran seulement Présent : chaque barre porte sa valeur au-dessus d'elle.
Unité (HTML — data-unit sur la racine) Aucune % donne un pourcentage au format de la langue de la page ; toute autre unité (km, h…) est ajoutée après le nombre.
Couleurs des barres (CSS — --brc-c1 à --brc-c5) Dégradés indigo, violet, magenta, rose, rouge Une valeur de fond par variable (couleur ou dégradé) ; elles se répètent tous les cinq éléments.
Dimensions (CSS — --brc-height, --brc-max-width, --brc-bar-width, --brc-min-height) 160 px, 480 px, 48 px, 300 px Hauteur de la zone des barres, largeur maximale de la liste, largeur maximale d'une barre, hauteur minimale de la racine (mettez 0 dans un petit composant).
Fond et textes (CSS — --brc-bg, --brc-text, --brc-value) #0a0a0f, blanc à 50 %, blanc Sur un site clair : --brc-bg: transparent et des textes foncés.

FAQ

Non. Tant que l'onglet est masqué (hidden ou display: none), la liste n'est pas visible pour l'IntersectionObserver ; la montée se déclenche au moment où le panneau s'affiche, puis ne rejoue plus.
Les valeurs sont relues une seule fois, quand le graphique apparaît ; un script peut donc remplir les data-value avant ce moment. Après, modifier un attribut ne redessine rien : remplacez alors le graphique par une nouvelle copie du HTML et relancez le script.
Écrivez la valeur brute avec un point (data-value="6.2", data-value="1240") : le script l'écrit lui-même au format de la page, jusqu'à une décimale, avec l'espace des milliers en français et la virgule en anglais.