usePreferredContrast
prefers-contrast media query
usePreferredContrast uses window.matchMedia() to reactively track the user’s contrast preference. It returns "more", "less", "custom", or "no-preference" based on the prefers-contrast media query. The value updates automatically when the user changes their system accessibility settings.
When to Use
- Increasing border widths, font weights, or color contrast for users who prefer more contrast
- Reducing visual intensity for users who prefer less contrast
- Building accessible interfaces that adapt to system-level contrast preferences
Notes
- SSR-safe: Accepts a
defaultStateparameter (default:"no-preference") that is returned during server-side rendering. Nowindow.matchMediaaccess occurs on the server. - Browser support: The
prefers-contrastmedia query is supported in modern browsers, but availability varies. Check MDN compatibility for details. - Related hooks: Built on
useMediaQuery. See alsouseReducedMotionandusePreferredColorSchemefor other accessibility-related media query hooks.
Usage
Live Editor
function Demo() { const contrast = usePreferredContrast(); return <div>PreferredContrast: {contrast}</div>; };
Result
API
usePreferredContrast
Returns
Contrast
Arguments
| Argument | Description | Type | DefaultValue |
|---|---|---|---|
| defaultState | default value | Contrast | undefined | no-preference |
Contrast
Type
export type Contrast = 'more' | 'less' | 'custom' | 'no-preference'