Lliçó 4 de 10 · 14 min de lectura · Revisada el 26/10/2026
Preferències de l'usuari en CSS: colors forçats, contrast i mode fosc
Estàs llegint una lliçó oberta. Matricula't gratis per fer els tests i els exercicis, desar el teu progrés i aconseguir el certificat.
Cada vegada més persones ajusten el seu sistema operatiu per veure-hi millor: un tema de contrast a Windows, el mode fosc al mòbil, «augmentar el contrast» a macOS, una mida de lletra més gran al navegador. El navegador trasllada aquestes preferències al web, i el CSS les pot respectar o trepitjar. En el curs de color i contrast vas veure aquests modes des del disseny; aquesta lliçó et dona el codi perquè la interfície s'adapti sense perdre informació, amb una atenció especial al mode de colors forçats, el que trenca més webs. El moviment reduït té lliçó pròpia, la següent.
Les preferències que el sistema exposa al web
Les preferències es consulten amb media features (característiques de mitjà) dins de @media, igual que l'amplada de la pantalla:
| Característica | Valors | Què l'activa | Què ha de fer el teu CSS |
|---|---|---|---|
forced-colors | none, active | Temes de contrast de Windows (compatible amb navegadors Chromium i Firefox) | Deixar que el sistema pinti i assegurar vores, focus i icones |
prefers-contrast | no-preference, more, less, custom | «Augmentar el contrast» a macOS i iOS, entre altres ajustos | Reforçar vores, treure transparències i grisos tènues |
prefers-color-scheme | light, dark | Mode clar o fosc del sistema | Oferir un tema fosc que compleixi el mateix contrast |
prefers-reduced-motion | no-preference, reduce | «Reduir el moviment» | Treure el moviment espacial (lliçó següent) |
S'hi suma una preferència que no és una media query: la mida de lletra per defecte del navegador, que només es respecta si fas servir rem i em, com vam veure en la primera lliçó.
Infografia · Conceptes clau
Sis preferències de l'usuari que el teu CSS ha de respectar
Cada ajust del sistema arriba al web com una media query, una propietat o una unitat
- forced-colorsTemes de contrast: vores i contorns transparents, colors del sistema
- prefers-contrastAmb «more», reforça les vores i treu els grisos tènues i les transparències
- prefers-color-schemeTema fosc amb el mateix contrast que el clar: 4,5:1 i 3:1
- color-schemeAdapta els controls natius i les barres de desplaçament al tema
- prefers-reduced-motionSubstitueix el moviment espacial per foses o elimina'l
- Mida de lletra baseNomés es respecta amb rem i em, no amb fonts en píxels
Llegeix la infografia com a text
Sis targetes, cadascuna amb una preferència i el que ha de fer el CSS. forced-colors: amb els temes de contrast de Windows, fes servir vores i contorns transparents i colors del sistema. prefers-contrast: amb el valor more, reforça les vores i elimina els grisos tènues i les transparències. prefers-color-scheme: el tema fosc ha de complir el mateix contrast que el clar, 4,5:1 per al text i 3:1 per als components. color-scheme: aquesta propietat adapta els controls natius i les barres de desplaçament al tema. prefers-reduced-motion: substitueix el moviment espacial per foses o elimina'l. Mida de lletra base del navegador: només es respecta amb unitats rem i em, no amb fonts en píxels.
El mode de colors forçats a fons
Quan una persona activa un tema de contrast a Windows (per exemple, fons negre amb text groc, o el tema «Desert» de fons clar), el navegador substitueix els colors de la pàgina per una paleta reduïda que ella ha triat. El fan servir persones amb baixa visió, amb fotofòbia, amb migranya o amb dificultats de lectura. El que passa amb el teu CSS:
- Els colors de text, fons, vores i contorns se substitueixen pels del sistema. Els teus colors de marca desapareixen; és el que la persona ha demanat.
box-shadowitext-shadows'eliminen.- Els degradats de fons desapareixen; les imatges amb
url()es mantenen, i el navegador pinta un fons opac darrere del text perquè continuï sent llegible. - Els controls natius (
button,input,select) es redibuixen amb els colors del sistema i continuen sent reconeixibles.
Els problemes apareixen quan la interfície transmet forma, estat o informació només amb colors de fons o ombres: un botó que és «un rectangle blau» sense vora es converteix en text solt; una casella de selecció personalitzada feta amb un div acolorit perd la marca; una barra de progrés o un indicador d'estat verd o vermell desapareixen; el focus fet amb box-shadow s'esvaeix.
Exemple
El truc de les vores transparents: invisibles en mode normal, el sistema les pinta en mode forçat.
.boton {
background: #0b5394;
color: #ffffff;
border: 2px solid transparent; /* apareix amb colors forçats */
}
.boton:focus-visible {
outline: 3px solid transparent; /* ídem per al focus */
box-shadow: 0 0 0 3px #ffbf47; /* el que es veu en mode normal */
}
.icono { fill: currentColor; } /* la icona hereta el color del text */
@media (forced-colors: active) {
.tarjeta-seleccionada { border: 3px solid Highlight; }
.estado-activo { border-left: 4px solid CanvasText; } /* marca que no depèn del fons */
.muestra-color { forced-color-adjust: none; } /* aquí el color és el contingut */
}Dins de forced-colors: active no facis servir colors concrets, que el sistema tornaria a substituir, sinó colors del sistema: paraules clau de CSS que prenen el valor del tema actiu. Les més útils són Canvas i CanvasText (fons i text), LinkText (enllaços), ButtonFace, ButtonText i ButtonBorder (botons), Highlight i HighlightText (selecció i elements actius) i GrayText (deshabilitat). Així, un estat «seleccionat» es pot marcar amb una vora Highlight gruixuda en lloc d'amb un fons de color.
Les icones SVG amb colors fixos a l'atribut fill poden quedar invisibles sobre el fons del sistema (una icona negra sobre fons negre). Amb fill: currentColor hereten el color del text i s'adapten soles. Les imatges de mapa de bits no es toquen: un logotip amb text fosc sobre transparència pot desaparèixer sobre un tema fosc, igual que en el mode fosc que veuràs més avall.
Error freqüent
Aplicar forced-color-adjust: none a tot el web «per conservar la imatge de marca». Anul·la precisament l'adaptació que la persona necessita i sol deixar textos il·legibles. Aquesta propietat està pensada per a casos puntuals en què el color és el contingut (mostres de color d'un producte, un selector de color) i, fins i tot llavors, el text que l'acompanya ha de continuar sent llegible. Tampoc no facis servir l'antiga media query -ms-high-contrast: està obsoleta i els navegadors actuals la ignoren.
prefers-contrast: més contrast quan es demana
prefers-contrast: more s'activa quan la persona demana més contrast sense arribar a forçar els colors. No serveix per complir 1.4.3 Contrast (mínim): la versió per defecte ja l'ha de complir. És una millora per a qui en necessita encara més:
@media (prefers-contrast: more) {
:root { --texto-secundario: #1a1a1a; --borde: #000000; }
.campo { border-width: 2px; }
.cabecera { background: #ffffff; backdrop-filter: none; } /* fora transparències */
.placeholder-sutil::placeholder { color: #333333; }
}
Bons candidats per reforçar: textos grisos secundaris, vores fines de camps i targetes, fons semitransparents o amb desenfocament, text sobre fotografies i separadors tènues.
Mode fosc sense trencar l'accessibilitat
Un tema fosc ben fet comença per organitzar els colors en variables (els tokens de disseny) i redefinir-les, no per reescriure cada regla:
:root {
color-scheme: light dark; /* els controls natius i les barres de desplaçament s'adapten */
--fondo: #ffffff; --texto: #1a1a1a; --enlace: #0b5394; --foco: #1a1a1a;
}
@media (prefers-color-scheme: dark) {
:root { --fondo: #121212; --texto: #e8e8e8; --enlace: #8ab4f8; --foco: #ffffff; }
}
body { background: var(--fondo); color: var(--texto); }
a { color: var(--enlace); }
Si el tema fosc s'aplica automàticament segons la preferència del sistema, per a aquesta persona és la pàgina: ha de complir 1.4.3, 1.4.11 Contrast no textual i 1.4.1 Ús del color igual que el tema clar. Mesura el contrast en els dos temes, inclosos l'indicador de focus, les vores dels camps i els missatges d'error, i revisa aquests errors típics:
- Logotips i imatges PNG amb parts fosques sobre transparència que desapareixen sobre fons fosc. Solució: una versió clara amb
<picture>i<source media="(prefers-color-scheme: dark)">, o un fons propi a la imatge. - Ombres com a única separació entre targetes: sobre fons fosc no es veuen; fes servir vores o canvis de lluminositat.
- Colors de marca molt saturats que sobre negre vibren o no contrasten; necessiten una variant més clara.
- Gràfics i mapes amb colors pensats per a fons blanc.
Si ofereixes un selector de tema propi, respecta per defecte la preferència del sistema, desa l'elecció a localStorage, aplica-la abans de pintar la pàgina (per evitar el flaix del tema contrari) i fes el selector accessible: un grup de botons d'opció «Clar, Fosc, Segons el sistema» o un botó amb aria-pressed. La funció light-dark(), més recent, permet escriure els dos valors en una sola declaració; comprova-la en els navegadors que hagis d'admetre abans de dependre'n.
Com comprovar-ho
- A Chrome i Edge, obre les eines de desenvolupament, menú «More tools», panell «Rendering»: permet emular
prefers-color-scheme,prefers-contrast,forced-colorsiprefers-reduced-motionsense canviar el sistema. - L'emulació no substitueix la prova real: a Windows, activa un tema de contrast (Configuració, Accessibilitat, Temes de contrast) i recorre el web amb el teclat.
- Cerca al CSS
box-shadowfets servir com a focus o vora,backgroundque transmet estat ifillamb colors fixos als SVG. - Mesura el contrast del tema fosc amb el mateix rigor que el del clar.
Prova-ho tu
En un ordinador amb Windows, prem Alt esquerra + Maj esquerra + Impr Pant per activar o desactivar el contrast alt (Windows demanarà confirmació). Obre el web de la teva organització i localitza tres coses: un botó que hagi perdut la forma, una icona que hagi desaparegut i un control el focus del qual ja no es vegi. Torna a prémer la combinació per sortir-ne.
Punt clau
Les preferències del sistema són decisions de la persona, no capricis que la marca hagi de corregir. Dissenya perquè la forma, l'estat i el focus no depenguin només del color de fons ni de les ombres: vores i contorns transparents, currentColor a les icones, colors del sistema en mode forçat i el mateix contrast en el tema fosc que en el clar.
Resum
forced-colors,prefers-contrastiprefers-color-schemeexposen preferències del sistema; la mida de lletra es respecta ambrem.- En colors forçats desapareixen les ombres i els degradats: fes servir vores i contorns transparents,
fill: currentColori colors del sistema comHighlightoCanvasText. - Reserva
forced-color-adjust: noneper a quan el color és el contingut. prefers-contrast: moreés un reforç, no la manera de complir 1.4.3.- El tema fosc ha de complir el mateix contrast; organitza'l amb variables i
color-scheme, i prova'l amb emulació i amb un tema de contrast real.
Portes 6 lliçons d'aquest curs: que no es perdin
Crea el teu compte gratis i desa el que ja has llegit i segueix el curs amb tot:
- El test d'aquesta lliçó (3 preguntes) per comprovar el que has après
- Exercicis pràctics amb pàgines reals
- El teu progrés desat: continues on ho vas deixar, des de qualsevol dispositiu
- Constància del curs amb les hores i certificat gratuït del nivell 3 quan aprovis l'examen
Entres amb el teu compte de Google o només amb el teu correu electrònic. No cal contrasenya.