Skip to content

Presets

Import from responsive-media/presets or from the main entry point.

ResponsiveConfig (default)

KeyRange
mobile≤ 600px
tablet601 – 960px
desktop≥ 961px

TailwindPreset + TailwindOrder

Mutually exclusive Tailwind CSS v3/v4 breakpoints:

KeyRange
xs≤ 639px
sm640 – 767px
md768 – 1023px
lg1024 – 1279px
xl1280 – 1535px
2xl≥ 1536px
ts
import { createResponsiveState, TailwindPreset, TailwindOrder } from 'responsive-media'

const state = createResponsiveState(TailwindPreset, { order: [...TailwindOrder] })

BootstrapPreset + BootstrapOrder

Mutually exclusive Bootstrap 5 breakpoints:

KeyRange
xs≤ 575px
sm576 – 767px
md768 – 991px
lg992 – 1199px
xl1200 – 1399px
xxl≥ 1400px
ts
import { createResponsiveState, BootstrapPreset, BootstrapOrder } from 'responsive-media'

const state = createResponsiveState(BootstrapPreset, { order: [...BootstrapOrder] })

AccessibilityPreset

User-preference media queries. Multiple keys can be true simultaneously.

KeyMatches when …
darkprefers-color-scheme: dark
lightprefers-color-scheme: light
reducedMotionprefers-reduced-motion: reduce
highContrastprefers-contrast: more
lowContrastprefers-contrast: less
noHoverhover: none (touch / stylus devices)
coarsePointerpointer: coarse (finger-sized input)
forcedColorsforced-colors: active (Windows HCM)
printprint media type
ts
import { createResponsiveState, AccessibilityPreset } from 'responsive-media'

const a11y = createResponsiveState(AccessibilityPreset)

a11y.onEnter('dark', () => applyDarkTheme())
a11y.onEnter('reducedMotion', () => disableAnimations())
a11y.onEnter('print', () => hideNonPrintable())