Gli utenti che attivano le modalità ad alto contrasto nel sistema operativo o nel browser si aspettano che gli elementi UI (come le barre di scorrimento) siano estremamente leggibili, spesso facendo affidamento su una netta separazione tra primo piano e sfondo anziché su grigi tenui o colori del tema.
Questa guida fornisce istruzioni facoltative su come utilizzare la funzionalità multimediale CSS @media (prefers-contrast: more) per applicare lo stile della barra di scorrimento ad alto contrasto.
Migliora la leggibilità
Quando personalizzi le barre di scorrimento con scrollbar-color o variabili personalizzate, puoi fornire un override esplicito per le modalità ad alto contrasto. Ciò è particolarmente utile se il tema principale dell'applicazione utilizza barre di scorrimento a basso contrasto per motivi estetici.
FACOLTATIVO: utilizza un blocco @media (prefers-contrast: more) per definire colori scuri e distinti per il cursore e la barra.
/* Define default standard colors as variables */
.scroller {
--scrollbar-thumb: #bbb;
--scrollbar-track: #f1f1f1;
scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
scrollbar-width: thin;
scrollbar-gutter: stable;
}
/* OPTIONAL: Provide clear, high-contrast overrides */
@media (prefers-contrast: more) {
.scroller {
/* Use extremely distinct colors like solid black against white */
--scrollbar-thumb: #000000;
--scrollbar-track: #ffffff;
}
}
Problemi da tenere presenti quando si utilizza scrollbar-color
- NON animare o applicare transizioni a
scrollbar-color. Un bug di WebKit fa lampeggiare la barra di scorrimento ogni volta chescrollbar-colorcambia. - Su macOS, le proprietà
scrollbar-color(standard) e::-webkit-scrollbar(legacy) vengono ignorate per impostazione predefinita perché macOS utilizza barre di scorrimento "overlay" native. DEVI accoppiare i colori personalizzati conscrollbar-width(ad es.thinoauto) per forzare macOS a eseguirne il rendering. - Anche con l'applicazione di
scrollbar-width, le barre di scorrimento in overlay di macOS mostrano la barra (gutter) come trasparente per impostazione predefinita. Se il design richiede un colore di sfondo visibile della barra di scorrimento su MacOS, DEVI applicarescrollbar-gutter: stable;al contenitore scorrevole, ma tieni presente che viene visualizzato solo dopo che l'utente passa il mouse sopra la barra di scorrimento. - Anche con
scrollbar-gutter: stable, la traccia potrebbe essere trasparente su MacOS. Il cursore non deve dipendere dal colore della barra per essere visibile.
Alternative e supporto del browser
Alternative e supporto del browser per scrollbar-color
Questa funzionalità è un potenziamento progressivo e non richiede sempre i fallback.
Se lo stile è importante e il target Baseline dell'utente è "Baseline ampiamente disponibile" o precedente, DEVI includere gli pseudo-elementi ::-webkit-scrollbar non standard come fallback.
Racchiudi i fallback legacy in un blocco @supports not (scrollbar-color: auto) per evitare conflitti tra le proprietà standard e i selettori WebKit legacy nei browser che supportano entrambi in modo nativo.
Se utilizzi proprietà personalizzate per definire i colori, questi verranno applicati automaticamente ai selettori WebKit legacy. NON è necessario duplicarli.
/* Legacy fallback for WebKit/Blink browsers */
@supports not (scrollbar-color: auto) {
.scroller::-webkit-scrollbar {
/* Must define base size in WebKit for custom colors to be visual */
width: 12px;
height: 12px;
}
.scroller::-webkit-scrollbar-thumb {
background: var(--scrollbar-thumb);
}
.scroller::-webkit-scrollbar-track {
background: var(--scrollbar-track);
}
}