TL;DR
- Klassisk
attr()giver primært tekst tilcontent; typedattr()kan levere værdier til almindelige CSS-properties. type()beskriver den tilladte CSS-syntaks, og fallbacken bruges ved manglende eller ugyldige attributter.- HTML-data kan blive et input til CSS, men data med egentlig forretningslogik hører stadig hjemme i applikationen.
Fra streng til datatype
Et HTML-attribut er tekst. Med typed attr() kan browseren parse teksten som
en bestemt CSS-type:
<h2 data-color="oklch(0.62 0.24 28)">Status</h2>[data-color] { color: attr(data-color type(<color>), currentColor);}Hvis værdien mangler eller ikke kan parses som en farve, bruges fallbacken. Det gør kontrakten tydeligere end at indsætte en vilkårlig token-sekvens.
Data som CSS-input
Typed attr() er især nyttig, når markup eller JavaScript allerede ejer en
lille præsentationsværdi:
<div class="bar" data-percent="70"></div>.bar { block-size: attr(data-percent %, 0);}Her betyder % efter attributnavnet, at tallet skal fortolkes med den unit.
Hvis attributten selv indeholder en komplet værdi som 5rem, kan du i stedet
bruge type(<length>).
Det giver en enkel ansvarsdeling:
- JavaScript (eller HTML) leverer data.
- CSS bestemmer, hvordan værdien visualiseres.
Keywords og progressiv forbedring
type() kan også beskrive et lukket sæt af keywords:
.notification { --variant: attr(data-variant type(info | success | danger), info);}Det minder om en string literal union i TypeScript:
type Variant = "info" | "success" | "danger";Det er en nyttig kontrakt, men ikke en erstatning for validering af vigtig applikationsdata. Brug mønsteret til præsentationsinput og komponentvarianter.