packages/core/useBreakpoints/index.md
Reactive viewport breakpoints.
import { breakpointsTailwind, useBreakpoints } from '@vueuse/core'
const breakpoints = useBreakpoints(breakpointsTailwind)
const smAndLarger = breakpoints.greaterOrEqual('sm') // sm and larger
const largerThanSm = breakpoints.greater('sm') // only larger than sm
const lgAndSmaller = breakpoints.smallerOrEqual('lg') // lg and smaller
const smallerThanLg = breakpoints.smaller('lg') // only smaller than lg
<script setup lang="ts">
import { useBreakpoints } from '@vueuse/core'
const breakpoints = useBreakpoints({
mobile: 0, // optional
tablet: 640,
laptop: 1024,
desktop: 1280,
})
// Can be 'mobile' or 'tablet' or 'laptop' or 'desktop'
const activeBreakpoint = breakpoints.active()
// true or false
const laptop = breakpoints.between('laptop', 'desktop')
</script>
<template>
<div :class="activeBreakpoint">
...
</div>
</template>
You can access breakpoints directly as properties on the returned object. These return reactive refs.
const breakpoints = useBreakpoints({
tablet: 640,
laptop: 1024,
})
// Equivalent to breakpoints.greaterOrEqual('tablet') with min-width strategy
const isTablet = breakpoints.tablet
The strategy option controls how the shortcut properties behave:
min-width (default, mobile-first): breakpoints.lg is true when viewport is >= lgmax-width (desktop-first): breakpoints.lg is true when viewport is < xlconst breakpoints = useBreakpoints(breakpointsTailwind, {
strategy: 'max-width', // desktop-first
})
| Method | Description |
|---|---|
greaterOrEqual(k) | Reactive: viewport width >= breakpoint |
greater(k) | Reactive: viewport width > breakpoint |
smallerOrEqual(k) | Reactive: viewport width <= breakpoint |
smaller(k) | Reactive: viewport width < breakpoint |
between(a, b) | Reactive: viewport width between a and b |
isGreaterOrEqual(k) | Non-reactive: returns boolean immediately |
isGreater(k) | Non-reactive: returns boolean immediately |
isSmallerOrEqual(k) | Non-reactive: returns boolean immediately |
isSmaller(k) | Non-reactive: returns boolean immediately |
isInBetween(a, b) | Non-reactive: returns boolean immediately |
current() | Returns computed array of all matching breakpoints |
active() | Returns computed string of the current active breakpoint |
If you are using useBreakpoints with SSR enabled, then you need to specify which screen size you would like to render on the server and before hydration to avoid an hydration mismatch
import { breakpointsTailwind, useBreakpoints } from '@vueuse/core'
const breakpoints = useBreakpoints(breakpointsTailwind, {
ssrWidth: 768 // Will enable SSR mode and render like if the screen was 768px wide
})
Alternatively you can set this up globally for your app using provideSSRWidth
breakpointsTailwindbreakpointsBootstrapV5breakpointsVuetifyV2 (deprecated: breakpointsVuetify)breakpointsVuetifyV3breakpointsAntDesignbreakpointsQuasarbreakpointsSematicbreakpointsMasterCssbreakpointsPrimeFlexbreakpointsElementBreakpoint presets are deliberately not auto-imported, as they do not start with use to have the scope of VueUse. They have to be explicitly imported:
import { breakpointsTailwind } from '@vueuse/core'
// and so on