Markedet
Priser
Log indStart
DesignguidenCSS og web
CSS og web

CSS @property: animer gradienter og brugerdefinerede egenskaber

Gradienter nægter at lave overgange, fordi browseren ikke kan blande ét billede med et andet. Giv en brugerdefineret egenskab en type, og grænsen forsvinder. Her er, hvordan @property virker, med kode du kan indsætte.

GradientlyVerificeret Gradiently-konto·1. oktober 2026·6 min. læsning
Forside: Hollow Aria · GR·QW8R·QX

Kort fortalt

  • CSS @property registrerer en brugerdefineret egenskab med en syntaks, en arveregel og en startværdi, som fortæller browseren, hvilken type værdi den rummer.
  • Browsere kan ikke lave en direkte overgang på en gradient, fordi background-image ikke kan interpoleres, men de kan lave overgange på en typet brugerdefineret egenskab inde i gradienten.
  • Typede egenskaber som <color>, <angle>, <percentage> og <length> animerer jævnt; en egenskab med den universelle syntaks * skifter bare mellem værdier.
  • @property-reglen understøttes i nuværende Chrome, Edge, Safari og Firefox, og browsere, der ignorerer den, viser blot gradienten uden bevægelse.
  • At animere en brugerdefineret egenskab i en baggrund gentegner elementet ved hvert billede, så hold det animerede område beskedent og respekter prefers-reduced-motion.
På denne side
Hvorfor gradienter ikke selv laver overgangeSyntaksen i @propertyAnimer en gradientfarve ved hoverDrej en konisk gradientkantFlyt et farvestopRegistrering fra JavaScriptBrowserunderstøttelse, nødløsninger og ydeevne

CSS @property registrerer en brugerdefineret egenskab med en type, så browseren ved, at --angle rummer en vinkel, eller at --tint rummer en farve. Når den kender typen, kan den interpolere mellem to værdier, hvilket betyder, at du kan lave overgange og animere ting, som CSS normalt nægter at flytte: gradientfarver, gradientvinkler og placeringen af et farvestop. Uden registrering er en brugerdefineret egenskab bare en streng, og en streng kan kun hoppe fra den ene værdi til den næste.

Hvorfor gradienter ikke selv laver overgange

Prøv transition: background 0.4s på en knap, hvis hover-tilstand bytter én linear-gradient() ud med en anden, og intet glider: den nye gradient springer ind. Gradienter er billeder, og specifikationen behandler background-image som ikke-interpolerbar, så browseren har ingen måde at blande ét billede med et andet.

Den sædvanlige omvej er at gøre baggrunden for stor og lade background-position glide, hvilket er, hvordan de fleste animerede CSS-gradienter er bygget. Det virker, men det flytter kun en fast gradient rundt. Du kan ikke ændre en farve, dreje en vinkel eller skubbe et stop af sted. Registrerede egenskaber ændrer det, for det, der animeres, er ikke længere billedet, men et typet tal eller en farve inde i det. Browseren genberegner gradienten ved hvert billede ud fra den aktuelle værdi.

Uregistreret --tint

  • Gemt som en streng af tokens
  • Overgange springer halvvejs
  • Arves som standard
  • En ugyldig værdi ødelægger deklarationen ved beregning

Registreret med @property

  • Fortolkes som en rigtig farve
  • Overgange interpolerer jævnt
  • Arv er dit valg
  • En ugyldig værdi falder tilbage til startværdien

Syntaksen i @property

En @property-regel har tre descriptors. syntax siger, hvilken type værdi der er tilladt, inherits siger, om børn modtager værdien, og initial-value bruges, når intet andet sætter den. Alle tre er påkrævet, bortset fra at initial-value kan udelades, når syntaksen er *. Mangler en påkrævet del, eller er den forkert, ignorerer browseren hele reglen, uden at sige noget.

css
@property --tint {
  syntax: '<color>';
  inherits: false;
  initial-value: #7c3aed;
}

@property --angle {
  syntax: '<angle>';
  inherits: false;
  initial-value: 0deg;
}

@property --stop {
  syntax: '<percentage>';
  inherits: false;
  initial-value: 40%;
}
Tre registrerede egenskaber: en farve, en vinkel og en stopposition. Registrer dem én gang, øverst i et stylesheet.

Startværdien skal være beregningsmæssigt uafhængig, hvilket i praksis betyder absolutte enheder: 0deg, 40%, 12px og hex-farver er fine, mens 2em eller var(--x) ikke er. At sætte inherits: false er som regel det, du vil til animation, og det sparer browseren for at skubbe værdien ned gennem træet.

<color>

Animerer jævnt

Ja

Godt til

Gradientfarver, temaskift
<angle>

Animerer jævnt

Ja

Godt til

Lineære vinkler, konisk rotation
<percentage>

Animerer jævnt

Ja

Godt til

Farvestoppets placering, størrelser
<length>

Animerer jævnt

Ja

Godt til

Radiale størrelser, forskydninger
<number>

Animerer jævnt

Ja

Godt til

Værdier som opacitet, multiplikatorer
<integer>

Animerer jævnt

Ja, i hele trin

Godt til

Tællere, trinvise effekter
*Nej, den skifter

Godt til

Alt, du aldrig animerer
SyntaksAnimerer jævntGodt til
<color>JaGradientfarver, temaskift
<angle>JaLineære vinkler, konisk rotation
<percentage>JaFarvestoppets placering, størrelser
<length>JaRadiale størrelser, forskydninger
<number>JaVærdier som opacitet, multiplikatorer
<integer>Ja, i hele trinTællere, trinvise effekter
*Nej, den skifterAlt, du aldrig animerer
De syntakser, der tæller i gradientarbejde. Du kan også tillade flere, som '<length> | <percentage>', eller en liste med +.

Animer en gradientfarve ved hover

Det er det mindste nyttige eksempel. Knappen bruger --tint som sin anden farve, og hover-tilstanden ændrer kun --tint. Fordi egenskaben er registreret som en farve, glider overgangen mellem violet og koral i stedet for at springe.

css
@property --tint {
  syntax: '<color>';
  inherits: false;
  initial-value: #7c3aed;
}

.button {
  background: linear-gradient(120deg, #1e1b4b 0%, var(--tint) 100%);
  transition: --tint 400ms ease;
}

.button:hover {
  --tint: #fb7185;
}
Overgangen nævner selve den brugerdefinerede egenskab. At skrive transition: background ville ikke gøre noget her.
Tre billeder af samme knap. Den midterste farve findes kun, fordi browseren kan interpolere en registreret farve.

For flere måder at behandle knapper på, se gradientknapper i CSS og CSS gradient hover-effekter.

Drej en konisk gradientkant

En yndet brug af @property er en kant, der ser ud til at rejse rundt om et kort. En konisk gradient starter fra en vinkel, så ved at registrere vinklen og animere den fra 0deg til 360deg drejer farverne rundt. To baggrunde gør arbejdet: kortets farve klippet til padding-boksen og den koniske gradient klippet til border-boksen.

css
@property --angle {
  syntax: '<angle>';
  inherits: false;
  initial-value: 0deg;
}

.card {
  border: 2px solid transparent;
  border-radius: 16px;
  background:
    linear-gradient(#0f0b1e, #0f0b1e) padding-box,
    conic-gradient(from var(--angle), #22d3ee, #7c3aed, #f472b6, #22d3ee) border-box;
  animation: spin 6s linear infinite;
}

@keyframes spin {
  to { --angle: 360deg; }
}

@media (prefers-reduced-motion: reduce) {
  .card { animation: none; }
}
Gentag den første farve til sidst, så samlingen, hvor 360deg møder 0deg, forsvinder.
Den koniske ring ved 0degconic-gradient(from 0deg, #22d3ee, #7c3aed, #f472b6, #22d3ee)
Samme gradient, som kanten bruger. Når --angle vokser, drejer ringen, og den tynde stribe rundt om kortet rejser med. Gradientkanter i CSS dækker den statiske version.

Flyt et farvestop

En registreret procentværdi lader et stop glide. Brug den til en statusfyldning, et højdepunkt, der fejer hen over en overskrift, eller en horisont, der stiger ved scroll. Her flytter --stop det punkt, hvor gradienten skifter fra blæk til blågrøn.

css
@property --stop {
  syntax: '<percentage>';
  inherits: false;
  initial-value: 20%;
}

.meter {
  background: linear-gradient(90deg, #0d9488 0%, #0d9488 var(--stop), #0f172a var(--stop));
  transition: --stop 600ms ease-out;
}

.meter[data-done] {
  --stop: 100%;
}
To stop på samme position giver en hård kant, og kanten flytter sig, når --stop ændres.

Registrering fra JavaScript

CSS.registerProperty() gør det samme job fra et script. Det er praktisk, når et designsystem registrerer sine egenskaber under kørsel, eller når en værdi først kendes efter indlæsning. At registrere samme navn to gange kaster en fejl, så beskyt det.

js
if ('registerProperty' in CSS) {
  try {
    CSS.registerProperty({
      name: '--angle',
      syntax: '<angle>',
      inherits: false,
      initialValue: '0deg',
    })
  } catch {
    // Already registered, which is fine.
  }
}
JavaScript-formen bruger initialValue i camelCase. Alt andet svarer til CSS-reglen.

Browserunderstøttelse, nødløsninger og ydeevne

@property virker i nuværende Chrome, Edge, Safari og Firefox; Firefox var den sidste, der tilføjede den, i version 128. Tjek caniuse, hvis du understøtter ældre enheder. En browser, der ikke forstår reglen, behandler --angle som en almindelig brugerdefineret egenskab, så din gradient tegnes stadig med sin startværdi og bevæger sig bare ikke. Det er en fin nødløsning, så længe det stille billede ser færdigt ud.

Husk gentegningen

At animere en egenskab, der bruges i background, får browseren til at gentegne elementet ved hvert billede. En lille kant eller knap er billig; en fuldskærms-hero, der animeres uafbrudt, koster batteri. CSS gradient-ydeevne har de målinger, du skal holde øje med.

  1. 1

    Registrer, før du bruger

    Læg hver @property-regel på øverste niveau, uden for media queries, så den gælder overalt.

  2. 2

    Brug typede syntakser

    Vælg <color>, <angle> eller <percentage>. Undgå * til alt, du har tænkt dig at animere.

  3. 3

    Lav en overgang på egenskaben

    Skriv transition: --tint 400ms, så du nævner den brugerdefinerede egenskab frem for background.

  4. 4

    Respekter reduceret bevægelse

    Stop animationer i loop under prefers-reduced-motion: reduce, som beskrevet i prefers reduced motion.

  5. 5

    Tjek det stille billede

    Slå animationen fra og sørg for, at hvilegradienten stadig ser bevidst ud.

Hvis den bevægelse, du ønsker, hører hjemme på opslag på sociale medier eller video frem for en webside, bærer en Gradiently-Mark allerede sit eget lys og sin egen langsomme bevægelse, og Pro eksporterer den som MP4, WebM eller GIF, hvor browseren understøtter optagelse, uden at du skriver keyframes. Til alt på nettet er @property det reneste værktøj, du har. MDN-referencen lister hver descriptor.

Design med en levende gradient

Opslag, stories, slides og bannere i alle størrelser, med tekst der altid kan læses.

Begynd at designe, gratis

Spørgsmål, folk stiller

Hvad gør CSS @property?

Den registrerer en brugerdefineret egenskab med en type, en arveregel og en startværdi. Når typen er kendt, kan browseren validere værdien og interpolere den i overgange og animationer.

Kan man animere en CSS-gradient?

Ikke direkte, fordi background-image ikke kan interpoleres. Registrer farverne, vinklen eller stoppositionerne med @property, brug dem i gradienten, og animer de egenskaber i stedet.

Hvorfor virker min @property-animation ikke?

Som regel mangler der en descriptor, startværdien bruger en relativ enhed, syntaksen er *, eller overgangen nævner background i stedet for den brugerdefinerede egenskab. Enhver ugyldig descriptor får browseren til at ignorere hele reglen.

Understøtter Firefox @property?

Ja. Firefox tilføjede @property i version 128, så den virker nu i alle store nuværende browsere.

Skal inherits være true eller false?

Brug false til de fleste animerede værdier. Det holder værdien på det element, hvor du sætter den, og sparer browseren for ekstra arbejde.

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

På denne side

Hvorfor gradienter ikke selv laver overgangeSyntaksen i @propertyAnimer en gradientfarve ved hoverDrej en konisk gradientkantFlyt et farvestopRegistrering fra JavaScriptBrowserunderstøttelse, nødløsninger og ydeevne

Del denne guide

Næste om CSS og web

Gradienttekst i Tailwind: klasser, v4-syntaks og løsninger

Læs videre

Alle guides om CSS og web
CSS og web

CSS-animerede gradientbaggrunde, gjort ordentligt

4 min. læsning

Gradienter kan ikke animeres direkte, men alt omkring dem kan. Fire teknikker, hvad hver koster browseren, og hvordan du holder bevægelsen rolig og valgfri.

CSS og web

CSS conic gradient: hjul, lagkagediagrammer og glans

4 min. læsning

conic-gradient() fejer farve rundt om et punkt som viseren på et ur. Den ene idé tegner farvehjul, lagkage- og donutdiagrammer, metallisk glans og stjernesprængninger.

CSS og web

CSS gradientkant: fire måder at tegne en på

4 min. læsning

border-color tager ikke en gradient, så hver gradientkontur er en omvej. Her er de fire, der tæller, hvad hver kan og ikke kan, og hvilken du skal vælge.

Find det look, der kun er dit.

Hver Mark er en levende baggrund med én ejer. Prøv en ledig Mark, og sikr dig din, når det føles rigtigt.

Begynd at designe

Tjek et certifikat

Skriv et certifikatnummer eller en Marks kode for at se, hvem der ejer den.

Virker med ChatGPT og Claude

Bed din AI om et design. Den laver det i din Mark, klar til at redigere.

ChatGPTClaude
Sådan forbinder du

Produkt

  • Markedet
  • Udforsk
  • Priser
  • Certifikater

Lær

  • Designguiden
  • Hjælpecenter
  • Nyheder

Udviklere

  • Oversigt
  • ChatGPT og Claude
  • API-reference
  • API-nøgler

Virksomhed

  • Om os
  • Kontakt os
  • Log ind

Juridisk

  • Vilkår
  • Privatliv
  • Refusion
  • Mark-beskyttelse
  • Cookies
  • Alle politikker
Bevæg dig hen over bogstaverne. Hvert af dem bærer en ægte Mark.Rør ved et bogstav for at se dets Mark.Ét navn. Ti Marks inden i.
© 2026 Gradiently