CSS et web

Boutons dégradés en CSS qui font haut de gamme

La plupart des boutons dégradés font bon marché pour les mêmes raisons : trop de teintes, un survol qui saute et un texte qui s’efface dans l’extrémité claire. Voici la recette qui évite les trois.

GradientlyCompte Gradiently vérifié··5 min de lecture
Couverture : Glazed Noon · GR·V530·KJ

L’essentiel en bref

  • Un bouton dégradé haut de gamme mélange en général deux teintes voisines de luminosité proche, avec un léger reflet le long de son bord supérieur.
  • Les dégradés ne se transitionnent pas : un survol fluide déplace donc un dégradé surdimensionné avec background-position ou fait apparaître un calque avec opacity.
  • Un texte blanc sur un bouton dégradé demande au moins 4,5:1 de contraste avec la partie la plus claire du dégradé, pas seulement la plus sombre.
  • Un état pressé peut être aussi simple que décaler le bouton d’un pixel vers le bas et retirer son ombre extérieure.
  • Les boutons dégradés fonctionnent mieux comme unique action principale d’un écran, les actions secondaires restant unies ou en contour.
Sur cette page

Écrire un CSS de bouton dégradé qui fait haut de gamme tient à la retenue. Choisissez deux teintes voisines de luminosité proche, ajoutez un léger reflet le long du bord supérieur, déplacez le dégradé au survol au lieu de le remplacer, et vérifiez que le texte se lit sur la partie la plus claire. La version criarde, aux bords arc-en-ciel, est facile à faire et se repère vite comme un modèle ; la version discrète est ce qui donne à un produit un air fini.

css
.button {
  display: inline-flex;
  align-items: center;
  gap: 0.5em;
  padding: 0.75em 1.4em;
  border: 0;
  border-radius: 999px;
  color: #fff;
  font-weight: 600;
  background-color: #4f46e5;
  background-image: linear-gradient(110deg, #4f46e5, #9333ea 50%, #4f46e5);
  background-size: 200% 100%;
  background-position: 0% 50%;
  box-shadow:
    inset 0 1px 0 rgb(255 255 255 / 0.25),
    0 6px 16px -6px rgb(79 70 229 / 0.6);
  transition: background-position 0.5s ease, transform 0.15s ease, box-shadow 0.15s ease;
  cursor: pointer;
}

.button:hover {
  background-position: 100% 50%;
}

.button:active {
  transform: translateY(1px);
  box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.2);
}
Toute la recette : un dégradé de double largeur qui glisse au survol, un reflet supérieur, une ombre teintée et un état pressé.
Indigo vers violet et retourlinear-gradient(110deg, #4f46e5, #9333ea 50%, #4f46e5)
Le dégradé du bouton en pleine largeur. Au repos, on voit la moitié gauche ; au survol, il glisse vers la moitié droite, qui finit de nouveau sur l’indigo.

Boutons dégradés discrets ou vifs

Un bouton discret utilise deux teintes voisines sur le cercle chromatique, comme l’indigo et le violet, si bien que le dégradé se lit comme de la profondeur plutôt que du décor. Un bouton vif couvre des teintes éloignées et devient la chose la plus colorée de la page. Le vif peut marcher pour un moment de lancement ou une marque ludique ; le discret marche partout ailleurs. Chaque palette ci-dessous garde le texte blanc au-dessus de 4,5:1 aux deux extrémités.

Des dégradés de bouton qui gardent le texte blanc lisible. Arrêts mesurés : 6,3 et 5,4, 6,7 et 5,4, 6,3 et 5,2, 5,4 et 4,7 pour 1.

Contraste du texte sur les boutons dégradés

Un vérificateur de contraste prend une couleur de fond, mais un bouton en a toute une gamme. Vérifiez la couleur du texte contre l’arrêt le plus clair, car c’est là que le libellé est le plus faible. Un texte de bouton de taille normale demande 4,5:1 selon les WCAG, et le vérificateur de contraste de WebAIM fait de chaque arrêt un contrôle rapide. L’échec habituel est un dégradé chaud qui finit en jaune ou en orange clair : il paraît énergique et rend la moitié du libellé illisible.

À éviter

  • Orange vers jaune, #f97316 vers #fbbf24, sous du texte blanc : 2,8 et 1,7 pour 1
  • Des dégradés pastel clairs avec des libellés blancs
  • Ne vérifier que la couleur derrière la première lettre
  • Des graisses fines et légères sur un dégradé chargé

À faire

  • Des arrêts profonds de luminosité proche, comme cramoisi vers orange brûlé
  • Du texte sombre sur les dégradés pastel
  • Vérifier l’arrêt le plus clair et le point médian
  • Des graisses de 600 ou plus pour les libellés sur dégradé

Plus de détails sur le calcul et les seuils dans le contraste des couleurs et l’accessibilité, et la même règle vaut pour tout texte sur un fond dégradé.

Des états de survol fluides pour les boutons dégradés

background-image ne se transitionne pas : remplacez un dégradé par un autre au survol et il saute. Il existe deux alternatives fluides. La première, utilisée dans la recette ci-dessus, consiste à peindre le dégradé deux fois plus large et à faire glisser background-position. La seconde place le dégradé de survol sur un pseudo-élément et en fait varier l’opacité, ce qui convient aux survols qui changent entièrement de couleur.

css
.button--fade {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-image: linear-gradient(110deg, #be123c, #c2410c);
}

.button--fade::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background-image: linear-gradient(110deg, #c2410c, #be123c);
  opacity: 0;
  transition: opacity 0.3s ease;
}

.button--fade:hover::before {
  opacity: 1;
}
Un survol en fondu enchaîné. L’opacité est peu coûteuse à animer, et le libellé reste au-dessus du calque.

Gardez de petits changements au survol. Un dégradé qui bouge un peu et une ombre qui s’approfondit légèrement paraissent réactifs ; un bouton qui change entièrement de teinte paraît instable. Si vous ajoutez un mouvement continu, comme un lent scintillement, coupez-le pour ceux qui préfèrent le mouvement réduit.

Bordures, contours et boutons secondaires

Un bouton dégradé par écran est en général ce qu’il faut : il marque l’action principale. Les actions secondaires vont mieux en contour qui reprend le dégradé sur un fin bord. Deux arrière-plans, l’un découpé à la boîte de remplissage et l’autre à la boîte de bordure, donnent un contour dégradé arrondi au milieu uni.

css
.button--outline {
  border: 2px solid transparent;
  border-radius: 999px;
  color: #312e81;
  background:
    linear-gradient(#fff, #fff) padding-box,
    linear-gradient(110deg, #4f46e5, #9333ea) border-box;
}
Un contour dégradé pour les actions secondaires. Les bordures dégradées CSS couvrent les versions transparentes et animées.

États désactivé et chargement

Un bouton dégradé désactivé doit cesser de ressembler à une invitation. Retirez complètement le dégradé plutôt que de baisser l’opacité, ce qui peut laisser un bouton pâli mais encore coloré sur lequel on essaie d’appuyer. Un gris uni de faible contraste avec cursor: not-allowed se lit clairement comme indisponible. Pour le chargement, gardez le dégradé et remplacez le libellé par une roue pour que le bouton ne change pas de taille.

css
.button:disabled {
  background-image: none;
  background-color: #e5e7eb;
  color: #6b7280;
  box-shadow: none;
  cursor: not-allowed;
}
Désactivé veut dire uni. Le dégradé ne revient que lorsque l’action est disponible.

Les finitions qui font haut de gamme

  • Un reflet supérieur. inset 0 1px 0 rgb(255 255 255 / 0.25) suggère une source de lumière au-dessus et donne à la surface une légère courbure.
  • Une ombre teintée. Une ombre de la teinte du bouton, plutôt que noire, le fait rayonner au lieu de flotter.
  • Un seul angle pour tout. Utilisez le même angle de dégradé, comme 110deg, pour chaque contrôle en dégradé.
  • Les couleurs de la marque, pas des préréglages. Le mélange doit venir de votre palette ; l’identité par le dégradé explique pourquoi.
  • Un reflet conique, avec parcimonie. Un léger calque conique peut ajouter un éclat métallique ; voyez les dégradés coniques CSS.

Les questions qu’on nous pose

Comment faire un bouton dégradé en CSS ?

Définissez background-image: linear-gradient(110deg, #4f46e5, #9333ea) sur le bouton, avec un texte blanc, des coins arrondis et une background-color unie en repli.

Comment animer un bouton dégradé au survol ?

Rendez le dégradé deux fois plus large avec background-size: 200% 100% et transitionnez background-position, ou faites apparaître en fondu un pseudo-élément qui porte le dégradé de survol.

Pourquoi mon bouton dégradé change-t-il instantanément au survol ?

Les navigateurs ne peuvent pas transitionner entre deux valeurs de background-image. Déplacez ou faites apparaître le dégradé au lieu de le remplacer.

Quelle couleur de texte fonctionne sur un bouton dégradé ?

Celle qui atteint au moins 4,5:1 de contraste avec la partie la plus claire du dégradé. Le blanc marche sur les dégradés profonds ; le texte sombre convient aux pastels.

Tous les boutons doivent-ils utiliser un dégradé ?

Non. Utilisez un dégradé pour l’unique action principale d’un écran et gardez les boutons secondaires unis ou en contour, pour que l’important ressorte.

Partager ce guide

Écrit par GradientlyCompte Gradiently vérifié

L’équipe derrière Gradiently, un outil de création construit autour des Marks : des dégradés vivants qui donnent à tout ce que vous créez votre propre signature.

Voir notre profil
Tous les guides : CSS et web