Hover✨ Premium

Elastic Scale

Scale(1,15) au survol avec cubic-bezier(0.34, 1.56, 0.64, 1) — l'élément dépasse la cible de ~8 % avant de revenir : rebond élastique visible. Scale(0.95) au clic via :active. Aucun JavaScript.

CSSBezierScale

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

Nuancier de peinture — configurateur en ligne d'un fabricant — Elastic Scale exemple 1

① Nuancier de peinture — configurateur en ligne d'un fabricant

QuandDix pastilles circulaires de couleur (52×52 px) en grille 5×2 ; au survol chaque pastille grossit avec un léger rebond pour confirmer la sélection possible ; au clic elle se rétracte.
PourquoiUn rebond sur une pastille de couleur signale la sélection possible sans changer de teinte ni ajouter de bordure : le retour est physique, pas colorimétrique.
RéglagesPastilles 52×52 px circulaires (border-radius 50 %), scale(1.15) au survol avec cubic-bezier rebond, scale(0.95) au clic :active, couleur via variable CSS.
Bouton 'Réserver une table' — restaurant gastronomique — Elastic Scale exemple 2

② Bouton 'Réserver une table' — restaurant gastronomique

QuandBouton CTA centré dans la hero d'un restaurant ; au survol il grossit avec un rebond qui traduit physiquement l'invitation au clic ; au clic il s'enfonce légèrement.
PourquoiLe rebond élastique sur un bouton de réservation gastronomique donne un caractère généreux et vivant cohérent avec l'expérience en salle.
RéglagesBouton 220×52 px, dégradé brun-ambre, scale(1.15) avec cubic-bezier rebond 500 ms, scale(0.95) au :active 100 ms.
Vignettes d'artistes — plateforme de streaming musical — Elastic Scale exemple 3

③ Vignettes d'artistes — plateforme de streaming musical

QuandQuatre vignettes d'artistes en grille ; au survol chaque vignette s'agrandit avec un rebond pour signaler qu'elle est cliquable et inviter à découvrir l'artiste.
PourquoiUn agrandissement élastique sur une vignette de catalogue musical traduit l'enthousiasme associé à la découverte musicale, sans animation de couleur ou de texte.
RéglagesVignettes 100 %×130 px, border-radius 12 px, dégradé sombre propre à chaque artiste, scale(1.15) avec rebond, barre de lecture en bas.

Comment ça marche

La racine .fx-0359-root centre un bloc .hover-box.hover-elastic de 200 × 200 px sur fond #0a0a0f. L'élément porte une transition transform .5s cubic-bezier(.34, 1.56, .64, 1) — cette courbe de Bézier cubique a un point de contrôle au-dessus de 1 (1.56), ce qui lui permet de dépasser la valeur cible avant de redescendre. L'overshoot est d'environ 8 % : pour scale(1.15), l'élément atteint brièvement ~scale(1.24) avant de se stabiliser à 1.15.

Au survol (ou au focus), transform: scale(1.15) déclenche la transition avec rebond. Au clic (:active), transform: scale(0.95) avec une transition plus courte (0,1 s) donne un retour tactile immédiat. La combinaison hover-rebond + active-rétraction simule la physique d'un objet mou qu'on touche et qui s'enfonce au contact.

Mesuré dans Chromium 151 : overshoot visible (~8 %), :active immédiat, deux copies sur la même page — seule celle survolée s'anime.

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, la transition et le transform sont annulés ; au survol l'élément affiche un filter: brightness(1.15) fixe — le changement est visible sans mouvement.
  • Clavier : l’élément est un <button> nativement focusable. La règle :focus-visible déclenche le même scale(1.15) élastique ; un contour indigo signale le focus.
  • Overflow : le scale agrandit l'élément au-delà de son empreinte ; sur une grille serrée, le voisin peut être masqué. Ajoutez overflow: hidden ou un padding suffisant au conteneur parent.
  • Clic : le :active rend le clic physiquement perceptible sans JavaScript. Assurez-vous que l'action au clic est également accessible au clavier (Entrée / Espace).

Compatibilité navigateur

CSS pur (transform: scale, cubic-bezier, transition, :active, :focus-visible, prefers-reduced-motion), aucun JavaScript. Mesuré dans Chromium 151 : overshoot visible, :active immédiat, deux copies indépendantes. Fonctionne dans tous les navigateurs modernes.

Chrome 60+✓ Complet (mesuré)
Firefox 55+✓ Complet
Safari 10.1+✓ Complet
Edge 79+✓ Complet (moteur Chromium)
Mobile iOS 10.3+✓ Complet
Android Chrome 60+✓ Complet (moteur Chromium)

Sans cubic-bezier avec overshoot, utilisez ease-out : le scale reste fluide sans rebond. Sans transition, le scale est instantané mais fonctionnel.

Le code

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

index.html — structure
<div class="fx-0359-root">
  <button class="hover-box hover-elastic" type="button">
    <span>…</span>
  </button>
</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
Amplitude du rebond (CSS — cubic-bezier(.34, 1.56, .64, 1)) Deuxième point de contrôle à 1.56 → overshoot ~8 % Augmentez la seconde valeur y du 2e point de contrôle : 1.7 donne un overshoot ~20 % ; 1.2 donne un léger frémissement. Réduisez à 1.0 pour supprimer le rebond.
Scale cible (CSS — scale(1.15)) 15 % d'agrandissement scale(1.08) pour un effet subtil ; scale(1.3) pour un effet fort. Sur des éléments larges, 1.08–1.1 évite de déborder sur les voisins.
Scale au clic (CSS — :active { scale(.95) }) 5 % de rétraction scale(.9) pour un enfoncement plus prononcé ; retirez le bloc :active pour désactiver le retour tactile au clic.
Durée (CSS — transition: transform .5s) 500 ms .3s rend le rebond plus vif mais l'overshoot moins visible ; .7s le rend plus mou et prononcé.
Couleur de fond (CSS — background de .hover-elastic) linear-gradient(135deg, #14b8a6, #0d9488) Remplacez par n'importe quelle couleur ou dégradé. L'effet élastique est indépendant du fond.

FAQ

La courbe de Bézier cubique définit l'accélération d'une animation entre 0 et 1. Mettre un point de contrôle à y > 1 permet à la valeur animée de dépasser sa cible finale avant de revenir — c'est l'overshoot. cubic-bezier(0.34, 1.56, 0.64, 1) signifie : démarrage lent, dépassement ~8 % en milieu de course, arrivée à la valeur cible.
Oui : transform: scale agrandit visuellement l'élément mais ne modifie pas la mise en page (le flux reste intact). Ajoutez overflow: hidden au conteneur de la grille ou utilisez un z-index explicite sur l'élément survolé pour qu'il s'affiche devant ses voisins.
Oui. Ajoutez deux déclarations de transition : une sur l'élément au repos (pour la sortie) et une sur :hover (pour l'entrée). Par exemple, entrée avec overshoot (cubic-bezier(.34,1.56,.64,1)) et sortie rapide (ease-in .2s).