SVG✨ Premium

Morphing Shape

Une forme SVG pleine qui passe en douceur du losange au cercle, à l'étoile puis au carré en changeant de teinte — un vrai morphing, fluide aussi dans Safari.

CSSMorphing

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

Grande forme du haut de page — atelier de céramique — Morphing Shape exemple 1

① Grande forme du haut de page — atelier de céramique

QuandLa page d'accueil d'un atelier de céramique : à gauche le titre « La terre prend forme entre vos mains », le texte et deux boutons ; à droite, la forme de 206 px qui passe lentement d'une silhouette à l'autre au-dessus d'une ombre de socle, comme une pièce qu'on tourne.
PourquoiLe morphing raconte le métier sans photo : une matière qui change de forme. Posée à côté du texte et non dessous, elle anime le haut de page sans gêner la lecture.
Réglages--mrph-size:206px, --mrph-page:transparent, --mrph-root-h:0px ; dur="6s" sur les deux <animate> pour un rythme posé ; couleurs terre cuite values="#c8643f;#dd9a4a;#b9483a;#c97c6c;#c8643f" et fill="#c8643f" de départ.
Pastille « J'écoute… » — appli de notes vocales — Morphing Shape exemple 2

② Pastille « J'écoute… » — appli de notes vocales

QuandUne appli de notes dictées : pendant l'écoute, la pastille ronde du bouton micro change de forme en continu à côté du libellé « J'écoute… » et de la durée. Un appui met en pause : la forme se fige sur le losange et le libellé devient « En pause — touchez pour reprendre ».
PourquoiUne forme qui vit dit « je capte » sans icône de son ni onde ; figée, elle dit l'inverse. Le texte à côté garde l'information pour tout le monde.
Réglages--mrph-size:34px dans une pastille de 38 px ; teintes turquoise values="#2dd4bf;#22d3ee;#38bdf8;#5eead4;#2dd4bf" ; dur="2.4s". Le bouton de la scène appelle pauseAnimations() + setCurrentTime(0) ou unpauseAnimations() sur le SVG de sa pastille (méthodes SVG standard).
Jeu « Fige l'étoile ! » — appli d'éveil pour enfants — Morphing Shape exemple 3

③ Jeu « Fige l'étoile ! » — appli d'éveil pour enfants

QuandUn écran de jeu pour les 4-6 ans : la forme tourne dans une grande carte, l'enfant touche la carte quand il voit l'étoile. Le jeu fige la forme et dit « Bravo, c'est l'étoile ! » ou « Presque ! C'était le cercle. » ; un second appui relance.
PourquoiLe morphing devient la mécanique du jeu : il faut reconnaître une forme pendant qu'elle se transforme. Les quatre formes de l'effet sont justement les formes de base qu'on apprend à cet âge.
RéglagesCouleurs et durée par défaut (4 s) ; --mrph-size:132px. Au toucher, la scène appelle pauseAnimations() puis lit getCurrentTime() modulo la durée : près de 2 s = étoile, 0 = losange, 1 = cercle, 3 = carré.

Comment ça marche

Le dessin est un seul <path class="mrph-shape"> dans un SVG de 120 × 120 unités. Les quatre formes (losange, cercle, étoile à cinq branches, carré) sont écrites avec la même structure : 20 points d'ancrage reliés par 20 courbes de Bézier cubiques. Les côtés droits sont des courbes dont les poignées restent sur la ligne, le cercle utilise des poignées d'arc. Comme chaque forme a le même nombre et le même type de commandes, le navigateur sait calculer toutes les formes intermédiaires : la transformation est continue, sans saut.

L'animation est en SMIL : un <animate attributeName="d"> enchaîne les quatre chemins en 4 s (un quart de cycle par passage, accélération et freinage doux via keySplines=".42 0 .58 1"), puis revient au losange et recommence. Un second <animate attributeName="fill">, calé sur la même horloge, fait glisser la couleur de l'indigo #6366f1 au violet #8b5cf6, au magenta #d946ef puis au rose #ec4899.

Pourquoi SMIL et pas la propriété CSS d : Safari ne connaît pas d en CSS, la forme y resterait figée. <animate> sur l'attribut d est pris en charge par Chrome, Firefox et Safari. Le petit script ne sert qu'au mouvement réduit ; aucune classe ni animation CSS générique : tout est préfixé mrph-, le code se colle à côté de n'importe quel autre effet.

Accessibilité

  • Décoratif par défaut : le SVG porte aria-hidden="true" et focusable="false", les lecteurs d'écran l'ignorent. Si la forme porte un sens (un état « en écoute », par exemple), dites-le dans un texte visible à côté, comme dans l'exemple de l'appli de notes.
  • Mouvement réduit : une animation SMIL ne s'arrête pas en CSS. Le script lit prefers-reduced-motion: reduce, met chaque dessin en pause avec pauseAnimations() et le ramène au début (setCurrentTime(0)) : il reste un losange indigo net. Il suit aussi le changement de réglage en cours de visite et relance l'animation si l'option est désactivée.
  • Rien à activer : l'effet ne réagit ni au pointeur ni au clavier ; aucun piège de focus. Pour un usage interactif (pause au clic), utilisez un vrai <button> et les méthodes SVG standard, voir la FAQ.
  • Rythme : un cycle complet dure 4 s, sans clignotement ni flash ; le changement de couleur est progressif.

Compatibilité navigateur

SMIL <animate> sur l'attribut d et sur fill, pauseAnimations() / setCurrentTime(), media query prefers-reduced-motion. Mesuré dans Chromium, Firefox et WebKit (Playwright) : 0 erreur, forme intermédiaire continue entre chaque paire de formes (même chemin à 50 ms près dans les 3 moteurs), deux copies indépendantes, copie seule affichée après une copie masquée, arrêt net en mouvement réduit. Le morphing lui-même fonctionne dans des versions bien plus anciennes ; les versions ci-dessous sont celles où le mouvement réduit est aussi respecté.

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

Sans SMIL, le chemin garde sa valeur de départ : un losange indigo immobile. Sans JavaScript, seul l'arrêt en mouvement réduit manque ; le morphing tourne normalement.

Le code

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

index.html — structure
<div class="fx-0601-root">
  <div class="mrph-stage">
    <svg class="mrph-svg" viewBox="0 0 120 120" aria-hidden="true" focusable="false">
      <path class="mrph-shape" fill="#6366f1" d="…losange…">
        <animate class="mrph-d" attributeName="d" dur="4s" repeatCount="indefinite" calcMode="spline" keyTimes="0;.25;.5;.75;1" keySplines="…" values="…losange;cercle;étoile;carré;losange…"/>
        <animate class="mrph-fill" attributeName="fill" dur="4s" repeatCount="indefinite" calcMode="spline" keyTimes="0;.25;.5;.75;1" keySplines="…" values="#6366f1;#8b5cf6;#d946ef;#ec4899;#6366f1"/>
      </path>
    </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 — --mrph-size) 120px Côté du dessin. 100% le fait suivre la largeur du parent ; le SVG garde ses proportions.
Fond et hauteur du bloc (CSS — --mrph-page, --mrph-root-h) #0a0a0f / 300px --mrph-page:transparent et --mrph-root-h:0px pour poser la forme sur votre propre fond, dans un bouton ou une carte.
Durée d'un cycle (HTML — dur des deux <animate>) 4s Mettez la même valeur sur les deux balises pour garder couleur et forme synchronisées (ex. dur="6s" pour un fond calme).
Couleurs (HTML — values de l'animation fill) #6366f1;#8b5cf6;#d946ef;#ec4899;#6366f1 Une couleur par forme (losange, cercle, étoile, carré) et la première répétée à la fin pour boucler sans saut. Pensez à changer aussi fill sur le <path> (couleur sans animation).
Vitesse de chaque passage (HTML — keySplines) .42 0 .58 1 (×4) Courbe d'accélération de chaque quart de cycle. 0 0 1 1 donne un mouvement régulier, sans pause apparente sur chaque forme.
Formes (HTML — values de l'animation d) losange ; cercle ; étoile ; carré ; losange Chaque forme doit garder exactement la même structure (un M puis 20 C puis Z) : sinon le navigateur saute d'une forme à l'autre au lieu de les fondre.

FAQ

Un navigateur ne sait fondre deux chemins que s'ils ont le même nombre de commandes, du même type, dans le même ordre. Les quatre formes fournies ont toutes 20 courbes cubiques C. Pour une nouvelle forme, partez d'une forme existante et déplacez ses points, ou faites-la redessiner en 20 cubiques dans un éditeur vectoriel avant de la coller dans values.
Le morphing est une animation SMIL, pilotée par les méthodes du SVG : svg.pauseAnimations() fige l'image, svg.unpauseAnimations() relance, svg.setCurrentTime(0) revient au losange. Appelez-les sur le .mrph-svg de la copie concernée, depuis un vrai <button>. animation-play-state en CSS n'a aucun effet sur SMIL.
Oui. L'effet anime l'attribut d en SMIL, que Safari prend en charge ; la propriété CSS d, elle, n'existe pas dans Safari, et une forme animée de cette façon y resterait figée. Mesuré dans WebKit avec le même rendu que Chrome et Firefox.