CSS og nett

Gradienttekst i CSS, gjort riktig

Tre linjer CSS legger en gradient inni bokstavene dine. Å gjøre den lesbar, robust og smakfull tar noen få til, og å vite når du bør la teksten være vanlig.

GradientlyVerifisert Gradiently-konto··5 min lesetid
Omslag: Mistral Reel · GR·SXXT·96

Kortversjonen

  • Gradienttekst i CSS lages ved å male en gradient som elementets bakgrunn, klippe den til bokstavformene med background-clip: text og gjøre tekstfargen gjennomsiktig.
  • Sett alltid en heldekkende tekstfarge først, og bruk den gjennomsiktige fargen bare inne i en @supports-sjekk, så ordene aldri forsvinner.
  • Hver del av gradienten trenger nok kontrast mot bakgrunnen, så sjekk de lyseste og mørkeste stoppene, ikke bare ett.
  • Gradienttekst passer til korte visningslinjer i stor størrelse, og fungerer dårlig til brødtekst, lenker og små etiketter.
  • Å legge til box-decoration-break: clone gir hver linje i et innebygd element som brytes, sin egen fulle gradient.
På denne siden

Gradienttekst i CSS lages ved å male en gradient som bakgrunn på tekstelementet, klippe bakgrunnen til bokstavformene med background-clip: text og gjøre selve teksten gjennomsiktig så gradienten skinner gjennom. Det tar tre deklarasjoner, virker i alle gjeldende nettlesere og forblir ekte, markerbar, søkbar tekst i stedet for et bilde.

css
.gradient-text {
  background-image: linear-gradient(90deg, #6d28d9, #be185d);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
Kjerneteknikken. Den prefikserte linjen holder eldre Safari- og Chromium-versjoner fornøyde.
Fiolett til rose, til lyse siderlinear-gradient(90deg, #6d28d9, #be185d)
Gradienten inni bokstavene. Begge endene er mørke nok til å leses på hvitt.

Resten av denne guiden tar for seg det versjonen på tre linjer gjør galt: manglende reserver, kontrast, tekst på flere linjer, avklippede nedstrekene og designspørsmålet om når gradienttekst i det hele tatt hjelper. For uttrykket til gradientbokstaver i sosiale medier og merkevarearbeid i stedet for på nettet, se teksteffekter.

En robust oppskrift på gradienttekst med reserver

Hvis en nettleser bruker color: transparent men ikke klippingen, forsvinner teksten. Sikre deg mot det: gi elementet en heldekkende farge hentet fra gradienten, og bytt til den gjennomsiktige versjonen først når nettleseren bekrefter støtte. Legg til en tilbakestilling for tvungne farger, der systemet erstatter fargene dine og teksten må forbli 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;
  }
}
Heldekkende farge først, gradient bare der det støttes, og en systemfarge når brukeren tvinger sine egne.

MDN-siden om background-clip dokumenterer verdien text og dens gjeldende støtte.

Kontrast: sjekk begge ender av gradienten

En kontrastsjekker tar én tekstfarge, men gradienttekst har mange. Ordene er bare så lesbare som den svakeste delen, så sjekk det lyseste og det mørkeste stoppet mot bakgrunnen, og se på midten også, for en sRGB-blanding kan bli lysere eller mattere enn begge ender. For stor visningstekst krever WCAG minst 3:1, og for vanlig tekst 4,5:1. Fargekontrast forklarer forholdene.

Tekstgradienter der alle stoppene klarer 5:1 på den oppgitte bakgrunnen. På hvitt måler hvert stopp over 5:1, og på #0b0b12 over 7:1.

Retting av gradienttekst på flere linjer og avklippede bokstaver

På et innebygd element som brytes, legger nettleseren én bakgrunn over alle linjene som om de var en enkelt stripe, så første linje får starten av gradienten og siste linje får enden. Som regel vil du at hver linje skal bære hele gradienten. box-decoration-break: clone gjør det. På blokkelementer, som en overskrift, spenner gradienten allerede over hele boksen, så en lang gradient over en bred overskrift kan bare vise midten 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 fulle gradient, og halene på g, j, p og y holder seg inne i det malte området.

Avklippede nedstrekene er den andre overraskelsen. Bakgrunnen maler bare elementets boks, så med en veldig stram line-height blir delene av bokstaver som henger under den, stående gjennomsiktige og forsvinner. En linjehøyde på omtrent 1,1 eller litt padding nederst retter det. Kursive visningsskrifter kan miste tuppen på siste bokstav til høyre av samme grunn, og litt indre padding hjelper.

Når gradienttekst fungerer, og når den ikke gjør det

Unngå

  • Brødtekst, der fargeskiftet bremser lesingen
  • Lenker og knapper, der farge signaliserer tilstand
  • Små etiketter under omtrent 24 px, der gradienten uansett er usynlig
  • Regnbuegradienter med fem eller flere fargetoner
  • Gradienttekst på en gradientbakgrunn

Bruk den til

  • Ett ord eller en kort frase i en stor overskrift
  • Et produkt- eller merkenavn i en hero
  • Store tall i en tallblokk
  • To eller tre beslektede fargetoner med lik lyshet
  • Enkle, rolige bakgrunner som lar bokstavene lede

En god regel: gradienttekst er en aksent, som kursiv. Ett uthevet ord i en overskrift drar blikket, mens et helt avsnitt av det sliter det ut. Tunge snitt hjelper, for tynne streker viser ikke nok farge til å leses som en gradient. Hvis resten av siden allerede bruker gradientbakgrunner, er flat skrift som regel det sterkeste valget, og tekst på gradientbakgrunner tar for seg det tilfellet.

Å animere gradienttekst

For å få farge til å flyte gjennom bokstavene gjør du bakgrunnen større enn teksten og flytter den. Gjør den 200 % bred og animer background-position fram og tilbake med alternate, så det aldri blir et hopp der løkken starter på nytt. Respekter innstillinger for redusert bevegelse, og hold den langsom: en skimring hvert par sekund leses som finpuss, mens en rask syklus leses 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; }
}
Farge som driver fram og tilbake gjennom ordene. Kombiner den med klippingen og reserven fra oppskriften over.

De samme bakgrunnstriksene driver animerte gradienter i CSS mer generelt, og gradientomriss i stedet for fyll er omtalt i gradientkanter i CSS.

Spørsmål folk stiller

Hvordan lager jeg gradienttekst i CSS?

Sett en gradient som background-image, legg til -webkit-background-clip: text og background-clip: text, og sett color: transparent. Sett en heldekkende farge utenfor en @supports-sjekk som reserve.

Hvorfor er gradientteksten min usynlig?

Teksten er gjennomsiktig, men bakgrunnen klippes ikke, som regel fordi klippedeklarasjonen mangler, er feilstavet eller ikke støttes. Bruk color: transparent bare inne i @supports (background-clip: text).

Er gradienttekst tilgjengelig?

Den kan være det, hvis hver del av gradienten har nok kontrast mot bakgrunnen og teksten forblir ekte tekst. Sjekk de lyseste og mørkeste stoppene, og tilbakestill farger i tvungen fargemodus.

Hvorfor er bunnen av bokstavene mine kuttet?

Den klippede bakgrunnen dekker bare elementets boks, så en stram linjehøyde lar nedstrekene havne utenfor. Øk linjehøyden til omtrent 1,1 eller legg til litt padding nederst.

Kan jeg bruke gradienttekst i e-post?

Støtten for background-clip: text er ujevn på tvers av e-postklienter, så bruk en heldekkende farge eller et bilde med alt-tekst der. Se gradienter i e-post.

Del denne guiden

Skrevet av GradientlyVerifisert Gradiently-konto

Teamet bak Gradiently, et designverktøy bygget rundt Marks: levende gradienter som gjør at alt du designer ser ut som ditt.

Se profilen vår