CSS och webb

Gradienttext i CSS: så gör du den rätt

Tre rader CSS lägger en gradient inuti dina bokstäver. Att göra den läsbar, robust och smakfull tar några fler, och att veta när texten ska få vara enfärgad.

GradientlyVerifierat Gradiently-konto··4 minuters läsning
Omslag: Mistral Reel · GR·SXXT·96

Kortversionen

  • Gradienttext i CSS fungerar genom att en gradient målas som elementets bakgrund, klipps till bokstävernas form med background-clip: text och textfärgen görs genomskinlig.
  • Sätt alltid först en enfärgad textfärg och lägg den genomskinliga färgen bara inuti en @supports-kontroll, så att orden aldrig försvinner.
  • Varje del av gradienten behöver tillräcklig kontrast mot bakgrunden, så kontrollera de ljusaste och mörkaste stoppen, inte bara ett.
  • Gradienttext passar korta rubrikrader i stora storlekar och fungerar dåligt för brödtext, länkar och små etiketter.
  • Med box-decoration-break: clone får varje rad i ett radbrutet inline-element sin egen fullständiga gradient.
På den här sidan

Gradienttext i CSS görs genom att en gradient målas som bakgrund på textelementet, den bakgrunden klipps till bokstavsformerna med background-clip: text och själva texten görs genomskinlig så att gradienten lyser igenom. Det tar tre deklarationer, fungerar i alla nuvarande webbläsare och förblir riktig, markerbar och sökbar text i stället för en bild.

css
.gradient-text {
  background-image: linear-gradient(90deg, #6d28d9, #be185d);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
Grundtekniken. Raden med prefix håller äldre Safari- och Chromium-versioner nöjda.
Violett till ros, för ljusa sidorlinear-gradient(90deg, #6d28d9, #be185d)
Gradienten inuti de bokstäverna. Båda ändarna är mörka nog för att läsas på vitt.

Resten av den här guiden tar upp vad trerads-versionen gör fel: saknade reservlösningar, kontrast, text på flera rader, avklippta nedhäng och designfrågan om när gradienttext över huvud taget hjälper. För utseendet på gradientbokstäver i sociala medier och varumärkesarbete snarare än på webben, se texteffekter.

Ett robust recept för gradienttext med reservlösningar

Om en webbläsare tillämpar color: transparent men inte klippningen försvinner texten. Skydda dig: ge elementet en enfärgad färg hämtad från gradienten och växla sedan till den genomskinliga versionen först när webbläsaren bekräftar stöd. Lägg till en återställning för läget med tvingade färger, där systemet ersätter dina färger och texten måste förbli synlig.

css
.gradient-text {
  color: #6d28d9; /* solid fallback from the gradient */
}

@supports (background-clip: text) or (-webkit-background-clip: text) {
  .gradient-text {
    background-image: linear-gradient(90deg, #6d28d9, #be185d);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
  }
}

@media (forced-colors: active) {
  .gradient-text {
    background: none;
    color: CanvasText;
  }
}
Först enfärgad, gradient bara där det stöds och en systemfärg när användaren tvingar fram sina egna.

MDN:s sida om background-clip dokumenterar värdet text och dess nuvarande stöd.

Kontrast: kontrollera båda ändarna av gradienten

En kontrastkontroll tar en textfärg, men gradienttext har många. Orden är bara så läsbara som sin svagaste del, så kontrollera det ljusaste och det mörkaste stoppet mot bakgrunden och titta även på mitten, eftersom en sRGB-övergång kan dippa ljusare eller tråkigare än båda ändarna. För stor rubriktext kräver WCAG minst 3:1, för normal text 4,5:1. Färgkontrast förklarar förhållandena.

Textgradienter vars stopp alla klarar 5:1 mot den angivna bakgrunden. På vitt mäts varje stopp över 5:1, på #0b0b12 över 7:1.

Åtgärda gradienttext på flera rader och avklippta bokstäver

På ett inline-element som radbryts lägger webbläsaren en enda bakgrund över alla rader som om de vore en enda remsa, så den första raden får gradientens början och den sista raden får slutet. Oftast vill du att varje rad ska bära hela gradienten. box-decoration-break: clone gör det. På blockelement, som en rubrik, spänner gradienten redan över hela rutan, så en lång gradient över en bred rubrik kan visa bara sin mitt på korta rader.

css
.gradient-text {
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
  /* stop descenders being cut off */
  line-height: 1.15;
  padding-block-end: 0.08em;
}
Varje rad får sin egen fullständiga gradient, och svansarna på g, j, p och y stannar inom den målade ytan.

Avklippta nedhäng är den andra överraskningen. Bakgrunden målar bara elementets ruta, så med en mycket snäv line-height lämnas de delar av bokstäverna som hänger nedanför genomskinliga och försvinner. En radhöjd på ungefär 1,1 eller lite understa utfyllnad åtgärdar det. Kursiva rubriktypsnitt kan förlora spetsen på sin sista bokstav till höger av samma skäl, och lite utfyllnad i radriktningen hjälper.

När gradienttext fungerar och när den inte gör det

Undvik

  • Brödtext, där färgskiftet bromsar läsningen
  • Länkar och knappar, där färg signalerar läge
  • Små etiketter under cirka 24 px, där gradienten ändå är osynlig
  • Regnbågsgradienter med fem eller fler nyanser
  • Gradienttext på en gradientbakgrund

Använd den till

  • Ett ord eller en kort fras i en stor rubrik
  • Ett produkt- eller varumärkesnamn i en hero
  • Stora tal i ett statistikblock
  • Två eller tre besläktade nyanser med liknande ljushet
  • Enkla, lugna bakgrunder som låter bokstäverna leda

En bra tumregel: gradienttext är en accent, som kursiv stil. Ett markerat ord i en rubrik drar blicken, ett helt stycke av den tröttar den. Kraftiga vikter hjälper, eftersom tunna streck inte visar tillräckligt med färg för att läsas som en gradient. Om resten av sidan redan använder gradientbakgrunder är enfärgad text oftast det starkare valet. Text på gradientbakgrunder tar upp det fallet.

Att animera gradienttext

För att få färg att flöda genom bokstäverna gör du bakgrunden större än texten och flyttar den. Ge den 200 % bredd och animera background-position fram och tillbaka med alternate, så att det aldrig blir ett hopp där loopen startar om. Respektera inställningarna för reducerad rörelse och håll den långsam: ett skimmer med några sekunders mellanrum läses som finish, en snabb cykel läses som en varning.

css
.gradient-text--flow {
  background-image: linear-gradient(90deg, #6d28d9, #be185d, #c2410c);
  background-size: 200% 100%;
  animation: flow 6s ease-in-out infinite alternate;
}

@keyframes flow {
  from { background-position: 0% 50%; }
  to   { background-position: 100% 50%; }
}

@media (prefers-reduced-motion: reduce) {
  .gradient-text--flow { animation: none; }
}
Färg som driver fram och tillbaka genom orden. Kombinera den med klippningen och reservlösningen från receptet ovan.

Samma bakgrundstrick driver animerade gradienter i CSS mer generellt, och gradientkonturer i stället för fyllningar tas upp i CSS-gradientramar.

Vanliga frågor

Hur gör jag gradienttext i CSS?

Sätt en gradient som background-image, lägg till -webkit-background-clip: text och background-clip: text och sätt color: transparent. Lägg en enfärgad färg utanför en @supports-kontroll som reserv.

Varför är min gradienttext osynlig?

Texten är genomskinlig men bakgrunden klipps inte, oftast för att klippdeklarationen saknas, är felstavad eller inte stöds. Använd color: transparent bara inuti @supports (background-clip: text).

Är gradienttext tillgänglig?

Det kan den vara, om varje del av gradienten har tillräcklig kontrast mot bakgrunden och texten förblir riktig text. Kontrollera de ljusaste och mörkaste stoppen och återställ färger i läget med tvingade färger.

Varför är botten på mina bokstäver avklippt?

Den klippta bakgrunden täcker bara elementets ruta, så en snäv radhöjd lämnar nedhängen utanför den. Höj radhöjden till ungefär 1,1 eller lägg till lite understa utfyllnad.

Kan jag använda gradienttext i mejl?

Stödet för background-clip: text är ojämnt mellan mejlprogram, så använd en enfärgad färg eller en bild med alternativtext där. Se gradienter i mejl.

Dela den här guiden

Skriven av GradientlyVerifierat Gradiently-konto

Teamet bakom Gradiently, ett designverktyg byggt kring Marks: levande gradienter som får allt du gör att kännas som ditt.

Se vår profil