J'ai perdu la majeure partie d'un après-midi à cause d'un dégradé une fois. Pas compliqué - un arrière-plan de héros sur une page de marketing WP Adminify, Brand Blue s'estompant en marque orange, diagonale. j'ai écrit linear-gradient(45deg, #4466EE, #E99537) Et ça s'est passé dans le mauvais sens. Alors j'ai essayé -45deg. Aussi faux. à ce moment- 135deg, ce qui était vrai, et j'ai déménagé sans comprendre pourquoi, ce qui est le pire résultat possible car cela garantit que vous vous tromperez à nouveau.
La raison en est que les angles de gradient CSS ne sont pas les angles que vous avez appris en cours de mathématiques. 0deg points en l'air, et l'angle augmente dans le sens des aiguille. En trigonométrie - et en SVG, et en toile - 0 point à droite et les angles augmentent dans le sens inverse des aiguilles d'une montre. Deux conventions différentes, une à l'apparence identique deg unité et aucun message d'erreur lorsque vous choisissez le mauvais. C'est écrit clairement dans Images du module CSS Niveau 3, et je ne l'avais tout simplement jamais lu.
C'est le cas pour un générateur visuel dans une anecdote. le Générateur de gradient Sur Toolz.dev vous donne un aperçu en direct, des arrêts de couleurs traînantes et des CSS copiables pour les dégradés linéaires, radiaux et coniques - la question d'angle se répond donc elle-même au lieu de vous coûter un après-midi.
tl;dr : En CSS,
0degpointe vers le élite et les angles courent dans le sens des aiguille, doncto rightégaux90deget une diagonale en haut à gauche → en bas à droite est135deg, pas45deg. manier Générateur de gradient le voir plutôt que de le deviner, et le cueillette de couleurs Pour choisir des arrêts qui ne deviennent pas boueux au milieu. Les gradients sont<image>Valeurs — partout où vous pouvez utiliserurl(), vous pouvez utiliser un dégradé. Tout côté client, pas d'inscription.
Qu'est-ce qu'un gradient CSS, techniquement ?
Un dégradé n'est pas une couleur. C'est un imaginer. Ce fait unique explique la plupart de la syntaxe.
selon Images CSS Niveau 3, linear-gradient(), radial-gradient(), et leurs variantes répétées produisent une valeur de type <image>. Cela signifie que partout où la spécification accepte url('photo.jpg'), il accepte également un dégradé : background-image, border-image, list-style-image, mask-image, content. Cela signifie également que les gradients ont Pas de dimensions intrinsèques — Ils s'étirent pour remplir la boîte dans laquelle vous les mettez, c'est pourquoi le même dégradé est différent sur un bouton 200 px et un héros de 1 400 px.
conic-gradient() est venu plus tard et vit dans Images CSS Niveau 4, à côté de la syntaxe interpolation-espace-couleur, j'irai ci-dessous.
Quelle est la différence entre linéaire, radial et conique ?
| linéaire | radial | de forme conique | |
|---|---|---|---|
| Voyages en couleur | le long d'une ligne droite | vers l'extérieur à partir d'un point central | autour d'un point central |
| Défini par | un angle ou to <side> |
forme (circle/ellipse), taille, position |
Angle de départ, position |
| Atteignez-le quand | Arrière-plans, boutons, superpositions, canevas d'image | Spotlights, Glows, Vignettes, Arrière-plans de maille | Graphiques circulaires, roues de couleur, bagues de progression, secteurs à bords durs |
| spécification | Images 3 | Images 3 | Images 4 |
| Le tour de hard-stop vous donne | rayures | anneaux | Tranches de tarte et de tarte |
| gotcha | La convention d'angle | Les mots-clés de taille changent tout | Les angles sont également dans le sens des aiguilles d'une montre à partir de 12 heures |
Dégradés linéaires — et la convention d'angle
/* Default: top to bottom. No angle needed. */
background: linear-gradient(#4466EE, #E99537);
/* Keywords are the safe way to say it */
background: linear-gradient(to right, #4466EE, #E99537);
background: linear-gradient(to bottom right, #4466EE, #E99537);
/* Angles: 0deg = up, clockwise from there */
background: linear-gradient(90deg, #4466EE, #E99537); /* same as `to right` */
background: linear-gradient(180deg, #4466EE, #E99537); /* same as `to bottom` */
background: linear-gradient(135deg, #4466EE, #E99537); /* top-left → bottom-right */
Conservez ceci en mémoire et vous ne répéterez jamais mon après-midi :
| clef en | angle |
|---|---|
to top |
0deg |
to right |
90deg |
to bottom |
180deg (la valeur par défaut) |
to left |
270deg |
Il y a une subtilité de plus avec les mots-clés de coin. to bottom right FAIRE non signifie simplement 135deg. La spécification la définit comme un angle choisi de sorte que la ligne de gradient soit perpendiculaire à la autre diagonale - ce qui signifie sur une boîte non carrée, to bottom right et 135deg produire des résultats visiblement différents. Sur un carré, ils sont identiques. C'est le genre de chose que vous remarquez à 23 heures lorsqu'une carte semble correcte dans la conception et mauvaise dans une colonne étroite.
Dégradés radiaux — où vivent les mots clés de taille
/* Simple */
background: radial-gradient(circle, #4466EE, #0F172A);
/* Positioned spotlight */
background: radial-gradient(circle at 30% 20%, #4466EE, transparent 60%);
/* Explicit size */
background: radial-gradient(circle closest-side at 60% 40%, #E99537, transparent);
Les quatre mots-clés de taille décident où final Terrains d'arrêt de couleur, mesurés à partir du centre :
closest-side— le bord le plus proche de la boîtefarthest-side— le bord le plus éloignéclosest-corner— Le coin le plus prochefarthest-corner— le coin le plus éloigné (c'est la valeur par défaut)
Changer le mot-clé et le dégradé ressemble à un autre dégradé. C'est la raison la plus courante pour laquelle un gradient radial "ne fera pas ce que je veux", et il est beaucoup plus rapide de cliquer sur les quatre options de la Générateur de gradient que de raisonner à ce sujet.
Dégradés de coniques - tartes, roues et anneaux
Conique balaye la couleur vers Le centre, à partir de 12 heures et en allant dans le sens des aiguilles d'une montre (même convention que linéaire - au moins, est cohérent).
/* Colour wheel */
background: conic-gradient(red, yellow, lime, aqua, blue, magenta, red);
/* Pie chart with hard stops — 40% / 35% / 25% */
background: conic-gradient(
#4466EE 0deg 144deg,
#E99537 144deg 270deg,
#34D399 270deg 360deg
);
/* Progress ring: conic + a mask */
.ring {
background: conic-gradient(#4466EE 0turn 0.63turn, #E5E7EB 0.63turn 1turn);
mask: radial-gradient(circle, transparent 60%, #000 61%);
border-radius: 50%;
}
celui mask Line est l'astuce derrière chaque indicateur de progression de beignes que vous ayez jamais vu, et il s'agit d'environ six lignes de CSS au lieu d'une bibliothèque SVG.
Comment puis-je contrôler l'endroit où les couleurs atterrissent ?
La couleur s'arrête
Donnez une position d'arrêt et vous contrôlez la transition. stopper deux positions et vous obtenez un bord dur - aucune interpolation du tout.
/* Even (default) */
background: linear-gradient(to right, #4466EE, #E99537);
/* Explicit positions: solid blue to 30%, then blend */
background: linear-gradient(to right, #4466EE 30%, #E99537 70%);
/* Hard stops = stripes. The double-position syntax is Images 4. */
background: linear-gradient(
to right,
#4466EE 0 25%,
#E99537 25% 50%,
#34D399 50% 75%,
#0F172A 75% 100%
);
Conseils d'interpolation (le point médian que vous ne saviez pas pouvoir déplacer)
Un pourcentage nu entre Deux couleurs déplacent le milieu 50/50. C'est le morceau de syntaxe de dégradé le plus sous-utilisé que je connaisse :
/* Default: the halfway colour sits at 50% */
background: linear-gradient(to right, #4466EE, #E99537);
/* Halfway colour now sits at 25% — blue gives way early */
background: linear-gradient(to right, #4466EE, 25%, #E99537);
Utilisez-le pour les canevas d'images. un to top, rgba(0,0,0,.8), transparent La superposition consomme généralement trop de photos ; laissez tomber un 35% Astuce et l'obscurité s'effondre vers le bas où se trouve la légende.
Répéter les gradients pour les modèles
.hatched {
background: repeating-linear-gradient(
45deg,
#0F172A 0 10px,
#1E293B 10px 20px
);
}
Une ligne, aucun fichier image, évolutif à l'infini. Ne l'appliquez pas à un élément d'une page entière, puis ne vous demandez pas pourquoi le défilement des bégaiements sur un Android de milieu de gamme - repeindre un grand dégradé répétitif pendant le défilement est un véritable travail pour le compositeur.
Pourquoi mon dégradé a-t-il l'air boueux au milieu ?
Deux causes distinctes, et les gens les confondent constamment.
Cause 1 : interpolation sRGB
Par défaut, les navigateurs fusionnent les arrêts de dégradé dans sRGB, canal par canal. Pour deux couleurs qui se rapprochent de l'autre sur la roue - bleu à violet, orange à rouge - c'est bien. Pour des couleurs complémentaires, il produit une bande grise morte au milieu, car le milieu mathématique de deux couleurs sRGB opposées est Près de gris. Le bleu au jaune est le délinquant classique.
Images CSS Le niveau 4 corrige ce problème en vous permettant de nommer l'espace d'interpolation :
/* Grey sludge in the middle */
background: linear-gradient(to right, blue, yellow);
/* Vivid all the way through */
background: linear-gradient(in oklch, to right, blue, yellow);
oklch Maintient la légèreté et la chroma perçues dans le mélange. Prise en charge du navigateur pour le in <colorspace> La syntaxe est bonne dans Chrome, Safari et Firefox actuels, mais si vous devez prendre en charge les anciens navigateurs, l'ancien problème est l'ancienne solution manuelle : ajoutez un arrêt intermédiaire et dirigez-vous le mélange vous-même.
Cause 2 : Faute de transparent — et ma deuxième erreur
transparent est défini comme rgba(0, 0, 0, 0). transparent noircir. Si les navigateurs interviennent naïvement, linear-gradient(#E99537, transparent) glisserait à travers de plus en plus foncé, plus orange, sur son chemin vers rien.
Les navigateurs modernes ne le font pas - la spécification nécessite une interpolation dans prémultiplié Alpha Space, qui évite complètement le problème. Mais Webkit plus ancien ne l'a pas fait, et j'ai expédié un héros sur un site client qui avait l'air propre sur ma machine et qui ressemblait à une sale tache sur leur iPad de deux ans. La version Bulletproof, qui ne vous coûte rien et qui fonctionne toujours partout :
/* Explicit: same colour, zero alpha */
background: linear-gradient(#E99537, rgba(233, 149, 55, 0));
Je l'écris toujours de cette façon à partir de tissu cicatriciel.
Que dois-je surveiller avec l'accessibilité ?
Le contraste doit être maintenu sur l'ensemble du gradient
WCAG 2.1 SC 1.4.3 Nécessite 4,5: 1 pour le texte normal et 3: 1 pour le texte volumineux (18 pt ou 14 pts). Un dégradé signifie que la couleur de votre arrière-plan est différente à chaque pixel, de sorte que la condition doit être respectée par rapport à la dans le pire des cas Point — Le patch le plus clair si votre texte est blanc, le plus sombre s'il est noir.
Le modèle fiable est d'arrêter d'essayer de rendre le dégradé lui-même lisible et de superposer un canevas sur le dessus :
.hero {
background:
linear-gradient(to bottom, rgba(15, 23, 42, 0.55), rgba(15, 23, 42, 0.8)),
linear-gradient(135deg, #4466EE, #E99537);
color: #fff;
}
Maintenant, le texte se trouve sur une plage sombre connue, peu importe ce que fait le gradient en dessous. Vérifiez les extrémités avec le cueillette de couleurs Avant d'expédier, la procédure pas à pas de contraste, y compris la couleur de la marque que j'ai expédiée à 2,38:1, est dans le Guide de sélection de couleurs.
Le texte de dégradé est une trappe
C'est celui qui m'a réellement brûlé sur une page de destination de production :
.gradient-heading {
background: linear-gradient(135deg, #4466EE, #E99537);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
}
si background-clip: text Ne s'applique pour aucune raison - un ancien navigateur, une extension bloquant les images d'arrière-plan, une feuille de style d'impression - avec laquelle vous vous trouvez color: transparent et un En-tête invisible. Le texte est toujours dans le DOM, donc un lecteur d'écran le lit avec joie et vous n'avez aucune idée que quelque chose ne va pas. manier @supports Pour le refermer :
.gradient-heading { color: #0F172A; }
@supports (background-clip: text) or (-webkit-background-clip: text) {
.gradient-heading {
background: linear-gradient(135deg, #4466EE, #E99537);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
}
}
Couleur unie Par défaut, dégradé comme amélioration. C'est comme ça que ça aurait dû être écrit la première fois.
Les dégradés animés ont besoin d'une trappe d'évacuation de mouvement
Vous ne pouvez pas passer le gradient de transition couleurs — Le navigateur n'interviendra pas entre deux <image> valeurs. Ce que les gens animent à la place, c'est background-position sur un dégradé surdimensionné :
.animated {
background: linear-gradient(270deg, #4466EE, #E99537, #34D399);
background-size: 600% 600%;
animation: shift 12s ease infinite;
}
@keyframes shift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
@media (prefers-reduced-motion: reduce) {
.animated { animation: none; }
}
Ce dernier bloc n'est pas facultatif. Le mouvement de fond continu est un déclencheur documenté pour les troubles vestibulaires et l'honneur prefers-reduced-motion est trois lignes.
(L'alternative moderne consiste à enregistrer une propriété personnalisée auprès de @property Son type est donc connu et par conséquent Animable, puis l'utiliser à l'intérieur du dégradé. C'est propre, c'est pris en charge dans les navigateurs actuels, et ça vaut toujours la peine d'avoir la garde à mouvement réduit.)
Comment en construire un avec l'outil ?
- Ouvrez le Générateur de gradient.
- Choisissez un type — linéaire, radial ou conique.
- Cliquez sur un arrêt pour changer de couleur ; faites-le glisser pour déplacer sa position. Cliquez sur la barre pour ajouter un arrêt ; faites-le glisser pour le supprimer.
- Pour linéaire, faites glisser l'angle. Regardez le numéro : c'est là que le
0deg-Is-Up Convention cesse d'être abstrait. - Pour Radial, cyclez les quatre mots-clés de taille et observez ce qui change. C'est le moyen le plus rapide de créer une intuition pour eux.
- Copiez le CSS.
Deux couleurs sont généralement la bonne réponse. Chaque dégradé que j'ai regretté avait cinq arrêts.
Dégradés qui valent la peine d'être volés
/* Toolz brand diagonal */
background: linear-gradient(135deg, #4466EE, #E99537);
/* Deep UI surface — subtle enough that nobody calls it a gradient */
background: linear-gradient(to bottom, #1E293B, #0F172A);
/* Card lift: 4% of tonal difference, and it reads as depth */
background: linear-gradient(to bottom, #FFFFFF, #F8FAFC);
/* Mesh — four positioned radials over a base colour */
background-color: #4466EE;
background-image:
radial-gradient(at 18% 24%, #E99537 0px, transparent 52%),
radial-gradient(at 79% 17%, #34D399 0px, transparent 48%),
radial-gradient(at 41% 83%, #8B5CF6 0px, transparent 55%);
/* Frosted glass */
background: linear-gradient(135deg, rgba(255,255,255,0.12), rgba(255,255,255,0.04));
backdrop-filter: blur(12px);
border: 1px solid rgba(255,255,255,0.18);
Introduisez vos propres couleurs de marque dans le cueillette de couleurs Tout d'abord, prenez les valeurs HSL, puis variez la légèreté plutôt que la teinte - c'est ainsi que vous obtenez des arrêts qui se mélangent proprement au lieu de vous battre.
Questions fréquentes
Pourquoi mon gradient CSS va-t-il dans la mauvaise direction ?
Parce que les angles de gradient CSS commencent à élite et augmenter dans le sens des aiguille, contrairement à la trigonométrie, au SVG ou au canevas, qui commence par la droite et passe dans le sens inverse des aiguilles d'une montre. to right est 90deg, to bottom est 180deg, et une diagonale en haut à gauche et en bas à droite est 135deg, pas 45deg.
ai-je encore besoin -webkit- Préfixes pour les gradients CSS ?
pas pour linear-gradient(), radial-gradient(), ou conic-gradient() — Les trois fonctionnent sans préfixe dans chaque navigateur actuel. Le seul endroit où le préfixe gagne toujours son don est -webkit-background-clip: text Pour le texte de dégradé, où Safari plus ancien en a besoin. Envoyez-y les deux déclarations.
Puis-je animer un gradient CSS ?
pas la valeur de gradient elle-même - un gradient est un <image>, et le navigateur n'interviendra pas entre deux images. La solution de contournement standard consiste à rendre le dégradé beaucoup plus grand que sa boîte (background-size: 600% 600%) et animer background-position. L'approche moderne enregistre une propriété personnalisée avec @property Il a donc un type connu et devient animable à l'intérieur du gradient. Dans tous les cas, gardez-le avec prefers-reduced-motion.
Pourquoi mon dégradé est-il gris ou boueux au milieu ?
Presque toujours, l'interpolation sRGB entre les couleurs qui se font face sur la roue - le bleu au jaune est le classique. Leur point médian sRGB est vraiment proche du gris. Réparez-le en nommant un meilleur espace d'interpolation, linear-gradient(in oklch, to right, blue, yellow), ou en ajoutant un arrêt intermédiaire pour diriger le mélange vous-même.
Pourquoi la décoloration à transparent Vous avez l'air sale ?
transparent est défini comme rgba(0, 0, 0, 0) — Transparent noircir. Les navigateurs actuels s'interposent dans l'espace alpha prémultiplié, de sorte que ce n'est plus un problème, mais Webkit plus ancien a fait glisser le dégradé dans le gris lors de son départ. Si vous prenez en charge les anciens appareils, écrivez explicitement la version zéro-alpha de votre propre couleur : rgba(233, 149, 55, 0) au lieu de transparent.
Comment créer une frontière dégradée ?
Deux options. border-image: linear-gradient(135deg, #4466EE, #E99537) 1; est une ligne mais tue silencieusement border-radius. Si vous avez besoin de coins arrondis, superposez deux arrière-plans avec des background-clip et background-origin valeurs, ou placez le gradient sur un pseudo-élément derrière la boîte.
Les gradients CSS sont-ils mauvais pour les performances ?
Un dégradé statique est bon marché - moins cher que de télécharger une image équivalente, et il s'adapte à n'importe quelle taille gratuitement. Les coûts s'affichent lorsqu'un grand gradient doit être repeint Répétition : un dégradé répétant pleine page pendant le défilement, ou plusieurs dégradés de couches sous un backdrop-filter. Si une page semble collante sur mobile, c'est la première chose que je vérifierais dans DevTools'Pein Profiler.
Combien de stops de couleur un dégradé devrait-il avoir ?
Deux, la plupart du temps. Trois lorsque vous souhaitez diriger le mélange à travers une teinte spécifique. Au-delà de cela, vous recherchez généralement quelque chose qu'un dégradé de maillage (plusieurs radiaux positionnés) fait mieux, et chaque arrêt supplémentaire est une chose de plus qui peut sembler fausse sur l'écran de quelqu'un d'autre.
Comment créer une formation en gradient en CSS ?
Réglez le background (ou background-image) propriété d'une fonction de gradient. background: linear-gradient(to right, #4466EE, #E99537); Peint un mélange de gauche à droite sans aucun fichier image. radial-gradient() et conic-gradient() Suivez le même modèle pour les mélanges circulaires et balayés. Parce que le résultat est généré plutôt que téléchargé, il reste net à n'importe quelle taille.
Comment créer du texte dégradé dans CSS ?
Mettez le dégradé background, puis définissez background-clip: text (avec le -webkit- préfixe pour Safari) et color: transparent, afin que les lettres soient remplies par le dégradé au lieu d'une couleur unie. Gardez le texte réel dans le balisage plutôt que de le cuire dans une image, afin qu'il reste sélectionnable et lisible par les lecteurs d'écran.
arrivée
Les dégradés sont l'une des rares fonctionnalités CSS qui vous offrent une réelle richesse visuelle pour un coût nul du réseau - pas de demande d'image, pas de problèmes d'aspect-ratio, indépendant de la résolution par construction. La syntaxe est petite. Les pièges sont spécifiques et connaissables : la convention d'angle, les mots clés de taille radiale, la boue sRGB et la trappe de la tête invisible dans le texte de dégradé.
Construisez-les là où vous pouvez les voir. le Générateur de gradient est gratuit, s'exécute entièrement dans votre navigateur et copie CSS Clean CSS. associez-le à la cueillette de couleurs Pour les arrêts qui retiennent leur contraste, et le CSS Minifier Lorsque vous êtes prêt à l'intégrer. Le reste de l'étagère frontale est dans Guide des outils de productivité des développeurs.

