Boutons✨ Premium

Press Feedback

Bouton orange à ombre colorée : il se soulève de 2 px au survol, puis au clic descend de 2 px, se comprime à 95 % et son contenu à 98 % pendant que l'ombre se resserre — 150 ms, CSS seul.

CSSActiveMicro

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Boutons comprend 27 effets, dont 2 gratuits. Découvrir la catégorie →

3 exemples d'usage

Ajouter — carte de plat d'une application de livraison — Press Feedback exemple 1

① Ajouter — carte de plat d'une application de livraison

QuandListe de plats : photo, nom, prix et un bouton d'ajout au panier par carte.
PourquoiOn appuie sur ce bouton des dizaines de fois par commande, souvent au pouce : la compression de 150 ms confirme chaque ajout sans animation d'attente. L'orange est la couleur de la restauration rapide ; à assombrir pour le contraste.
RéglagesBouton compact (padding: 10px 16px, 13,5 px), dégradé #c2410c → #9a3412, touch-action: manipulation, ombre réduite à 0 3px 10px.
Payer — barre d'action fixe d'un tunnel mobile — Press Feedback exemple 2

② Payer — barre d'action fixe d'un tunnel mobile

QuandBarre collée en bas de l'écran : total à gauche, bouton de paiement pleine largeur à droite.
PourquoiSur mobile il n'y a pas de survol : seul le clic compte, et c'est précisément ce que cet effet rend visible. Le span.btn-content en flex accueille le montant et une icône de cadenas avec le gap de 8 px.
RéglagesBouton pleine largeur, padding: 15px 20px, icône 🔒 en aria-hidden dans .btn-content, ombre 0 6px 20px, scale(.97) au clic pour un grand bouton.
Publier — barre d'outils d'un éditeur de contenu — Press Feedback exemple 3

③ Publier — barre d'outils d'un éditeur de contenu

QuandEn-tête d'un éditeur (article, produit, page) : statut du brouillon, bouton secondaire, bouton de publication.
PourquoiPublier est l'action irréversible de l'écran ; la compression donne au clic un poids physique et l'ombre teintée distingue ce bouton des actions neutres. Le soulèvement au survol reste discret dans une barre dense.
Réglagespadding: 11px 20px, 14 px, icône ↑ dans .btn-content, survol translateY(-1px), dégradé sombre pour le contraste.

Comment ça marche

Trois états sur .btn-press-feedback, un dégradé linear-gradient(135deg, #f97316, #ea580c) avec une ombre teintée 0 4px 15px rgba(249,115,22,.4) — c'est cette ombre orange, plutôt qu'un gris, qui donne au bouton l'air de rayonner sur sa surface. transition: .15s (toutes propriétés, courbe ease) lie les états.

Au :hover : transform: translateY(-2px) et une ombre plus lointaine et plus large, 0 8px 25px rgba(249,115,22,.5). Le bouton semble s'écarter de la surface. Au :active : translateY(2px) scale(.95) et une ombre rase 0 2px 8px rgba(249,115,22,.3) — il redescend sous sa position de repos, rétrécit et l'ombre se colle à lui. Mesuré dans Chromium : 134 × 50 px au repos, 128 × 47,5 px pendant le clic, décalé de 2 px vers le bas.

Le libellé est enveloppé dans <span class="btn-content">, en display: flex; align-items: center; gap: 8px — prêt à recevoir une icône à côté du texte — avec sa propre transition: transform .15s. Au clic, .btn-press-feedback:active .btn-content { transform: scale(.98) } : le contenu se comprime en plus du bouton, soit 0,95 × 0,98 ≈ 0,93 pour le texte. Cette double compression fait paraître le libellé enfoncé dans le bouton, pas seulement réduit avec lui.

Tout passe par transform et box-shadow : aucune propriété de mise en page ne change, les voisins ne bougent pas (contrairement à 3D Press, qui joue sur une bordure). Le span.btn-content est nécessaire pour la compression interne et l'espacement d'icône ; sans lui, le bouton fonctionne mais perd ces deux détails.

Accessibilité

  • Contraste insuffisant dans la version fournie : texte blanc sur le dégradé #f97316 → #ea580c = 2,8:1 et 3,6:1, sous le seuil AA de 4,5:1 pour un texte de 16 px. Passez à linear-gradient(135deg, #c2410c, #9a3412) (5,2:1 et 7,3:1), ou gardez #ea580c seul avec un libellé de 18 px gras (seuil 3:1). Recolorez l'ombre avec (rgba(194,65,12,.4)).
  • prefers-reduced-motion absent du code : les déplacements font 2 à 4 px sur 150 ms. Ajoutez @media (prefers-reduced-motion: reduce) { .btn-press-feedback, .btn-press-feedback .btn-content { transition: none } } — les états basculent sans glissement.
  • Clavier : :active s'applique pendant l'appui sur Espace, la compression fonctionne donc au clavier. Le soulèvement de survol n'a pas d'équivalent : ajoutez .btn-press-feedback:focus-visible { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(249,115,22,.5) }. L'outline natif est conservé, mais bleu sur orange il se lit mal — outline: 2px solid #fff; outline-offset: 3px est plus net.
  • Tactile : c'est l'un des rares effets du catalogue pensés pour le doigt — :active se déclenche au toucher et la compression est visible sous le pouce pendant le tap. Ajoutez touch-action: manipulation pour supprimer le délai de double-tap sur iOS. L'état :hover reste collé après le tap (@media (hover: hover)). Cible ≈ 50 px de haut, au-dessus du minimum de 44 px.
  • Lecteurs d'écran : le span.btn-content est un simple conteneur, le nom accessible reste le libellé. Si vous y placez une icône, mettez-la en aria-hidden="true" pour qu'elle ne soit pas lue.

Compatibilité navigateur

Requiert les transitions CSS sur transform et box-shadow, et display: flex pour le contenu — tous les navigateurs depuis 2012. Aucun JavaScript, zéro dépendance.

Chrome 29+✓ Complet
Firefox 28+✓ Complet
Safari 9+✓ Complet
Edge 12+✓ Complet
Mobile iOS✓ Complet (:hover collant après un tap)
Android Chrome✓ Complet

Sans transitions, les trois états s'appliquent instantanément : le bouton saute de 2 px et se comprime d'un coup, l'ombre change sans fondu — le retour au clic reste lisible.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
transform (CSS — :active) translateY(2px) scale(.95) Enfoncement au clic. scale(.97) pour un grand bouton (5 % de 300 px = 15 px, trop visible) ; translateY(3px) pour une course plus franche.
transform (CSS — :active .btn-content) scale(.98) Compression supplémentaire du contenu (texte + icône). 1 l'annule ; .94 fait nettement rentrer le texte dans le bouton.
transform / box-shadow (CSS — :hover) translateY(-2px) / 0 8px 25px .5 Soulèvement au survol. Supprimez la règle pour ne garder que le clic (le comportement mobile) ; translateY(-1px) dans une barre d'outils serrée.
Couleur d'ombre rgba(249,115,22,…) (CSS — 3 occurrences) orange à .4 / .5 / .3 L'ombre est teintée de la couleur du bouton : c'est ce qui fait « rayonner ». Un gris (rgba(0,0,0,.3)) donne une ombre classique ; alignez la teinte si vous changez le dégradé.
transition (CSS — .btn-press-feedback et .btn-content) .15s Durée des trois transitions. .1s = clic plus sec ; .25s = plus doux, mais le retour paraît alors en retard sur le doigt.
background (CSS — .btn-press-feedback) linear-gradient(135deg, #f97316, #ea580c) Couleur du bouton. Pour un contraste AA avec le texte blanc : #c2410c → #9a3412. Recolorez l'ombre avec.
gap (CSS — .btn-content) 8px Espace entre le libellé et une icône placée dans le span. Sans icône, la valeur est sans effet.

FAQ

Les deux ne se cumulent pas de la même façon : le bouton passe à 95 %, ombre et coins compris ; le contenu passe à 98 % de ce bouton déjà réduit, soit ≈ 93 % de sa taille de repos. Le texte rétrécit donc un peu plus que la boîte qui l'entoure, ce qui se lit comme un enfoncement — comme si le libellé s'éloignait de l'œil. Sans la seconde règle, le bouton semble seulement rapetisser.
Non pour le mouvement du bouton, oui pour deux détails : la compression interne (:active .btn-content ne trouve rien sans lui) et l'espacement d'icône (gap: 8px). Un <button class="btn-press-feedback">Envoyer</button> nu se soulève et s'enfonce normalement. Si vous ajoutez une icône SVG, placez-la dans le span avec aria-hidden="true" ; align-items: center l'aligne sur le texte.
L'effet fonctionne déjà au toucher : :active s'applique pendant le tap. Deux compléments : touch-action: manipulation sur le bouton pour supprimer le délai de détection du double-tap (iOS Safari), et, si le contexte le justifie, une vibration très courte au clic via navigator.vibrate(8) (Android uniquement, iOS ne l'expose pas). Évitez les durées supérieures à 150 ms : le doigt est déjà reparti.