Hover✨ Premium

Morph on Click

Un div morphe sa forme au clic via transition CSS clip-path : cercle, losange, rectangle arrondi, triangle, retour cercle — 5 formes en boucle infinie.

CSSJSTransform

Mis à jour le

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

3 exemples d'usage

Sélecteur de format dans un outil editorial — interface de rédaction d'une startup media — Morph on Click exemple 1

① Sélecteur de format dans un outil editorial — interface de rédaction d'une startup media

QuandChaque clic sur l'icône change sa forme (cercle = post court, losange = article long, rectangle = vidéo, triangle = fil) pour indiquer le type de contenu choisi, sans texte.
PourquoiUn changement de forme encode le type de contenu sans texte supplémentaire ; c'est une convention UI directement inspirée de l'iconographie des réseaux sociaux.
RéglagesForme 80×80 px. Couleur change aussi selon la forme (ajouter une classe CSS par index). Tooltip de survol pour afficher le nom du format.
Exercice de géométrie — module de mathématiques CE1 d'une appli de soutien scolaire — Morph on Click exemple 2

② Exercice de géométrie — module de mathématiques CE1 d'une appli de soutien scolaire

QuandL'élève clique sur la forme pour qu'elle change de figure (cercle → losange → rectangle → triangle) et apprend à nommer les formes géométriques.
PourquoiUne forme qui se transforme au clic est un exercice de reconnaissance géométrique ludique et manipulable — plus engageant qu'une image statique.
RéglagesForme 160×160 px, fond coloré vif. Label textuel en dessous qui change avec la forme (« Cercle », « Losange »…) via JS. Vitesse de transition augmentée à 0,8 s pour un rendu contemplatif.
Bouton de changement de vue d'un tableau de bord — outil d'analyse de fréquentation d'une bibliothèque universitaire — Morph on Click exemple 3

③ Bouton de changement de vue d'un tableau de bord — outil d'analyse de fréquentation d'une bibliothèque universitaire

QuandUn seul bouton morphique change de forme selon la vue active : cercle = camembert, losange = diagramme en barres, rectangle = tableau.
PourquoiUn seul bouton morphique prend moins de place qu'un groupe de trois boutons de vue dans un header compact — et crée une animation de changement d'état visuellement satisfaisante.
RéglagesForme 48×48 px dans le header. Transition rapide (0,3 s). La forme active est mise en évidence par une couleur d'accentuation (background-color change aussi via JS).

Comment ça marche

Le cadre .fx-0376-root contient un élément .mph-shape avec tabindex="0" role="button" et un label descriptif. Le script maintient un index courant par instance (fermeture JavaScript — deux instances sur la même page sont indépendantes). Au chargement, l'index est 0 (cercle) et le clip-path de la forme est celui du cercle.

Au clic (ou keydown Entrée/Espace), l'index est incrémenté modulo 5 et le clip-path est mis à jour. Les 5 formes sont définies comme des valeurs clip-path en CSS : cercle (circle(50%)), losange (polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)), rectangle arrondi (inset + rayon), triangle (polygon(50% 0%, 100% 100%, 0% 100%)). La transition CSS (clip-path 0.5s ease) interpole les polygones : toutes les formes ayant le même nombre de points, le morphing est fluide.

Sous prefers-reduced-motion: reduce, la transition est supprimée (transition: none !important) : les formes changent instantanément au clic. L'effet fonctionnel (changement de forme) est conservé, seule l'animation est désactivée.

Accessibilité

  • Clavier : l'élément est focusable par Tab (tabindex="0") et annoncé comme bouton (role="button"). Les touches Entrée et Espace déclenchent le changement de forme.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, le changement de forme est instantané — pas de transition intermédiaire. Le comportement fonctionnel est préservé.
  • Label de la forme : l'élément porte un aria-label statique (« Forme — cliquez pour transformer »). Pour informer les technologies d'assistance de la forme active, ajoutez un aria-label dynamique mis à jour à chaque clic : « Cercle — cliquez pour changer de forme ».
  • Pas d'information encodée visuellement : si la forme active a une signification (cercle = type A, losange = type B…), cette information doit aussi être transmise par du texte visible ou un aria-label mis à jour — la forme seule n'est pas suffisante pour les utilisateurs de lecteurs d'écran ou de navigation clavier.

Compatibilité navigateur

CSS clip-path + 1 Ko de JavaScript, aucune dépendance. clip-path: polygon() disponible depuis Chrome 55, Firefox 54 et Safari 10. La transition CSS sur clip-path est disponible depuis Chrome 55, Firefox 72 et Safari 13.1 — sur Firefox 54-71, le changement de forme est instantané (pas de morphing animé). Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : toutes les transitions fluides dans les trois.

Chrome 55+✓ Complet (morphing animé)
Firefox 72+✓ Complet (morphing animé)
Safari 13.1+✓ Complet (morphing animé)
Edge 79+✓ Complet (morphing animé)
Mobile iOS 13.4+✓ Complet
Android Chrome 55+✓ Complet

Sans JavaScript, l'élément affiche la forme initiale (cercle) sans changer au clic. Sur Firefox 54-71 (hors périmètre courant), clip-path fonctionne mais la transition n'est pas animée : les formes changent instantanément.

Le code

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

index.html — structure
<div class="fx-0376-root">
  <div class="mph-shape" tabindex="0" role="button" aria-label="Forme — cliquez pour transformer">CLICK ME</div>
  <span class="mph-label" aria-hidden="true">Cliquez pour transformer</span>
</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
Formes (CSS — tableaux de clip-path dans le JS) cercle, losange, rectangle arrondi, triangle, (retour cercle) — 5 formes Ajoutez ou retirez des formes dans le tableau JS. Toutes les formes doivent avoir le même nombre de points de polygone pour que le morphing soit fluide ; pour des formes de taille différente, interpolez les points manuellement.
Durée de la transition (CSS — transition: clip-path 0.5s ease) 0,5 s Diminuez à 0,2 s pour un changement vif, augmentez à 1 s pour une transformation lente.
Couleur de la forme (CSS — background-color de .mph-shape) violet (#7c3aed) Ajoutez une transition sur background-color et changez la couleur en JS selon l'index pour que chaque forme ait sa propre teinte.
Taille de la forme (CSS — width et height de .mph-shape) 120×120 px Ajustez librement. Pour un aspect non carré (losange allongé, triangle large), adaptez aussi les valeurs de clip-path en conséquence.
Déclencheur (JS — événements) clic + Entrée/Espace au clavier Pour déclencher la transformation au survol à la place du clic, remplacez click par mouseenter. Pour une rotation automatique, utilisez setInterval.

FAQ

Oui. Ajoutez des valeurs clip-path dans le tableau JS. Pour que le morphing reste fluide, chaque forme doit avoir le même nombre de points ; convertissez le cercle et le rectangle arrondi en polygones à N points (où N est le nombre de points de vos formes les plus complexes).
clip-path: circle(50%) et clip-path: polygon(...) sont des types de valeurs différents ; le navigateur ne peut pas les interpoler directement. Pour animer entre un cercle et un polygone, exprimez le cercle comme un polygone à N points uniformément répartis sur un cercle (clip-path: polygon(50% 0%, 60% 10%, ...)).
Stockez l'index courant dans localStorage : localStorage.setItem('mph-idx', idx) à chaque clic, et lisez parseInt(localStorage.getItem('mph-idx') || '0') au chargement. Encadrez les accès dans un try/catch car localStorage peut être bloqué en navigation privée.