Boutons✨ Premium

3D Depth Press

Face violette en dégradé posée 4 px au-dessus d'une tranche pleine dessinée par box-shadow : le survol la soulève à 6 px, le clic la ramène à zéro — la base ne bouge jamais, 150 ms, CSS seul, sans décalage de mise en page.

CSS3DActive

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

Continuer — écran de fin de niveau d'un jeu mobile — 3D Depth Press exemple 1

① Continuer — écran de fin de niveau d'un jeu mobile

QuandCarte de résultat : étoiles gagnées, score, un gros bouton pour passer au niveau suivant.
PourquoiLa touche épaisse à tranche pleine est la convention des jeux mobiles à succès ; la course de 6 px au clic se sent sous le doigt et la base fixe évite que la carte ne tremble.
RéglagesTexte 18 px, padding: 16px 44px, tranche 8px au repos / 10px au survol / 2px au clic avec les translations assorties (−6 / −8 / 0).
Voter — carte de sondage — 3D Depth Press exemple 2

② Voter — carte de sondage

QuandQuestion à choix multiples : des options, une barre de résultats, un bouton par option ou un bouton de validation.
PourquoiUn vote est un geste que l'on veut sentir : la touche qui descend et remonte confirme l'enregistrement sans animation d'attente. À taille réduite la tranche de 6 px reste lisible.
RéglagesBouton compact (padding: 11px 22px, 14 px), tranche 4px / 6px / 1px, translations −3 / −5 / 0, border-radius: 10px.
Créer mon compte — carte d'inscription — 3D Depth Press exemple 3

③ Créer mon compte — carte d'inscription

QuandFormulaire court : e-mail, mot de passe, un bouton d'inscription pleine largeur.
PourquoiSur un bouton large, la tranche pleine et l'ombre douce donnent du poids à l'engagement sans couleur criarde ; le dégradé violet reste à 5,7:1 avec le texte, aucun ajustement de contraste à prévoir.
RéglagesBouton pleine largeur, padding: 15px, tranche 5px / 7px / 2px, translations −3 / −5 / 0, ombre douce 0 8px 18px rgba(0,0,0,.35).

Comment ça marche

La profondeur est faite de deux box-shadow sur .btn-3d-depth : une ombre sans flou, 0 6px 0 #4c1d95, qui dessine une tranche violette foncée sous la face, et une ombre douce 0 8px 15px rgba(0,0,0,.3) qui pose l'ensemble sur la surface. La face elle-même est un linear-gradient(145deg, #7c3aed, #5b21b6) — le dégradé diagonal évite l'aplat et suggère une lumière venant d'en haut à gauche.

Au repos, la face est déjà décalée : transform: translateY(-4px). Elle flotte 4 px au-dessus de sa position de mise en page, et la tranche de 6 px descend 2 px sous cette position. Au :hover, translateY(-6px) et tranche 0 8px 0 ; au :active, translateY(0) et tranche 0 2px 0. Dans les trois états, translation + épaisseur de tranche = 2 px : le bas de la tranche reste exactement au même endroit. Mesuré dans Chromium, le bord bas de la base est à 177 px au repos, au survol et au clic.

C'est ce qui distingue l'effet de 3D Press : ici la tranche est une ombre et la course une transformation, deux propriétés qui ne participent pas à la mise en page. Le bouton mesure toujours 134 × 50 px pour le navigateur, quel que soit l'état, et les éléments voisins ne bougent pas d'un pixel (vérifié avec un frère sous le bouton). L'ombre douce accompagne : plus lointaine au survol (0 12px 20px, opacité .4), rase au clic (0 3px 8px).

transition: .15s (toutes propriétés, courbe ease) lie les états ; la course du survol au clic fait 6 px, assez pour être vue, assez courte pour paraître instantanée. Le border-radius: 12px hérité de .demo-btn s'applique à la face et, par construction, à la tranche (une ombre suit les coins de la boîte).

Accessibilité

  • Contraste : texte blanc sur le dégradé #7c3aed → #5b21b6 = 5,7:1 et 9,0:1 — niveau AA sur toute la face, AAA sur la moitié sombre. L'un des rares boutons du catalogue livrés conformes sans retouche.
  • prefers-reduced-motion absent du code : les déplacements font 2 à 6 px sur 150 ms. Ajoutez @media (prefers-reduced-motion: reduce) { .btn-3d-depth { transition: none } } — la touche saute entre ses positions sans glisser, le relief reste.
  • Clavier : :active s'applique pendant l'appui sur Espace, la touche s'enfonce donc au clavier. Ajoutez .btn-3d-depth:focus-visible { transform: translateY(-6px); box-shadow: 0 8px 0 #4c1d95, 0 12px 20px rgba(0,0,0,.4) } pour que le focus soulève comme le survol. L'outline natif est conservé ; il suit la face translatée.
  • Tactile : :active se déclenche au toucher — la face descend de 4 px sous le doigt pendant le tap, c'est un bon retour mobile. Sur iOS le soulèvement de survol reste collé après le tap (@media (hover: hover)). Cible ≈ 50 px de haut (56 px avec la tranche), au-dessus du minimum de 44 px.
  • Repérage : la tranche #4c1d95 et la face se détachent nettement d'un fond sombre comme clair (face 5,7:1 minimum contre le texte, tranche 1,8:1 contre #0a0a0f — un repère décoratif, la face fait le contour). Aucun contenu généré : le nom accessible est le libellé.

Compatibilité navigateur

Requiert les transitions CSS sur transform et box-shadow, les ombres multiples et linear-gradient() — tous les navigateurs depuis 2012. Aucun JavaScript, zéro dépendance.

Chrome 26+✓ Complet
Firefox 16+✓ 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 : la face saute de 2 à 6 px au lieu de glisser, le relief et la base fixe restent intacts.

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
translateY (CSS — repos −4px / survol −6px / clic 0) −4 / −6 / 0 px Hauteur de la face au-dessus de sa base. Gardez translation + épaisseur de tranche constante (ici 2 px) pour que la base ne bouge pas.
Tranche 0 Npx 0 #4c1d95 (CSS — 1re ombre, 3 états) 6 / 8 / 2 px Épaisseur de la tranche pleine. 10px = touche d'arcade ; 3px = touche plate. Ajustez les translations en conséquence.
Couleur de tranche (CSS — #4c1d95, 3 occurrences) #4c1d95 Face assombrie d'environ 25 %. Une couleur trop proche de la face aplatit le relief ; trop sombre, la tranche lit comme une ombre portée.
Ombre douce (CSS — 2de ombre, 3 états) 0 8px 15px .3 / 0 12px 20px .4 / 0 3px 8px .3 Pose le bouton sur la surface et accentue la hauteur. Supprimez-la pour un rendu « dessin animé » à plat, ne gardant que la tranche.
transition (CSS — .btn-3d-depth) .15s Durée des trois transitions. .08s = clic sec ; .25s = touche lourde.
background (CSS — .btn-3d-depth) linear-gradient(145deg, #7c3aed, #5b21b6) Face. Le contraste passe déjà AA ; si vous changez la teinte, recalculez la tranche (face −25 %) et vérifiez le texte blanc à 4,5:1.
Réserve verticale (contexte — marge) 4 px au-dessus, 2 px au-dessous Au repos la face dépasse de 4 px au-dessus de sa boîte et la tranche de 2 px au-dessous : prévoyez margin-top: 4px dans une pile serrée pour ne rien chevaucher.

FAQ

Parce que transform: translateY(-4px) s'applique dès le repos : la face est dessinée 4 px au-dessus de sa position de mise en page, tandis que la tranche descend 2 px au-dessous. Dans une rangée de boutons, celui-ci semble donc décalé vers le haut. Compensez avec margin-top: 4px (ou translate sur le conteneur), ou, si vous voulez une face alignée, mettez la translation de repos à 0 et décalez les deux autres états d'autant (−2 px au survol, +4 px au clic avec une tranche qui passe à 0).
3D Press dessine sa tranche avec border-bottom : la bordure fait partie de la boîte, donc les voisins se décalent de 2 px à chaque état. Ici la tranche est un box-shadow et la course un transform — aucune des deux n'entre dans la mise en page, rien ne bouge autour. En contrepartie, les ombres ne sont pas rognées par overflow: hidden d'un parent aussi proprement qu'une bordure : gardez 15 px de marge sous le bouton pour l'ombre douce.
Supprimez la règle .btn-3d-depth:hover. Le repos (−4 px, tranche 6 px) et le clic (0, tranche 2 px) suffisent : la face descend de 4 px vers une base immobile. C'est le comportement que voient déjà les utilisateurs tactiles, pour qui le survol n'existe pas.