SVG✨ Premium

SVG Fill Animation

Une bouteille SVG dont le liquide en dégradé monte jusqu'à un niveau réglable puis redescend, en boucle — ou monte une seule fois et reste à son niveau.

CSSClip-path

Mis à jour le

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

3 exemples d'usage

Niveau du récupérateur d'eau relevé dans l'appli d'un potager connecté (Verdanelle) — SVG Fill Animation exemple 1

① Niveau du récupérateur d'eau relevé dans l'appli d'un potager connecté (Verdanelle)

QuandSur la page « Eau et arrosage », le jardinier appuie sur « Relever le niveau » : la cuve de la carte se remplit depuis le fond jusqu'à 62 %, à côté du pourcentage et des litres restants.
PourquoiLa montée donne au relevé un retour visible, et le niveau atteint se lit d'un coup d'œil, avec la valeur écrite à côté pour la précision.
RéglagesContour et découpe remplacés par une cuve arrondie (même viewBox), --flb-level: .62, --flb-repeat: 1, --flb-speed: 1.5s, bleus #1d6fe0 et #56c2f5, --flb-size: 104px, fond transparent. Le bouton masque puis réaffiche la racine, ce qui rejoue la montée.
Petit flacon qui se remplit et se vide dans le bouton « Mélanger » d'un parfumeur (Ambrevine) — SVG Fill Animation exemple 2

② Petit flacon qui se remplit et se vide dans le bouton « Mélanger » d'un parfumeur (Ambrevine)

QuandÀ la dernière étape de la composition d'un parfum, le client clique sur « Mélanger » : pendant la préparation, un flacon de 28 px se remplit et se vide en boucle devant « Mélange en cours… », puis le bouton annonce l'ajout au panier.
PourquoiUn flacon qui se remplit parle de parfum là où un simple rond de chargement ne dirait rien, et l'aller-retour signale une attente sans fin précise.
Réglages--flb-size: 28px, --flb-speed: .7s, dégradé #d9467a vers #f7b267, contour #2b2320, fond transparent, --flb-min-h: 0. La racine n'est affichée que pendant l'état « en cours » du bouton, géré par la page.
Grande bouteille qui se remplit en continu sur la page « Notre distillerie » (Genévrac) — SVG Fill Animation exemple 3

③ Grande bouteille qui se remplit en continu sur la page « Notre distillerie » (Genévrac)

QuandSur la page de présentation d'une distillerie de gin, une bouteille de 270 px se remplit et se vide lentement à droite du texte, sur un fond vert profond.
PourquoiLa bouteille remplace une photo de produit et donne du mouvement à une page de texte, sans jamais passer sous les mots.
Réglages--flb-size: 270px, --flb-speed: 2.6s, dégradé #2fb59f vers #b9a7f5, contour crème à 75 %, fond transparent, racine posée en position: absolute à droite de la colonne de texte.

Comment ça marche

Le dessin tient dans un SVG de 100×120 unités : le contour de la bouteille (.flb-outline, trait de 3), et un rectangle de liquide (.flb-liquid) rempli d'un dégradé vertical indigo vers magenta, découpé à la forme de la bouteille par un clipPath qui reprend le même tracé. Le liquide est dessiné après le contour et en recouvre donc la moitié intérieure.

L'animation flbFill déplace le rectangle verticalement : il part 105 unités plus bas (bouteille vide) et remonte jusqu'au niveau fixé par --flb-level (1 = pleine, 0,5 = à moitié). Elle dure --flb-speed (1,25 s, courbe ease-in-out) et tourne en aller-retour : la bouteille se remplit puis se vide, soit 2,5 s par cycle. Avec --flb-repeat: 1, elle se remplit une fois et reste au niveau choisi. Le dégradé est attaché au liquide : à mi-hauteur, on voit surtout sa partie haute.

Le dégradé et la découpe ont besoin d'un id : avec des id fixes, une deuxième bouteille dans la page reprendrait ceux de la première et perdrait son remplissage dès que la première serait masquée (onglet, accordéon). Le court script donne donc des id uniques à chaque copie présente au chargement. --flb-play: paused fige le liquide là où il en est.

Accessibilité

  • Décoratif : le SVG porte aria-hidden="true". S'il sert de jauge, écrivez la valeur en texte à côté (« 62 % ») : la bouteille seule ne dit rien à un lecteur d'écran.
  • Mouvement réduit : avec prefers-reduced-motion: reduce, l'animation est retirée et le liquide s'affiche directement à son niveau (pleine par défaut) — mesuré dans les trois moteurs, 0 animation en cours.
  • Aucune interaction : rien à cliquer ni à atteindre au clavier ; l'effet est le même à la souris, au doigt et au clavier.
  • Rythme : un remplissage par 1,25 s, sans flash ; pour un indicateur d'attente qui dure, un --flb-speed plus long reste plus calme.

Compatibilité navigateur

SVG, CSS et 0,9 Ko de JavaScript. Le mouvement réduit demande Chrome 74, Firefox 63 et Safari 10.1. Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 : 0 erreur, rien d'ajouté sur window, deux copies avec chacune ses id, et la 2e garde son remplissage quand la 1re est masquée (2 % de pixels colorés dans les deux cas).

Chrome 74+✓ Complet (mesuré)
Firefox 63+✓ Complet (mesuré)
Safari 10.1+✓ Complet (mesuré dans WebKit 26.5)
Edge 79+✓ Complet (moteur Chromium)
Safari iOS 10.3+✓ Complet (moteur WebKit, non testé sur appareil)
Chrome Android 74+✓ Complet (moteur Chromium)

Sans JavaScript, une seule bouteille par page fonctionne normalement ; à partir de deux, elles partagent les mêmes id. Sans animations CSS, la bouteille s'affiche remplie à son niveau.

Le code

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

index.html — structure
<div class="fx-0602-root">
  <svg class="flb-svg" viewBox="0 0 100 120" aria-hidden="true">
    <defs>
      <linearGradient id="flb-grad" …>
        <stop class="flb-stop-1" …/>
        <stop class="flb-stop-2" …/>
      </linearGradient>
      <clipPath id="flb-clip"><path d="…"/></clipPath>
    </defs>
    <path class="flb-outline" d="…"/>
    <g class="flb-inside" clip-path="url(#flb-clip)">
      <rect class="flb-liquid" … fill="url(#flb-grad)"/>
    </g>
  </svg>
</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
--flb-level 1 Niveau atteint, de 0 (vide) à 1 (pleine) : .62 pour 62 %.
--flb-repeat infinite 1 : la bouteille se remplit une fois et reste à son niveau ; nombre pair : elle finit vide.
--flb-speed 1.25s Durée d'un remplissage (un cycle remplir-vider dure le double).
--flb-play running paused fige le liquide à sa hauteur du moment.
--flb-color-1 et --flb-color-2 #6366f1 et #d946ef Couleurs du bas et du haut du liquide.
--flb-line et --flb-size #6366f1 et 100px Couleur du contour et largeur du dessin (la hauteur suit, 1,2 fois la largeur).
--flb-bg et --flb-min-h #0a0a0f et 300px Fond et hauteur minimale du cadre ; transparent et 0 dans un bouton ou une carte.

FAQ

Oui : remplacez le d du contour .flb-outline et celui du chemin du clipPath par le même tracé. Gardez la forme entre les hauteurs 10 et 115 du viewBox, sinon les niveaux ne tombent plus juste.
Le script ne traite que les copies présentes quand il s'exécute (il les marque avec data-flb-ready). Relancez-le après avoir inséré les nouvelles : il ignore celles déjà traitées.
Le dégradé est attaché au rectangle de liquide, qui monte en entier : on voit d'abord sa partie haute. Pour une couleur unique, donnez la même valeur à --flb-color-1 et --flb-color-2.