Ich habe einmal den größten Teil eines Nachmittags durch einen Verlauf verloren Kein komplizierter - ein Heldenhintergrund auf einer WP Adminify Marketing Seite, Markenblau verblasst in Markenorange, Diagonale Ich schrieb linear-gradient(45deg, #4466EE, #E99537) Und es ging in die falsche Richtung. Also habe ich es versucht -45degdrohen Auch falsch. dann 135deg, was richtig war, und ich ging weiter, ohne zu verstehen, warum, was das schlechteste Ergebnis ist, weil es garantiert, dass Sie es wieder falsch machen.
Der Grund ist, dass CSS-Gradientenwinkel nicht die Winkel sind, die Sie im Mathematikunterricht gelernt haben. 0deg Punkte herauf, und der Winkel steigt im Uhrzeigersinn. In der Trigonometrie - und in SVG, und in Leinwand - 0 Punkte rechts und Winkel steigen gegen den Uhrzeigersinn Zwei verschiedene Konventionen, eine identisch aussehende deg Einheit und keine Fehlermeldung, wenn Sie die falsche auswählen. es ist klar in aufgeschrieben CSS-Bilder Module Ebene 3, und ich hatte es einfach nie gelesen.
Das ist bei einem visuellen Generator in einer Anekdote der Fall. der Gradientengenerator Auf Toolz.dev erhalten Sie eine Live-Vorschau, dragierbare Farbstopps und kopierbares CSS für lineare, radiale und konische Gradienten - die Winkelfrage beantwortet sich also von selbst, anstatt Sie einen Nachmittag zu kosten.
tl; dr: In CSS,
0degzeigt auf die Oberteil und Winkel laufen im Uhrzeigersinn, Soto rightgleich90degund eine obere linke → unten rechts diagonale ist135deg, nicht45degdrohen einsetzen Gradientengenerator um es zu sehen, anstatt es zu erraten, und die Farbpflücker Zu sticken, die in der Mitte nicht schlammig werden. Steigungen sind<image>Werte - überall, wo Sie sie verwenden könnenurl(), Sie können einen Farbverlauf verwenden. Alle clientseitig, keine Anmeldung.
Was ist ein CSS-Gradient, technisch?
Ein Farbverlauf ist keine Farbe. Es ist ein Bilddrohen Diese einzige Tatsache erklärt den größten Teil der Syntax.
per CSS-Bilder Level 3, linear-gradient(), radial-gradient(), und ihre wiederkehrenden Varianten erzeugen einen Typwert <image>drohen Das bedeutet, wo die Spezifikation akzeptiert url('photo.jpg'), es akzeptiert auch einen Farbverlauf: background-image, border-image, list-style-image, mask-image, contentdrohen Es bedeutet auch, dass Steigungen haben Keine Eigenmaße- sie dehnen sich, um die Schachtel zu füllen, in die Sie sie stecken, weshalb der gleiche Verlauf auf einer 200-px-Taste und einem 1400-px-Helden anders aussieht.
conic-gradient() kam später und lebt in CSS-Bilder Stufe 4Neben der Interpolations-Farb-Space-Syntax werde ich unten ankommen.
Was ist der Unterschied zwischen linear, radial und konisch?
| geradlinig | radial | konisch | |
|---|---|---|---|
| Farbreisen | Auf einer geraden Linie | von einem Mittelpunkt nach außen | Um einen Mittelpunkt |
| definiert durch | ein Winkel oder to <side> |
Form (circle/ellipse), Größe, Position |
Startwinkel, Position |
| Greifen Sie danach, wenn | Hintergründe, Schaltflächen, Überlagerungen, Bild-Scrims | Scheinwerfer, Glühen, Vignetten, Mesh-Hintergründe | Kreisdiagramme, Farbräder, Fortschrittsringe, hartkantige Sektoren |
| Spezif | Bilder 3 | Bilder 3 | Bilder 4 |
| Hard-Stop Trick gibt dir | Streifen | Ringe | Keile / Tortenscheiben |
| Gotcha | Die Winkelkonvention | Größenschlüsselwörter ändern alles | Winkel hier sind auch im Uhrzeigersinn ab 12 Uhr |
Lineare Gradienten - und die Winkelkonvention
/* 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 */
Befangen Sie dies in Erinnerung und Sie werden meinen Nachmittag niemals wiederholen:
| Stichwort | Winkel |
|---|---|
to top |
0deg |
to right |
90deg |
to bottom |
180deg (die Standardeinstellung) |
to left |
270deg |
Es gibt noch eine Subtilität mit den Eck-Keywords. to bottom right tut nicht einfach gemein 135degdrohen Die Spezifikation definiert sie als einen Winkel, der so gewählt wird, dass die Gradientenlinie senkrecht zur sonst Diagonale - was auf einer nicht quadratischen Box bedeutet to bottom right und 135deg sichtbar unterschiedliche Ergebnisse erzeugen. Auf einem Quadrat sind sie identisch. Das ist die Art von Dingen, die Sie um 23 Uhr bemerken, wenn eine Karte im Design richtig und in einer schmalen Spalte falsch aussieht.
Radiale Gradienten - wo die Größenschlüsselwörter leben
/* 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);
Die vier Größen-Keywords entscheiden wo endgültig Farbstopp-Lander, gemessen von der Mitte:
closest-side- die nächste Kante der Boxfarthest-side- der am weitesten entfernte Randclosest-corner- die nächste Eckefarthest-corner- die hinterste Ecke (Dies ist die Standardeinstellung)
Ändern Sie das Schlüsselwort und der Verlauf sieht wie ein anderer Farbverlauf aus. Dies ist der häufigste Grund, warum ein radialer Farbverlauf "wird nicht tun, was ich will" und es ist viel schneller, durch die vier Optionen in der Gradientengenerator als darüber zu argumentieren.
Kegelgefälle - Kuchen, Räder und Ringe
konische Sweeps Farbe um Die Mitte, beginnend bei 12 o' Uhr und im Uhrzeigersinn gehen (gleiche Konvention wie linear - zumindest it's konsistent).
/* 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%;
}
das mask Die Linie ist der ganze Trick hinter jeder Donut-Fortschrittsanzeige, die Sie jemals gesehen haben, und es sind ungefähr sechs Zeilen CSS anstelle einer SVG-Bibliothek.
Wie steuere ich, wo die Farben landen?
Farbstopps
Geben Sie einem Stopp eine Position und Sie steuern den Übergang. stoppen zwei Positionen und man bekommt einen harten Rand - gar keine Interpolation.
/* 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%
);
Interpolationshinweise (der Mittelpunkt, von dem Sie nicht wussten, dass Sie sich bewegen können)
ein bloßer Prozentsatz zwischen Zwei Farben bewegen den 50/50 Mittelpunkt. Dies ist die am wenigsten genutzte Gradientensyntax, die ich kenne:
/* 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);
Verwenden Sie es für Bild-Scrims. ein to top, rgba(0,0,0,.8), transparent Overlay frisst normalerweise zu viel vom Foto; fallen Sie a 35% Hinweis in und die Dunkelheit bricht nach unten, wo sich die Bildunterschrift befindet.
Wiederholungsverläufe für Muster
.hatched {
background: repeating-linear-gradient(
45deg,
#0F172A 0 10px,
#1E293B 10px 20px
);
}
Eine Zeile, keine Bilddatei, unendlich skalierbar Nur don' t auf ein ganzseitiges Element anwenden und sich dann fragen, warum Scrollen auf einem Android der Mittelklasse stottert - ein großer sich wiederholender Farbverlauf während des Scrollens neu zu malen ist für den Compositor echte Arbeit.
Warum sieht mein Farbverlauf in der Mitte schlammig aus?
Zwei getrennte Ursachen, und die Leute verbinden sie ständig.
Ursache 1: sRGB-Interpolation
Standardmäßig mischen Browser Gradientenstopps in sRGB, Kanal für Kanal Für zwei Farben, die nahe beieinander auf dem Rad sitzen - blau bis lila, orange bis rot - that' s fein. Für Komplementärfarben erzeugt es ein totes graues Band in der Mitte, da der mathematische Mittelpunkt zweier gegenüberliegender sRGB-Farben ist Grob grau. Blau bis Gelb ist der klassische Täter.
CSS Images Level 4 behebt dies, indem Sie den Interpolationsraum benennen:
/* 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 Hält die wahrgenommene Leichtigkeit und Chroma über der Mischung konstant. Browser-Unterstützung für die in <colorspace> Die Syntax ist in aktuellen Chrome, Safari und Firefox gut, aber wenn Sie ältere Browser unterstützen müssen, ist der Fallback der alte manuelle Fix: Fügen Sie einen Zwischenstopp hinzu und steuern Sie die Mischung selbst.
Ursache 2: Verblassen zu transparent- und mein zweiter Fehler
transparent ist definiert als rgba(0, 0, 0, 0)drohen lichtdurchlässig finsterdrohen Wenn Browser naiv interpoliert werden, linear-gradient(#E99537, transparent) Würde auf dem Weg zu nichts durch immer dunkler, grauer Orange gleiten.
Moderne Browser don' Tun Sie das nicht - die Spezifikation erfordert eine Interpolation vormultipliziert Alpha Space, der das Problem völlig umgeht. Aber das ältere Webkit hat es nicht getan, und ich habe einen Helden auf einer Kundenseite verschickt, der auf meiner Maschine sauber aussah und auf dem zwei Jahre alten iPad wie ein schmutziger Fleck aussah. Die kugelsichere Version, die Sie nichts kostet und trotzdem überall funktioniert:
/* Explicit: same colour, zero alpha */
background: linear-gradient(#E99537, rgba(233, 149, 55, 0));
Ich schreibe es immer noch so aus Narbengewebe.
Worauf muss ich bei der Barrierefreiheit achten?
Kontrast muss über den gesamten Farbverlauf gehalten werden
WCAG 2.1 SC 1.4.3 Erfordert 4,5:1 für normalen Text und 3:1 für großen Text (18pt oder 14pt Fettdruck). Ein Farbverlauf bedeutet, dass Ihre Hintergrundfarbe bei jedem Pixel unterschiedlich ist, sodass die Anforderung gegen die erfüllt werden muss schlimmste Fall Punkt - der hellste Patch, wenn Ihr Text weiß ist, der dunkelste, wenn er's schwarz.
Das zuverlässige Muster besteht darin, den Versuch, den Verlauf selbst lesbar zu machen, nicht mehr lesbar zu machen und darüber einen Scrim zu geben:
.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;
}
Jetzt sitzt der Text auf einem bekannten dunklen Bereich, unabhängig davon, was der Farbverlauf darunter tut. Überprüfen Sie die Enden mit dem Farbpflücker Bevor Sie versenden - die vollständige Kontrastdurchführung, einschließlich der Markenfarbe, die ich bei 2,38:1 versendet habe, ist im Farbauswahl-Anleitungdrohen
Verlaufstext ist eine Falltür
Dies ist derjenige, der mich auf einer Landing-Page für die Produktion verbrannt hat:
.gradient-heading {
background: linear-gradient(135deg, #4466EE, #E99537);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
}
insofern background-clip: text #39; gilt aus irgendeinem Grund nicht - ein alter Browser, eine Erweiterung, die Hintergrundbilder blockiert, ein Druckstylesheet - Sie' bleiben übrig color: transparent und ein Unsichtbare Überschriftdrohen Der Text ist immer noch im Dom, also liest ein Bildschirmleser ihn glücklich und Sie haben keine Ahnung, dass etwas nicht stimmt. einsetzen @supports Um es zu tor:
.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;
}
}
Einfarbig Standardmäßig als Erweiterung. So hätte es beim ersten Mal geschrieben werden sollen.
Animierte Steigungen benötigen eine Bewegungsflucht
Sie können keinen Übergangsgradienten durchführen Färbung- der Browser gewann't interpolieren zwischen zwei <image> Werte. Was die Leute stattdessen animieren, ist background-position Über einen überdimensionierten Farbverlauf:
.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; }
}
Dieser letzte Block ist nicht optional. Kontinuierliche Hintergrundbewegung ist ein dokumentierter Auslöser für vestibuläre Störungen und die Auszeichnung prefers-reduced-motion ist drei Zeilen.
(Die moderne Alternative ist die Registrierung einer benutzerdefinierten Immobilie bei @property Also ist sein Typ bekannt und daher animieren und dann innerhalb des Farbverlaufs verwenden. Es ist sauber, wird in aktuellen Browsern unterstützt und es lohnt sich immer noch, den Schutz mit reduzierter Bewegung zu haben.)
Wie baue ich eine mit dem Tool?
- Öffne das Gradientengeneratordrohen
- Wählen Sie einen Typ - linear, radial oder konisch.
- Klicken Sie auf einen Stopp, um seine Farbe zu ändern; ziehen Sie ihn, um seine Position zu verschieben. Klicken Sie auf die Leiste, um einen Stopp hinzuzufügen; ziehen Sie ihn ab, um ihn zu entfernen.
- Ziehen Sie für Linear den Winkel. Beobachten Sie die Nummer: Hier ist die
0deg-is-up-Konvention hört auf, abstrakt zu sein. - Bei Radial zyklieren Sie die vier Größenschlüsselwörter und beobachten, was sich ändert. Es ist der schnellste Weg, um Intuition für sie aufzubauen.
- Kopieren Sie das CSS.
Zwei Farben sind normalerweise die richtige Antwort. Jeder Gradient, den ich bereut habe, hatte fünf Stopps.
Stehlen lohnt sich
/* 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);
Füttern Sie Ihre eigenen Markenfarben in die Farbpflücker Nehmen Sie zunächst die HSL-Werte und variieren Sie dann die Leichtigkeit statt den Farbton - das und #39; Wie Sie Stopps erhalten, die sauber verschmelzen, anstatt zu kämpfen.
Häufig gestellte Fragen
Warum geht mein CSS-Gradient in die falsche Richtung?
Weil CSS-Gradientenwinkel am beginnen Oberteil und erhöhen im Uhrzeigersinn, im Gegensatz zu Trigonometrie, SVG oder Canvas, die rechts beginnen und gegen den Uhrzeigersinn gehen. to right ist 90deg, to bottom ist 180deg, und eine Diagonale von oben links nach unten rechts ist 135deg, nicht 45degdrohen
Brauche ich noch -webkit- Präfixe für CSS-Gradienten?
nicht für linear-gradient(), radial-gradient(), oder conic-gradient()- alle drei funktionieren in jedem aktuellen Browser unpräfixiert Die eine Stelle, an der das Präfix noch seinen Halt verdient, ist -webkit-background-clip: text Für Verlaufstext, wo ältere Safari es braucht. Versenden Sie beide Erklärungen dorthin.
Kann ich einen CSS-Gradienten animieren?
Nicht der Gradientenwert selbst - ein Gradient ist ein <image>, und der Browser interpoliert nicht zwischen zwei Bildern. Die Standard-Workaround ist, den Gradienten viel größer als seine Box zu machen (background-size: 600% 600%) und belebt background-positiondrohen Der moderne Ansatz registriert eine benutzerdefinierte Eigenschaft bei @property Es hat also einen bekannten Typ und wird innerhalb des Gradienten animierbar. So oder so, bewache es mit prefers-reduced-motiondrohen
Warum sieht mein Farbverlauf in der Mitte grau oder schlammig aus?
Fast immer ist die sRGB-Interpolation zwischen Farben, die einander auf dem Rad gegenüberliegen - Blau bis Gelb ist der Klassiker. Ihr sRGB-Mittelpunkt kommt wirklich dem Grau nahe. Beheben Sie es, indem Sie einen besseren Interpolationsraum benennen linear-gradient(in oklch, to right, blue, yellow)oder durch Hinzufügen eines Zwischenstopps, um die Mischung selbst zu steuern.
Warum verblasst zu transparent schmutzig aussehen?
transparent ist definiert als rgba(0, 0, 0, 0)- transparent finsterdrohen Aktuelle Browser interpolieren im vormultiplizierten Alpha-Bereich, so dass dies kein Problem mehr ist, aber das ältere Webkit hat den Farbverlauf auf dem Weg nach draußen durchgezerrt. Wenn Sie alte Geräte unterstützen, schreiben Sie die Zero-Alpha-Version Ihrer eigenen Farbe explizit: rgba(233, 149, 55, 0) anstelle transparentdrohen
Wie mache ich eine Gradientengrenze?
Zwei Optionen. border-image: linear-gradient(135deg, #4466EE, #E99537) 1; ist eine Zeile, tötet aber lautlos border-radiusdrohen Wenn Sie abgerundete Ecken benötigen, schichten Sie zwei Hintergründe mit unterschiedlichen background-clip und background-origin wert oder setzen Sie den Farbverlauf auf ein Pseudoelement hinter der Box.
Sind CSS-Gradienten schlecht für die Leistung?
Ein statischer Gradient ist günstig - günstiger als das Herunterladen eines gleichwertigen Bildes, und er skaliert kostenlos auf jede beliebige Größe Kosten werden angezeigt, wenn ein großer Gradient sein muss neu gestrichen Wiederholt: ein ganzseitiger, sich wiederholender Verlauf während des Scrollens oder mehrere überlagerte Farbverläufe unter a backdrop-filterdrohen Wenn sich eine Seite auf dem Handy klebrig anfühlt, ist das das erste, was ich in DevTools' Paint Profiler einchecken würde.
Wie viele Farbstopps sollte ein Farbverlauf haben?
Zwei, meist. Drei, wenn Sie die Mischung durch einen bestimmten Farbton steuern möchten. Darüber hinaus greifen Sie normalerweise nach etwas, das ein Netzverlauf (mehrere positionierte Radials) besser macht, und jeder zusätzliche Stopp ist eine weitere Sache, die auf dem Display eines anderen falsch aussehen kann.
Wie mache ich einen Farbverlaufshintergrund in CSS?
Stellen Sie die background (oder background-image) Eigenschaft zu einer Gradientenfunktion. background: linear-gradient(to right, #4466EE, #E99537); Malt eine Links-Rechts-Mischung ohne Bilddatei. radial-gradient() und conic-gradient() Folgen Sie dem gleichen Muster für kreisförmige und geschwungene Mischungen. Da das Ergebnis nicht heruntergeladen und nicht heruntergeladen wird, bleibt es bei jeder Größe scharf.
Wie erstelle ich Verlaufstext in CSS?
Setzen Sie den Farbverlauf auf background, dann setzen background-clip: text (mit der -webkit- Präfix für Safari) und color: transparent, so werden die Buchstaben durch den Verlauf anstelle einer Volltonfarbe gefüllt. Behalten Sie den eigentlichen Text im Markup, anstatt ihn in ein Bild zu backen, damit er von Bildschirmlesern auswählbar und lesbar bleibt.
Abschluss
Gradienten sind eine der wenigen CSS-Funktionen, die Ihnen echten visuellen Reichtum für null Netzwerkkosten verleihen - keine Bildanforderung, keine Probleme mit dem Seitenverhältnis, auflösungsunabhängig von der Konstruktion Die Syntax ist klein Die Fallen sind spezifisch und kenntlich: die Winkelkonvention, die Schlüsselwörter der radialen Größe, sRGB-Verschwammung und die Falltür mit unsichtbarem Kopf im Gradiententext.
Bauen Sie sie dort, wo Sie sie sehen können. der Gradientengenerator ist kostenlos, läuft vollständig in Ihrem Browser und kopiert sauberes CSS. Kombiniere es mit dem Farbpflücker Für Stopps, die ihren Kontrast halten, und die CSS-Minifizierer Wenn Sie bereit sind, es einzufügen. Der Rest des Frontendregals befindet sich im Handbuch für Entwicklerproduktivitätstoolsdrohen



