CSS og web

CSS lineær gradient: den komplette guide til linear-gradient()

Hver del af linear-gradient() forklaret med et levende eksempel ved siden af koden, fra standardretningen til hårde stop, lagdelt glans og blødere OKLCH-blandinger.

GradientlyVerificeret Gradiently-konto··6 min. læsning
Forside: Waking Hour · GR·RKP7·GN

Kort fortalt

  • En CSS lineær gradient er et billede, browseren tegner langs en ret linje, skrevet med funktionen linear-gradient() og brugt overalt, hvor et billede accepteres, som regel background-image.
  • Uden en retning løber en lineær gradient fra top til bund, hvilket svarer til 180deg. 0deg peger opad, og vinkler drejer med uret.
  • Farvestop uden positioner fordeles jævnt, og to stop på samme position giver en hård kant i stedet for en blanding.
  • Flere gradienter kan lægges i lag i ét background-image, adskilt af kommaer, hvor den første tegnes øverst.
  • Tilføjer du en interpolationsmetode som in oklch, forbliver midten af en blanding lys i stedet for at blive grå.
På denne side

En CSS lineær gradient er et billede, browseren tegner langs en ret linje og blander fra den ene farve til den næste. Du skriver den med funktionen linear-gradient() og bruger den overalt, hvor CSS accepterer et billede, oftest background-image. Den kræver ingen fil, skalerer til enhver størrelse uden at blive sløret og koster intet at downloade. Den korteste brugbare version er to farver: linear-gradient(#0f172a, #38bdf8) går fra dyb marineblå øverst til himmelblå nederst.

css
.hero {
  background-color: #0f172a; /* shown if the gradient fails */
  background-image: linear-gradient(#0f172a, #38bdf8);
}
Den enkleste lineære gradient: to farver, standardretning, med en flad farve under som reserve.
Marineblå til himmelblå, fra top til bundlinear-gradient(#0f172a, #38bdf8)
Koden ovenfor, gengivet. Ingen retning betyder fra top til bund.

Denne guide gennemgår hver del af funktionen i den rækkefølge, du møder dem. Vil du have det bredere billede af, hvordan lineære gradienter forholder sig til radiale, koniske og mesh-blandinger, så start med gradienttyperne.

Syntaksen for linear-gradient()

Funktionen tager en valgfri retning, en valgfri farveinterpolationsmetode og derefter en liste med mindst to farvestop. Alt adskilles af kommaer undtagen retningen og interpolationsmetoden, som deler det første argument.

DelEksempelHvad den gør
Retning som vinkel135deg, 0.25turnSætter gradientlinjens vinkel. 0deg peger opad, og vinkler drejer med uret.
Retning som nøgleordto right, to top leftPeger linjen mod en side eller et hjørne af boksen.
Interpolationsmetodein oklch, in srgbVælger det farverum, blandingen beregnes i.
Farvestop#38bdf8 40%En farve, eventuelt med en eller to positioner langs linjen.
Farvehint30% mellem to stopFlytter blandingens midtpunkt mellem dens naboer.
Delene i linear-gradient() i den rækkefølge, de optræder. Kun farvestoppene er påkrævet.

Den fulde reference findes på MDN’s side om linear-gradient(), som også dokumenterer den præcise grammatik fra CSS Images-specifikationen.

Gradientvinkler og retningsnøgleord

Vinkler følger et kompas: 0deg peger opad, 90deg peger til højre, 180deg peger nedad, og 270deg peger til venstre. Gradienten starter på den modsatte side og bevæger sig mod den retning, du angiver, så 90deg løber fra venstre mod højre. Du kan også skrive turn, rad eller grad, hvor 0.25turn svarer til 90deg. Standarden, når du intet angiver, er to bottom.

Ét par indigo til pink i fire vinkler. Den første farve sidder altid ved linjens start.

Hjørnenøgleord er ikke det samme som vinkler på 45 grader. to top right vipper linjen, så midterfarven løber præcis mellem de to andre hjørner, uanset boksens form. På et bredt banner er den linje meget fladere end 45deg, som altid peger på 45 grader og ignorerer boksens form. Brug nøgleord, når blandingen skal respektere hjørnerne, og vinkler, når flere elementer i forskellige former skal dele én retning. Der er mere om valg af retninger i gradientvinkler.

Farvestop, positioner og hints

Stop uden positioner fordeles jævnt, så tre farver sidder ved 0 %, 50 % og 100 %. Giv et stop en position i procent eller en længde for at flytte det. Giv det to positioner, og farven holder fast mellem dem. Sæt en enkelt procent mellem to stop, og den bliver et hint: det punkt, hvor blandingen når sin midterfarve, hvilket får den ene side af overgangen til at gå hurtigere end den anden.

css
/* even spacing */
background-image: linear-gradient(90deg, #0c4a6e, #22d3ee, #f0f9ff);

/* a hint: the midpoint arrives early, at 20% */
background-image: linear-gradient(90deg, #0c4a6e, 20%, #22d3ee);

/* two positions: cyan holds solid from 35% to 65% */
background-image: linear-gradient(90deg, #0c4a6e, #22d3ee 35% 65%, #f0f9ff);
Tre måder at forme den samme blanding på. Positioner kan også være længder som 120px.
Den samme palet fra dybt hav til is, formet på tre måder med positioner og hints.

Hårde stop til striber og opdelinger

Når to stop deler en position, er der ikke plads til at blande, så du får en skarp kant. Browsere sætter også et stop, der kommer tidligere end det foregående, til den samme position, hvilket giver en praktisk genvej: #f97316 50%, #1e293b 0 betyder, at den anden farve starter præcis, hvor den første slutter. Gentag idéen med repeating-linear-gradient(), så har du striber.

Hårde stop tegner former i stedet for blandinger. Der er mange flere i CSS-mønstre.

Læg flere gradienter i lag i én baggrund

background-image accepterer en kommasepareret liste, og det første billede males øverst. Lag skinner kun igennem hinanden, hvor de er gennemsigtige, så de øvre gradienter falmer som regel til transparent. Moderne browsere blander i præmultipliceret alfa, så at falme til transparent trækker ikke længere en grå tone ind i farven, som det engang gjorde. Kombinér lag med background-size og background-repeat, når et lag kun skal dække en del af boksen.

css
.card {
  background-color: #111827;
  background-image:
    /* top: a soft sheen across the upper third */
    linear-gradient(180deg, rgb(255 255 255 / 0.12), transparent 35%),
    /* bottom: the colour itself */
    linear-gradient(135deg, #312e81, #7c3aed 55%, #db2777);
}
En glans lagt oven på en basegradient. Den første gradient på listen tegnes øverst.

Lagdeling er også grundlaget for rigere effekter: lagdelte radiale skær laver en mesh-gradient i CSS, og et tyndt støjlag øverst skjuler trinene, som forklaret i gradientbanding.

Blødere blandinger med farveinterpolation

Når hver farve er skrevet i et ældre format som hex, rgb() eller hsl(), blander browseren i sRGB af hensyn til bagudkompatibilitet. sRGB-blandinger mellem fjerne farvetoner går gennem matte, grålige midter: blå til gul er det klassiske tilfælde. Tilføjer du in oklab eller in oklch, beder du om et perceptuelt farverum, som holder midten lysere og jævnere. Den dedikerede guide til OKLCH-gradienter i CSS dækker farvetoneretninger og reserver.

Blå til gul på tre måder. Kun interpolationsmetoden ændrer sig.

Undgå

  • Lange blandinger mellem modsatte farvetoner i almindelig sRGB
  • to top right, når flere kort i forskellige former skal dele én retning
  • At falme til white, når du mener at falme ud. Brug transparent
  • Meget bløde, mørke, brede blandinger uden korn, som får bånd på mange skærme

Gør

  • Tilføj in oklch eller et midterstop, så blandinger forbliver levende
  • Brug én vinkel, som 135deg, til et ensartet system
  • Lad lag falme til transparent, så det nedenunder viser sig
  • Tilføj et svagt støjlag over store mørke gradienter

Browserunderstøttelse og reserver

linear-gradient() virker uden præfiks i alle nuværende browsere, så de gamle -webkit--versioner kan udgå. Interpolationsmetoder, stop med to positioner og hints er nyere. Tjek caniuse for detaljerne. Det sikreste mønster er en flad background-color først, så gradienten og derefter en eventuel forbedret version i en senere erklæring, som ældre browsere springer over, fordi de ikke kan tolke den.

css
.banner {
  background-color: #1e3a8a;
  background-image: linear-gradient(90deg, #1e3a8a, #f59e0b);
  /* browsers that understand interpolation methods use this line */
  background-image: linear-gradient(90deg in oklch, #1e3a8a, #f59e0b);
}
Progressiv forbedring: hver linje overskriver den foregående, kun hvis browseren forstår den.

Vil du hellere starte fra en blanding, der allerede har karakter, end justere stop i hånden, sparer en gradientgenerator eller et bibliotek af færdige baggrunde tid. Behold under alle omstændigheder koden: en gradient i CSS forbliver skarp i enhver størrelse og vejer nogle få bytes.

Spørgsmål, folk stiller

Hvordan laver jeg en lineær gradient i CSS?

Sæt background-image: linear-gradient(retning, farve1, farve2) på et element, for eksempel linear-gradient(90deg, #0f172a, #38bdf8). Tilføj en background-color før den som reserve.

Hvad er standardretningen for en CSS lineær gradient?

Fra top til bund, det samme som to bottom eller 180deg. Den første farve vises øverst og den sidste nederst.

Hvordan laver jeg en hård linje i en lineær gradient?

Giv to nabostop den samme position, som #f97316 50%, #1e293b 50%, eller brug 0 som den anden position, så den sættes til det forrige stop.

Hvorfor ser midten af min gradient grå ud?

Hexfarver blander som standard i sRGB, hvilket gør midtpunktet mellem fjerne farvetoner mat. Tilføj in oklch eller in oklab efter vinklen, eller indsæt et lysere midterstop.

Er 45deg det samme som to top right?

Kun på et kvadrat. 45deg peger altid på 45 grader, mens to top right justerer sin vinkel, så midterfarven løber mellem boksens to andre hjørner.

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