.gradient-text {
font-family: 'Fraunces', serif;
font-size: 96px;
font-weight: 700;
background: linear-gradient(135deg, #ff2d6f 0%, #ff8a00 33%, #00d27f 66%, #7c5cff 100%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}Press Cmd/Ctrl+C to copyText that runs & the entire spectrum.
GradText is a CSS text gradient generator built on Google Fonts, OKLCH color science, and a live typography preview. The only tool that does all three. Copy production-ready CSS in under a minute. Three declarations, nothing missing.
Every font, preset, angle, and OKLCH triple.
A gradient only reads as well as the glyph it is clipped to: stroke contrast, counter size, and angle all decide how much of the color ramp survives. The lookups here cover the rest of that build: every font in the picker with the weights it actually ships, the exact stop values behind each preset, the angle keywords that map to the cardinal directions, and a starting OKLCH triple for each hue family so you can dial perceptual color without guessing. Every number matches what the tool requests from the CDN and writes into the copied CSS.
Font catalog by category and shipped weight
The picker requests a small weight subset per family to keep the CDN payload light, so the weight dropdown only shows what is listed here. A face with a single weight (Anton, Bebas Neue, the Display serifs) has no weight control to adjust.
Editorial and display serifs
| Family | Category | Shipped weights |
|---|---|---|
| Fraunces | Serif | 300, 400, 500, 600, 700, 800, 900 |
| Playfair Display | Serif | 400, 500, 600, 700, 800, 900 |
| DM Serif Display | Serif | 400 |
| Instrument Serif | Serif | 400 |
| Cormorant Garamond | Serif | 300, 400, 500, 600, 700 |
| Libre Caslon Display | Serif | 400 |
| Abril Fatface | Display | 400 |
Bold display faces
| Family | Category | Shipped weights |
|---|---|---|
| Bebas Neue | Display | 400 |
| Anton | Display | 400 |
| Archivo Black | Display | 400 |
| Big Shoulders Display | Display | 400, 500, 600, 700, 800, 900 |
| Unbounded | Display | 400, 500, 600, 700, 800, 900 |
| Bricolage Grotesque | Sans | 400, 500, 600, 700, 800 |
| Familjen Grotesk | Sans | 400, 500, 600, 700 |
| Syne | Sans | 400, 500, 600, 700, 800 |
| Space Grotesk | Sans | 300, 400, 500, 600, 700 |
Geometric and neutral sans
| Family | Category | Shipped weights |
|---|---|---|
| Inter | Sans | 300, 400, 500, 600, 700, 800, 900 |
| Manrope | Sans | 300, 400, 500, 600, 700, 800 |
| Plus Jakarta Sans | Sans | 300, 400, 500, 600, 700, 800 |
| Outfit | Sans | 300, 400, 500, 600, 700, 800, 900 |
| Sora | Sans | 300, 400, 500, 600, 700, 800 |
| DM Sans | Sans | 400, 500, 700 |
| Work Sans | Sans | 300, 400, 500, 600, 700, 800, 900 |
| Poppins | Sans | 300, 400, 500, 600, 700, 800, 900 |
Readable serifs that double as headlines
| Family | Category | Shipped weights |
|---|---|---|
| Lora | Serif | 400, 500, 600, 700 |
| Merriweather | Serif | 300, 400, 700, 900 |
| Source Serif 4 | Serif | 300, 400, 500, 600, 700, 800, 900 |
| Crimson Pro | Serif | 300, 400, 500, 600, 700, 800, 900 |
| EB Garamond | Serif | 400, 500, 600, 700, 800 |
Monospace and script
| Family | Category | Shipped weights |
|---|---|---|
| JetBrains Mono | Mono | 400, 500, 700 |
| IBM Plex Mono | Mono | 400, 500, 700 |
| Caveat | Script | 400, 500, 600, 700 |
| Pacifico | Script | 400 |
Inter is the default and the only family that renders without a CDN request, so the first paint never waits on fonts.googleapis.com.
Which faces hold a multi-stop gradient
A gradient reads off the glyph, so stroke contrast and counter size decide how much of the color ramp survives. Faces with thin hairlines lose the mid-stops; sturdy faces show every band.
| Trait | Effect on the gradient | Faces in the catalog |
|---|---|---|
| Heavy uniform stroke | Every stop is visible; best for 4–5 stop ramps | Anton, Archivo Black, Bebas Neue, Abril Fatface |
| High stroke contrast | Stops read on the thick strokes, wash out on hairlines | Playfair Display, Cormorant Garamond, DM Serif Display |
| Wide counters, open aperture | Holds 3 stops cleanly at headline size | Unbounded, Big Shoulders Display, Syne |
| Even sans weight | Predictable two- and three-stop ramps | Inter, Manrope, Sora, Space Grotesk |
| Connected script | Gradient flows along the stroke path, not letter to letter | Caveat, Pacifico |
At small sizes (under ~32px) drop to two stops; intermediate stops compress into a few pixels and read as a single muddy band regardless of face.
Preset stop values
Each preset drops a full gradient into the builder: type, angle, and the exact stops below. All twelve ship as linear HEX gradients. Positions are percentages along the angle.
| Preset | Angle | Stops (color @ position) |
|---|---|---|
| Ocean Depth | 135deg | #0ea5e9 @0, #2563eb @50, #4f46e5 @100 |
| Sunset Glow | 90deg | #f97316 @0, #ec4899 @60, #a855f7 @100 |
| Aurora | 45deg | #10b981 @0, #06b6d4 @50, #6366f1 @100 |
| Neon Noir | 135deg | #f0abfc @0, #818cf8 @100 |
| Candy Pop | 90deg | #fb7185 @0, #fbbf24 @50, #4ade80 @100 |
| Forest Mist | 180deg | #34d399 @0, #059669 @100 |
| Royal Bloom | 45deg | #c084fc @0, #e879f9 @40, #f472b6 @100 |
| Citrus Burst | 90deg | #facc15 @0, #f97316 @60, #ef4444 @100 |
| Mono Slate | 135deg | #94a3b8 @0, #334155 @100 |
| Vapor Wave | 90deg | #e879f9 @0, #818cf8 @50, #38bdf8 @100 |
| Rose Quartz | 135deg | #fda4af @0, #f9a8d4 @50, #d8b4fe @100 |
| Cyber Lime | 45deg | #a3e635 @0, #22d3ee @100 |
A reusable preset declaration looks like this once clipped to text:
/* Sunset Glow */
background: linear-gradient(90deg, #f97316 0%, #ec4899 60%, #a855f7 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;The two-stop presets (Neon Noir, Forest Mist, Mono Slate, Cyber Lime) are the safe pick for body-weight or small text; the three-stop presets want a display weight at headline size.
Direction keyword to angle map
The linear angle field takes 0–360. These keyword presets correspond to fixed angles, and the same numbers apply whether you type them or click a direction.
| Direction | Angle | Reads as |
|---|---|---|
| Top | 0deg | bottom color up to top color |
| Top-right | 45deg | diagonal, lower-left to upper-right |
| Right | 90deg | left color to right color |
| Bottom-right | 135deg | diagonal, upper-left to lower-right |
| Bottom | 180deg | top color down to bottom color |
| Bottom-left | 225deg | diagonal, upper-right to lower-left |
| Left | 270deg | right color to left color |
| Top-left | 315deg | diagonal, lower-right to upper-left |
CSS angle 0 points up and increases clockwise, which is the opposite of trig convention. A value typed as 90 sweeps left to right across the text. Switching to radial drops the angle entirely; the gradient centers on the text and the angle field hides because radial-gradient() takes no angle.
OKLCH starting values by hue family
OKLCH is oklch(L C H): lightness 0–1, chroma 0–0.4, hue 0–360 degrees. When a stop is in OKLCH mode the tool emits oklch() and writes a HEX-equivalent fallback comment. Use these as a starting triple, then nudge lightness and chroma per stop.
| Hue family | Hue (deg) | Vivid stop (L C H) | Soft stop (L C H) |
|---|---|---|---|
| Red | 25 | oklch(0.63 0.24 25) | oklch(0.78 0.12 25) |
| Orange | 60 | oklch(0.72 0.19 60) | oklch(0.84 0.10 60) |
| Yellow | 95 | oklch(0.86 0.18 95) | oklch(0.92 0.09 95) |
| Green | 145 | oklch(0.72 0.20 145) | oklch(0.83 0.11 145) |
| Cyan | 195 | oklch(0.74 0.13 195) | oklch(0.85 0.07 195) |
| Blue | 260 | oklch(0.58 0.22 260) | oklch(0.74 0.12 260) |
| Violet | 290 | oklch(0.56 0.25 290) | oklch(0.72 0.14 290) |
| Magenta | 350 | oklch(0.64 0.27 350) | oklch(0.79 0.14 350) |
Two rules keep an OKLCH ramp clean. Hold lightness within about 0.15 across stops so no single stop goes dark and swallows a glyph segment. Keep chroma near the gamut edge per hue (yellow and green tolerate less chroma than magenta and violet) or the color clips to a flatter sRGB value when the fallback fires.
Why the OKLCH midpoint stays saturated
A two-stop gradient interpolates every channel between the stops. In sRGB the path between two saturated complementary colors passes through low saturation near the middle, which is the gray band you see on a red-to-green or magenta-to-cyan ramp. OKLCH interpolates lightness, chroma, and hue independently, so chroma stays high across the transition and the hue rotates along the shorter arc of the color wheel.
sRGB magenta ──▶ [desaturated gray] ──▶ cyan
OKLCH magenta ──▶ [chroma held high] ──▶ cyanThe effect is invisible on adjacent hues (blue to violet) and strongest on opposing hues (the magenta-to-mint and red-to-green pairs). Reach for OKLCH when two stops sit far apart on the wheel; for a tight two-hue ramp the HEX fallback looks nearly identical.
CDN request shape for the active font
When a non-default font is active the copied CSS leads with an @import for that family at the active weight. The request encodes the family name with + for spaces and the weight after wght@.
@import url('https://fonts.googleapis.com/css2?family=Fraunces:wght@800&display=swap');Multiple weights join with semicolons inside the wght@ axis (wght@400;700). The display=swap flag shows the fallback face until the web font loads instead of leaving the text invisible during the fetch. The tool requests only the single active weight to keep the import small.
Related concepts
The same stop and interpolation rules apply to element backgrounds via Graduo; font pairing for the headline comes from TypeDuo.