SVG✨ Premium

Rotating Gears

Deux engrenages SVG qui s'engrènent vraiment : 12 et 8 dents, chacun tourne sur son axe, en sens inverse, à la bonne vitesse pour que les dents ne se croisent jamais.

CSSRotation

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

Synchronisation des stocks — barre d'état d'une caisse — Rotating Gears exemple 1

① Synchronisation des stocks — barre d'état d'une caisse

QuandLa caisse d'une épicerie : ticket en cours, montant à encaisser, moyens de paiement. Dans la barre d'état du bas, les petits engrenages jaunes tournent à côté de « Synchronisation des stocks… » ; une fois la synchro finie, ils s'arrêtent et le texte devient « Stocks à jour ». Le bouton « Synchroniser » relance.
PourquoiDes engrenages qui tournent disent « le système travaille » ; arrêtés, « c'est fini ». Le texte dans la zone role="status" porte l'information pour tous.
Réglages--cogs-w:54px, --cogs-h:36px, --cogs-a:#fbbf24, --cogs-b:#fde68a, --cogs-speed:3s, fond transparent. La scène pose --cogs-state:paused sur le conteneur quand la synchro est finie (au bout de 4 s).
Illustration « Comment ça marche » — atelier de réparation de vélos — Rotating Gears exemple 2

② Illustration « Comment ça marche » — atelier de réparation de vélos

QuandLa section explicative d'un atelier : trois étapes numérotées (dépôt, diagnostic, réparation) à gauche, et à droite deux grands engrenages orange et ardoise qui tournent lentement dans un médaillon beige.
PourquoiDes roues qui s'entraînent l'une l'autre illustrent la mécanique et l'idée d'étapes qui s'enchaînent. Elles s'engrènent pour de vrai : un lecteur attentif ne voit pas de dents qui se traversent.
Réglages--cogs-w:216px, --cogs-h:144px, --cogs-a:#ea580c, --cogs-b:#334155, --cogs-speed:6s, fond transparent sur un fond clair (les trous laissent voir le médaillon).
Bouton « Réglages » qui tourne au survol — logiciel de planning — Rotating Gears exemple 3

③ Bouton « Réglages » qui tourne au survol — logiciel de planning

QuandL'en-tête d'un planning d'équipe de cuisine : à droite du titre, le bouton « Réglages » montre deux engrenages immobiles ; au survol ou au focus clavier, ils se mettent à tourner et le bouton s'éclaire. Dans la capture, le survol est rejoué en boucle par la scène.
PourquoiLa rotation confirme « c'est cliquable, et ça ouvre les réglages » sans animation permanente qui distrairait de la grille.
Réglages--cogs-w:33px, --cogs-h:22px, --cogs-a:#a5b4fc, --cogs-b:#e0e7ff, --cogs-speed:2.4s ; CSS de la scène : --cogs-state:paused sur le bouton, running sur :hover et :focus-within.

Comment ça marche

Le SVG de 150 × 100 unités contient deux roues dentées dessinées avec le même module (taille de dent) : une grande de 12 dents (rayon primitif 30, centre en 55,50) et une petite de 8 dents (rayon primitif 20, centre en 105,50). Les centres sont espacés de 50 unités, la somme des deux rayons : une dent de la grande roue entre dans un creux de la petite, comme sur un vrai mécanisme. Le trou central fait partie du chemin (fill-rule="evenodd") : c'est un vrai trou, le fond de la page se voit au travers.

Chaque roue est dans un groupe .cogs-gear animé par @keyframes cogsTurn (rotation de 0 à 360°). transform-box: fill-box et transform-origin: center placent l'axe au centre de la roue elle-même : elle tourne sur place. La grande fait un tour en 4 s ; la petite tourne en sens inverse (animation-direction: reverse) en 4 s × 8/12, soit 1,5 fois plus vite, ce qui garde les dents en prise en permanence.

Tout passe par des variables : --cogs-speed règle les deux vitesses d'un coup, --cogs-state (running ou paused) met en pause sans perdre la position, ce qui permet de faire tourner les roues au survol ou pendant une tâche. Aucun JavaScript ; classes et animation préfixées cogs.

Accessibilité

  • Décoratif : le SVG porte aria-hidden="true" et focusable="false". Utilisé comme indicateur d'activité, accompagnez-le d'un texte dans une zone role="status" (« Synchronisation… », « À jour ») : c'est ce texte qui informe, pas la rotation.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, les deux roues restent immobiles, en prise, à leur position de départ.
  • Survol et clavier : l'effet ne capte rien lui-même. Pour une icône qui tourne au survol, posez --cogs-state:paused sur le bouton et running sur :hover et :focus-within, comme dans le troisième exemple : le clavier obtient le même retour que la souris.
  • Vitesse : une rotation lente et régulière, sans clignotement.

Compatibilité navigateur

Animations CSS sur des groupes SVG, transform-box: fill-box, variables CSS dans animation et animation-play-state, calc() sur une durée, prefers-reduced-motion. Mesuré dans Chromium, Firefox et WebKit (Playwright) : 0 erreur ; centre de chaque roue suivi pendant 2 s : déplacement 0 px dans les 3 moteurs ; dents jamais superposées sur 80 instants d'un tour ; images figées en mouvement réduit ; deux copies indépendantes.

Chrome 74+✓ Complet (mesuré)
Firefox 63+✓ Complet (mesuré)
Safari 11+✓ Complet (mesuré dans WebKit)
Edge 79+✓ Complet (moteur Chromium)
Safari iOS 11+✓ Moteur WebKit, non vérifié sur appareil réel
Chrome Android 74+✓ Complet (moteur Chromium)

Sans transform-box (navigateurs plus anciens que ceux listés), les roues tourneraient autour du coin du dessin : elles restent alors affichées mais le mouvement est faux. Sans animations CSS, elles restent immobiles et en prise.

Le code

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

index.html — structure
<div class="fx-0607-root">
  <div class="cogs-stage">
    <svg class="cogs-svg" viewBox="0 0 150 100" aria-hidden="true" focusable="false">
      <g transform="translate(55 50)">
        <g class="cogs-gear cogs-gear--big">
          <path fill-rule="evenodd" d="…"/>
        </g>
      </g>
      <g transform="translate(105 50)">
        <g class="cogs-gear cogs-gear--small">
          <path fill-rule="evenodd" d="…"/>
        </g>
      </g>
    </svg>
  </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
Taille (CSS — --cogs-w / --cogs-h) 150px / 100px Taille du dessin ; le repère 150 × 100 garde ses proportions. 100% / auto suit la largeur du parent.
Couleurs (CSS — --cogs-a / --cogs-b) #6366f1 / #8b5cf6 Grande roue et petite roue. Les trous sont transparents : pas de couleur de fond à accorder.
Vitesse (CSS — --cogs-speed) 4s Un tour de la grande roue ; la petite suit automatiquement à 2/3 de cette durée pour rester en prise.
Pause / lecture (CSS — --cogs-state) running paused fige les deux roues à leur position, running les relance. Posez-le sur la racine ou sur un parent (bouton, barre d'état).
Fond et hauteur du bloc (CSS — --cogs-page, --cogs-root-h) #0a0a0f / 300px transparent et 0px pour utiliser les engrenages comme icône ou illustration dans votre mise en page.

FAQ

Oui. Chaque roue est dessinée autour de son propre centre et tourne avec transform-box: fill-box : le centre mesuré ne bouge pas d'un pixel dans Chrome, Firefox et Safari (WebKit), et les dents restent en prise sans se chevaucher.
Les deux chemins sont calculés pour s'engrener : même module (5 unités), 12 et 8 dents, centres espacés de la somme des rayons primitifs (30 + 20). Si vous changez une roue, gardez le même module, ajustez l'écart des centres et réglez la durée de la petite roue sur --cogs-speed × dents de la petite / dents de la grande, sinon les dents se traversent.
Mettez --cogs-state: paused sur un parent, puis passez-le à running au début de la tâche et de nouveau à paused à la fin : el.style.setProperty('--cogs-state', 'running'). Les roues repartent de là où elles s'étaient arrêtées, toujours en prise.