TL;DR
- En rating kan omsættes fra 0–5 til 0–100 % med typed
attr()ogcalc(). - Gradienten beskriver fyldet; masken bestemmer, at fyldet kun ses gennem stjerneformerne.
- Den visuelle rating skal suppleres med et tilgængeligt tekstalternativ.
Et tal som gradient-stop
Start med at normalisere værdien til en procent:
<span class="rating" data-rating="4.5" aria-hidden="true"></span>.rating { --rating: attr(data-rating type(<number>), 0); --fill: calc(var(--rating) / 5 * 100%);
background: linear-gradient(90deg, #f5a623 var(--fill), #d7d7d7 0);}Det andet color stop bruger 0 som position, så det lægger sig ved det
foregående stop. Resultatet er en skarp overgang ved ratingens procent.
Masken former gradienten
En mask bruger ikonets alpha-kanal som form. Baggrunden er stadig én samlet gradient, men kun de fem stjerner bliver synlige:
.rating { inline-size: calc(1.25rem * 5); block-size: 1.25rem; mask: var(--star) 0 / contain;}Det er enklere end at oprette fem separate elementer og beregne hele, halve og
tomme stjerner. Samtidig kan en værdi som 4.3 vises præcist.
Accessibility er ikke pseudo-indhold
En tom dekorativ <span> med baggrund og mask giver ikke i sig selv et
tilgængeligt navn. CSS-genereret indhold bør heller ikke være den eneste kilde
til vigtig information.
Brug derfor enten synlig tekst eller en tekst, der kun er visuelt skjult.
Værdien skal komme fra samme datakilde som data-rating, så den visuelle og den
tilgængelige repræsentation ikke kan glide fra hinanden.