CSS og web

Gradienttekst i CSS, gjort godt

Tre linjer CSS lægger en gradient inde i dine bogstaver. Det kræver et par flere at gøre den læsbar, robust og smagfuld, og at vide, hvornår teksten skal forblive almindelig.

GradientlyVerificeret Gradiently-konto··4 min. læsning
Forside: Mistral Reel · GR·SXXT·96

Kort fortalt

  • Gradienttekst i CSS virker ved at male en gradient som elementets baggrund, klippe den til bogstavernes form med background-clip: text og gøre tekstfarven gennemsigtig.
  • Sæt altid en massiv tekstfarve først, og anvend den gennemsigtige farve kun inde i et @supports-tjek, så ordene aldrig forsvinder.
  • Hver del af gradienten har brug for nok kontrast mod baggrunden, så tjek de lyseste og mørkeste stop og ikke kun ét.
  • Gradienttekst passer til korte displaylinjer i store størrelser og virker dårligt til brødtekst, links og små labels.
  • Tilføjer du box-decoration-break: clone, får hver linje i et ombrudt inline-element sin egen fulde gradient.
På denne side

Gradienttekst i CSS laves ved at male en gradient som baggrund på tekstelementet, klippe baggrunden til bogstavernes former med background-clip: text og gøre selve teksten gennemsigtig, så gradienten skinner igennem. Det kræver tre erklæringer, virker i alle nuværende browsere og forbliver rigtig, markérbar og søgbar tekst og ikke et billede.

css
.gradient-text {
  background-image: linear-gradient(90deg, #6d28d9, #be185d);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
Kerneteknikken. Den præfikserede linje holder ældre Safari- og Chromium-versioner tilfredse.
Violet til rose, til lyse siderlinear-gradient(90deg, #6d28d9, #be185d)
Gradienten inde i de bogstaver. Begge ender er mørke nok til at kunne læses på hvid.

Resten af denne guide handler om det, treliniers-versionen gør forkert: manglende reserver, kontrast, tekst over flere linjer, afskårne underlængder og designspørgsmålet om, hvornår gradienttekst overhovedet hjælper. For udtrykket i gradientbogstaver i sociale medier og brandarbejde frem for på nettet, se teksteffekter.

En robust opskrift på gradienttekst med reserver

Hvis en browser anvender color: transparent, men ikke klippet, forsvinder teksten. Sikr dig mod det: giv elementet en massiv farve hentet fra gradienten, og skift først til den gennemsigtige version, når browseren bekræfter understøttelse. Tilføj en nulstilling til tvunget farvetilstand, hvor systemet erstatter dine farver, og teksten skal forblive 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;
  }
}
Massiv farve først, gradient kun hvor det understøttes, og en systemfarve, når brugeren tvinger sine egne.

MDN’s side om background-clip dokumenterer værdien text og dens nuværende understøttelse.

Kontrast: tjek begge ender af gradienten

Et kontrastværktøj tager én tekstfarve, men gradienttekst har mange. Ordene er kun så læsbare som deres svageste del, så tjek det lyseste og det mørkeste stop mod baggrunden, og se også på midten, for en sRGB-blanding kan dykke lysere eller mattere end begge ender. Til stor displaytekst kræver WCAG mindst 3:1, til normal tekst 4,5:1. Farvekontrast forklarer forholdene.

Tekstgradienter, hvis stop alle klarer 5:1 på den nævnte baggrund. På hvid måler hvert stop over 5:1, på #0b0b12 over 7:1.

Ret gradienttekst over flere linjer og afskårne bogstaver

På et inline-element, der ombrydes, lægger browseren én baggrund hen over alle linjerne, som var de én strimmel, så første linje får begyndelsen af gradienten og sidste linje får enden. Som regel vil du have, at hver linje bærer hele gradienten. box-decoration-break: clone gør det. På blokelementer som en overskrift dækker gradienten allerede hele boksen, så en lang gradient hen over en bred overskrift kan kun vise sin midte på korte linjer.

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;
}
Hver linje får sin egen fulde gradient, og halerne på g, j, p og y bliver inde i det malede område.

Afskårne underlængder er den anden overraskelse. Baggrunden maler kun elementets boks, så med en meget stram line-height bliver de dele af bogstaverne, der hænger under den, gennemsigtige og forsvinder. En linjehøjde på omkring 1,1 eller lidt padding forneden løser det. Kursive displayskrifter kan miste spidsen af det sidste bogstav til højre af samme grund. Lidt inline-padding hjælper.

Hvornår gradienttekst virker, og hvornår ikke

Undgå

  • Brødtekst, hvor farveskiftet gør læsningen langsommere
  • Links og knapper, hvor farve signalerer tilstand
  • Små labels under omkring 24 px, hvor gradienten alligevel er usynlig
  • Regnbuegradienter med fem eller flere farvetoner
  • Gradienttekst på en gradientbaggrund

Brug den til

  • Ét ord eller en kort frase i en stor overskrift
  • Et produkt- eller brandnavn i en hero
  • Store tal i en statistikblok
  • To eller tre beslægtede farvetoner med ens lysstyrke
  • Enkle, rolige baggrunde, der lader bogstaverne føre

En god regel: gradienttekst er en accent, som kursiv. Ét fremhævet ord i en overskrift trækker blikket. Et helt afsnit af den trætter det. Tunge skriftsnit hjælper, for tynde streger viser ikke nok farve til at læses som en gradient. Bruger resten af siden allerede gradientbaggrunde, er flad typografi som regel det stærkeste valg. Tekst på gradientbaggrunde dækker det tilfælde.

Animér gradienttekst

For at få farve til at flyde gennem bogstaverne gør du baggrunden større end teksten og flytter den. Gør den 200 % bred, og animér background-position frem og tilbage med alternate, så der aldrig er et spring, hvor løkken genstarter. Respektér indstillinger for reduceret bevægelse, og hold den langsom: et glimmer hvert par sekunder læses som finish, en hurtig cyklus læses som en advarsel.

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; }
}
Farve, der driver frem og tilbage gennem ordene. Kombinér den med klippet og reserven fra opskriften ovenfor.

De samme baggrundstricks driver animerede gradienter i CSS mere bredt, og gradientkonturer frem for fyld dækkes i CSS-gradientkanter.

Spørgsmål, folk stiller

Hvordan laver jeg gradienttekst i CSS?

Sæt en gradient som background-image, tilføj -webkit-background-clip: text og background-clip: text, og sæt color: transparent. Læg en massiv farve uden for et @supports-tjek som reserve.

Hvorfor er min gradienttekst usynlig?

Teksten er gennemsigtig, men baggrunden bliver ikke klippet, som regel fordi klip-erklæringen mangler, er stavet forkert eller ikke understøttes. Anvend color: transparent kun inde i @supports (background-clip: text).

Er gradienttekst tilgængelig?

Det kan den være, hvis hver del af gradienten har nok kontrast med baggrunden, og teksten forbliver rigtig tekst. Tjek de lyseste og mørkeste stop, og nulstil farver i tvunget farvetilstand.

Hvorfor er bunden af mine bogstaver skåret af?

Den klippede baggrund dækker kun elementets boks, så en stram linjehøjde efterlader underlængder uden for den. Hæv linjehøjden til omkring 1,1, eller tilføj lidt padding forneden.

Kan jeg bruge gradienttekst i mails?

Understøttelsen af background-clip: text er ujævn på tværs af mailklienter, så brug en massiv farve eller et billede med alt-tekst dér. Se gradienter i mails.

Del denne guide

Skrevet af GradientlyVerificeret Gradiently-konto

Holdet bag Gradiently, et designværktøj bygget om Marks: levende gradienter, der får alt, du designer, til at ligne dig.

Se vores profil