3D✨ Premium

Rollercoaster

Un wagonnet orange à deux roues parcourt en 4 s un tracé de montagnes russes (montée, grande descente, creux, petite bosse) en penchant le nez selon la pente grâce à offset-rotate: auto, ralenti au départ et à l'arrivée, puis repart du début : la seule trajectoire du catalogue où l'objet s'oriente lui-même — CSS seul, zéro JavaScript, wagonnet arrêté en pleine descente si l'utilisateur réduit les animations.

CSSoffset-rotatePath

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 grand huit de la nouvelle saison — site d'un parc d'attractions familial — Rollercoaster exemple 1

① Le grand huit de la nouvelle saison — site d'un parc d'attractions familial

QuandAnnonce de la nouveauté du parc : le Serpent des Bois, grand huit en bois accessible dès 1,10 m ; le tracé rouge sur piliers en bois occupe la scène, le wagonnet aux couleurs du parc pique du nez dans la grande descente.
PourquoiLe wagonnet qui bascule dans la descente donne la sensation de l'attraction sans vidéo, et la taille minimale et la date d'ouverture restent lisibles à côté.
RéglagesScène agrandie (transform: scale(1.32)) ; tracé rouge #b91c1c de 3 px, rail brun #92400e ; piliers en bois ajoutés dans le même svg, derrière le tracé ; caisse verte #16a34a à bande jaune.
Le wagonnet de la descente au fond — site d'un musée de la mine — Rollercoaster exemple 2

② Le wagonnet de la descente au fond — site d'un musée de la mine

QuandPage de la visite guidée « Descente à -150 m » : le parcours devient une galerie dans la terre, éclairée de deux lampes, avec des étais en bois, et le wagonnet gris des mineurs monte et descend les pentes.
PourquoiL'orientation du wagonnet selon la pente rend la déclivité de la galerie lisible, sans photo ni plan de coupe.
RéglagesFond brun en radial-gradient ; tracé gris acier de 2,5 px, rail gris foncé ; étais et lampes ajoutés au décor ; caisse #78716c aux coins presque droits (border-radius: 2px), même offset-anchor.
La luge sur rails de la station en été — page « Activités d'été » d'une station de montagne — Rollercoaster exemple 3

③ La luge sur rails de la station en été — page « Activités d'été » d'une station de montagne

QuandFiche de la luge sur rails : sur fond d'alpage et de sommets, la luge rouge monte, plonge dans la grande descente et remonte la petite bosse, au-dessus des horaires d'ouverture.
PourquoiLa luge qui suit les creux et les bosses en se penchant montre le parcours mieux qu'un plan, et le ralenti à l'arrivée évoque le freinage en bas de piste.
RéglagesScène agrandie (transform: scale(1.32)) ; tracé gris clair de 3 px, rail ardoise ; caisse rouge #dc2626 arrondie en luge ; montagnes en clip-path derrière la scène.

Comment ça marche

La racine .fx-0040-root (fond #0a0a0f, 300 px de haut au minimum) centre une scène .mp-roller-scene de 320 × 220 px. Un <svg> y dessine le parcours, dix courbes de Bézier quadratiques en trait ambré à 15 %, et un second trait blanc à 5 %, le même décalé de 4 px vers le bas : le rail double. Le wagonnet .mp-roller-car est un rectangle de 20 × 14 px, #f59e0b, aux coins arrondis ; son pseudo-élément ::after dessine une roue grise de 5 px et la seconde par un box-shadow décalé de 11 px.

Le wagonnet reçoit le tracé du parcours en offset-path: path(…) et une animation de offset-distance de 0 à 100 % en 4 s, ease-in-out, en boucle. offset-rotate: auto le fait tourner à chaque instant dans le sens de la tangente : mesuré à quatre moments du trajet, l'angle de la caisse suit la pente du tracé au demi-degré près (68° contre 68,2° dans la montée, 71,5° contre 71,6° dans la grande descente), à l'identique dans Chromium 151, Firefox 153 et WebKit 26.

offset-anchor: 50% 100% choisit le point du wagonnet posé sur le tracé : le milieu du bas de la caisse, et non son centre. La caisse roule donc au-dessus du trait, et les roues, qui dépassent de 4 px sous la caisse, tombent entre les deux traits du rail ; c'est aussi autour de ce point que le wagonnet pivote. Le ralenti s'applique au trajet entier : départ lent, pleine vitesse dans la grande descente, freinage sur la dernière bosse, puis le wagonnet revient d'un coup au départ.

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, un bloc limité à .fx-0040-root arrête le wagonnet au milieu de la grande descente (offset-distance: 50%), le nez vers le bas : l'image fixe dit encore « montagnes russes ». Mesuré : 0 % de pixels changés en 0,8 s dans Chromium, Firefox et WebKit, contre 0,75 % en mode normal.
  • Contenu décoratif : la scène ne porte aucun texte ; le svg et le wagonnet, une div vide, sont ignorés des lecteurs d'écran. Écrivez à côté ce que le parcours représente (attraction, galerie, piste).
  • Contraste : le wagonnet orange mesure 9,2:1 sur le fond sombre ; le tracé, à 15 %, et le rail, à 5 %, sont volontairement pâles. Sur un fond clair, foncez-les et épaississez-les, comme dans les exemples.
  • Rythme : une boucle de 4 s, sans clignotement ; le retour au départ est un saut du wagonnet.

Compatibilité navigateur

CSS seul : offset-path: path(), offset-rotate: auto, offset-anchor et offset-distance animé, aucun JavaScript, aucune dépendance. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 (le moteur de Safari) : mêmes positions, même angle de la caisse, même arrêt sous mouvement réduit. Non vérifié sur un vrai Safari.

Chrome 116+✓ Complet (offset-anchor)
Firefox 72+✓ Complet
Safari 16+✓ WebKit 26 mesuré, Safari non vérifié
Edge 116+✓ Complet
Mobile iOS 16+✓ Non vérifié sur un appareil
Android Chrome✓ Complet

Un navigateur qui connaît offset-path mais pas offset-anchor centre la caisse sur le tracé : le wagonnet roule et s'oriente, les roues passent juste sous le rail. Sans offset-path, le wagonnet reste immobile en haut à gauche de la scène et le parcours reste dessiné.

Le code

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

index.html — structure
<div class="fx-0040-root">
  <div class="mp-roller-scene">
    <svg viewBox="0 0 320 220" fill="none">
      <path d="M10,180 Q40,180 60,120 … 300,140" … />   <!-- parcours -->
      <path d="M10,184 Q40,184 60,124 … 300,144" … />   <!-- rail -->
    </svg>
    <div class="mp-roller-car"></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 et forme du wagonnet (CSS — .mp-roller-car) 20 × 14 px, #f59e0b, coins de 4 px, halo orange Changez background, border-radius et box-shadow. Si vous changez la taille, gardez les roues (::after, bottom: -4px) sous la caisse.
Point posé sur le rail (CSS — offset-anchor) 50% 100% (milieu du bas de la caisse) 50% 50% centre la caisse sur le trait ; 50% 18px pose le bas des roues sur le trait. Le wagonnet pivote autour de ce point.
Orientation (CSS — offset-rotate) auto (suit la pente) auto 180deg retourne le wagonnet (marche arrière) ; 0deg le garde horizontal, comme une nacelle suspendue.
Vitesse et ralenti (CSS — 4s ease-in-out) 4 s, départ et arrivée lents linear donne une vitesse constante ; cubic-bezier(.5,0,.8,.6) accélère dans la descente. 6 s pour une visite tranquille, 2,5 s pour une attraction à sensations.
Tracé (HTML + CSS) Montée, grande descente, creux, petite bosse sur 320 × 220 px Le tracé est écrit trois fois : le trait du parcours, le rail (même tracé, 4 px plus bas) et l'offset-path. Changez les trois ensemble.
Fond (CSS — .fx-0040-root) #0a0a0f Changez ou retirez le fond ; sur fond clair, foncez et épaississez le parcours et le rail.

FAQ

offset-rotate: auto : le navigateur calcule la tangente du tracé au point atteint et tourne l'élément d'autant, à chaque image. Rien à calculer, pas de JavaScript. Mesuré : l'angle de la caisse suit la pente au demi-degré près dans Chromium, Firefox et WebKit.
Le parcours est ouvert : il commence à gauche et finit à droite, plus haut. À la fin de la boucle, l'animation reprend à 0 %. Pour un tour sans saut, dessinez un parcours fermé (qui revient à son point de départ) et passez l'animation en linear ; pour un seul passage, utilisez 1 et forwards à la place d'infinite.
C'est la seule où l'objet s'oriente lui-même selon la pente. Dans Bezier Curve ou Bounce Path, une balle ronde suit sa courbe sans qu'on voie de rotation. Dès que l'objet a un avant et un arrière (wagon, luge, voiture, avion), c'est Rollercoaster qu'il faut.