3D✨ Premium

Bounce Path

Une balle verte de 20 px fait cinq rebonds de plus en plus bas (80, 40, 30, 15 puis 7,5 px de haut), roule sur la ligne de sol et s'arrête, en 3 s, puis recommence : l'amortissement d'un objet qui perd son énergie, en CSS seul, sans JavaScript — et une balle posée au sommet du premier rebond si l'utilisateur réduit les animations.

CSSBouncePhysics

Mis à jour le

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

3 exemples d'usage

Le concours de ricochets — page d'une fête de village au bord de la rivière — Bounce Path exemple 1

① Le concours de ricochets — page d'une fête de village au bord de la rivière

QuandAnnonce du concours de ricochets de la Saint-Jean : un galet gris saute cinq fois sur l'eau de plus en plus bas puis glisse, sous le titre et à côté du record de l'an dernier.
PourquoiLes arcs qui rapetissent sont la signature du ricochet ; c'est la seule trajectoire de la catégorie qui perd de la hauteur à chaque saut.
RéglagesScène agrandie (transform: scale(1.35)) ; galet en radial-gradient gris sans halo ; ligne de sol éclaircie et posée sur une bande d'eau ; tracé foncé à 25 % pour un fond clair.
Balle neuve contre balle usée — fiche produit d'un fabricant de balles de tennis — Bounce Path exemple 2

② Balle neuve contre balle usée — fiche produit d'un fabricant de balles de tennis

QuandSur la fiche d'un tube de quatre balles, deux cadres côte à côte : à gauche la trajectoire d'origine, « Neuve : 5 rebonds » ; à droite la même balle « Après 3 matchs », sur un tracé plus écrasé.
PourquoiLa décroissance des rebonds rend visible une qualité, le rebond, qu'une fiche technique exprime en chiffres. Deux copies de l'effet sur la même page, sans JavaScript, ne se gênent pas.
RéglagesDeux copies réduites (transform: scale(.77)) ; balle jaune-vert en radial-gradient ; dans la copie de droite, le chemin svg ET l'offset-path remplacés par un tracé de quatre rebonds plus bas (M20,180 Q55,80 90,180 Q115,135 140,180 …).
L'énergie perdue à chaque rebond — cours de physique de 3e en ligne — Bounce Path exemple 3

③ L'énergie perdue à chaque rebond — cours de physique de 3e en ligne

QuandChapitre sur l'énergie : la balle rebondit jusqu'à deux lignes h₁ et h₂ tracées aux sommets des deux premiers arcs, avec la légende « énergie de position → énergie de mouvement → chaleur » et la question « Pourquoi la balle remonte-t-elle moins haut ? ».
PourquoiLa boucle courte permet de regarder le phénomène plusieurs fois ; la hauteur qui baisse pose la question du cours. La légende précise le vocabulaire, la scène ne prétend pas être une simulation exacte.
RéglagesScène agrandie (transform: scale(1.15)) sur papier quadrillé ; couleurs d'origine de la balle ; sol foncé de 3 px ; lignes h₁ et h₂ en pointillés orange posées aux sommets des deux premiers arcs (y = 100 et 140 dans le repère de la scène).

Comment ça marche

La racine .fx-0036-root (fond #0a0a0f, 300 px de haut au minimum) centre une scène .mp-bounce-scene de 300 × 220 px. Un <svg> y trace en pointillés très pâles la trajectoire complète : cinq arcs (courbes de Bézier quadratiques) qui partent tous du sol, à y = 180, et montent à 80, 40, 30, 15 puis 7,5 px, suivis d'une ligne droite de 50 px où la balle roule. La ligne de sol .mp-bounce-floor, 2 px de haut, est posée à bottom: 28px, soit exactement sous la balle quand son centre touche y = 180 : mesuré, le bas de la balle et le haut du sol coïncident au pixel dans Chromium 151, Firefox 153 et WebKit 26.

La balle .mp-bounce-ball (dégradé #10b981 → #059669, halo vert) reçoit le même tracé en offset-path: path(…) et une animation qui fait passer offset-distance de 0 à 100 % en 3 s, en boucle. Son centre est posé sur le tracé : pas de marge négative, la balle passe donc exactement sur les pointillés. À la fin du roulement, la boucle reprend au départ : la balle réapparaît à gauche, en l'air au pied du premier arc.

Le ralenti ease-in-out s'applique au trajet entier, pas à chaque rebond : la balle part doucement, va le plus vite au milieu de la série, puis ralentit pendant les petits rebonds et le roulement. Une vraie balle ralentirait au sommet de chaque arc. Le rendu est donc stylisé, et c'est ce qui le garde lisible : les rebonds rapetissent, l'élan s'éteint, sans calcul de physique ni JavaScript. Pour un mouvement physique, il faudrait une animation par rebond, ou un script.

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, un bloc limité à .fx-0036-root arrête la balle au sommet du premier rebond (offset-distance: 19.7%), au-dessus de la trajectoire en pointillés : on lit encore les rebonds qui rapetissent. Mesuré : 0 % de pixels changés en 0,8 s dans Chromium, Firefox et WebKit, contre 0,75 % en mode normal.
  • Contenu décoratif : aucune information n'est portée par la balle ; le svg et les div vides sont ignorés des lecteurs d'écran. Si les rebonds illustrent une donnée (un nombre de rebonds, une perte d'énergie), écrivez-la à côté.
  • Contraste : la balle verte se détache du fond sombre ; le tracé (10 % d'opacité) et le sol (8 %) sont volontairement discrets. Sur fond clair, foncez-les (voir « Personnaliser »).
  • Rythme : une boucle de 3 s, sans clignotement ; la reprise au départ est un saut de la balle, pas un flash de lumière.

Compatibilité navigateur

CSS seul : offset-path: path() et offset-distance animé, aucun JavaScript, aucune dépendance. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 (le moteur de Safari) : positions de la balle identiques au quart de pixel près, contact balle-sol au pixel, même arrêt sous mouvement réduit. Non vérifié sur un vrai Safari.

Chrome 55+✓ Complet
Firefox 72+✓ Complet
Safari 16+✓ WebKit 26 mesuré, Safari non vérifié
Edge 79+✓ Complet
Mobile iOS 16+✓ Non vérifié sur un appareil
Android Chrome✓ Complet

Un navigateur sans offset-path laisse la balle immobile en haut à gauche de la scène, au-dessus de la trajectoire en pointillés et de la ligne de sol, qui restent visibles.

Le code

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

index.html — structure
<div class="fx-0036-root">
  <div class="mp-bounce-scene">
    <svg viewBox="0 0 300 220" fill="none">
      <path d="M20,180 Q60,20 100,180 Q130,100 160,180 … L280,180" … />
    </svg>
    <div class="mp-bounce-ball"></div>
    <div class="mp-bounce-floor"></div>
  </div>
</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
Couleur de la balle (CSS — .mp-bounce-ball) Dégradé #10b981 → #059669, halo vert Changez le background et la couleur du box-shadow ; sur fond clair, remplacez le halo par une petite ombre.
Vitesse (CSS — 3s de l'animation) 3 s pour toute la série 2 s pour une balle vive, 4 à 5 s pour une démonstration. La série reste la même : seul le tempo change.
Ralenti (CSS — ease-in-out) ease-in-out sur tout le trajet linear donne une vitesse constante, plus mécanique ; ease-out lance la balle vite puis l'éteint, proche d'un ricochet.
Forme des rebonds (HTML + CSS) 5 arcs de 80, 40, 30, 15 et 7,5 px, puis 50 px de roulement Le tracé est écrit deux fois, dans le d du chemin svg et dans l'offset-path : changez les deux. Gardez les arcs à y = 180 pour que la balle touche le sol.
Ligne de sol (CSS — .mp-bounce-floor) 2 px, bottom: 28px, blanc à 8 % Sa position est calée sur le bas de la balle (sol du tracé à 180 + rayon de 10 px). Si vous changez la taille de la balle ou la hauteur du sol, recalez bottom.
Fond (CSS — .fx-0036-root) #0a0a0f Changez ou retirez le fond pour poser la scène sur votre page ; foncez alors le tracé et le sol.

FAQ

Non, et c'est voulu. Le tracé fixe la hauteur de chaque rebond, et un seul ralenti s'applique à toute la série : la balle va le plus vite au milieu, alors qu'une vraie balle ralentit au sommet de chaque arc. Le rendu reste lisible et ne coûte qu'une animation CSS. Pour une chute réaliste, il faut une animation par rebond avec son propre ralenti, ou un moteur physique en JavaScript.
Remplacez infinite par 1 et ajoutez forwards : animation: 3s ease-in-out 0s 1 normal forwards running mpOrbit. La balle finit à droite, au bout du roulement, et y reste. Pour la relancer au clic, retirez puis remettez l'animation avec une classe.
Bounce Path est la seule trajectoire du catalogue qui perd de la hauteur : cinq arcs qui rapetissent puis un roulement. Bezier Curve fait l'aller-retour sur un seul arc en montrant ses poignées ; Wave Path fait suivre une vague régulière à trois points. Pour raconter une énergie qui s'épuise (ricochet, balle usée, rebond amorti), c'est Bounce Path.