useBreakpoints
Reactive viewport breakpoints.
Demo
Current breakpoints: [
"sm",
"md",
"lg",
"xl"
]
Active breakpoint: xl
xs(<640px): false
xs(<=640px): false
sm: false
md: false
lg: false
xl: true
2xl: false
greaterThanBreakPoint: true
Usage
js
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
vue
<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>
Server Side Rendering and Nuxt
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
js
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
Presets
- Tailwind:
breakpointsTailwind
- Bootstrap v5:
breakpointsBootstrapV5
- Vuetify v2:
breakpointsVuetifyV2
(deprecated:breakpointsVuetify
) - Vuetify v3:
breakpointsVuetifyV3
- Ant Design:
breakpointsAntDesign
- Quasar v2:
breakpointsQuasar
- Sematic:
breakpointsSematic
- Master CSS:
breakpointsMasterCss
- Prime Flex:
breakpointsPrimeFlex
- ElementUI / ElementPlus:
breakpointsElement
Breakpoint 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:
js
import { breakpointsTailwind } from '@vueuse/core'
// and so on
Type Declarations
Show Type Declarations
typescript
export * from "./breakpoints"
export type Breakpoints<K extends string = string> = Record<
K,
MaybeRefOrGetter<number | string>
>
export interface UseBreakpointsOptions extends ConfigurableWindow {
/**
* The query strategy to use for the generated shortcut methods like `.lg`
*
* 'min-width' - .lg will be true when the viewport is greater than or equal to the lg breakpoint (mobile-first)
* 'max-width' - .lg will be true when the viewport is smaller than the xl breakpoint (desktop-first)
*
* @default "min-width"
*/
strategy?: "min-width" | "max-width"
ssrWidth?: number
}
/**
* Reactively viewport breakpoints
*
* @see https://vueuse.org/useBreakpoints
*/
export declare function useBreakpoints<K extends string>(
breakpoints: Breakpoints<K>,
options?: UseBreakpointsOptions,
): Record<K, ComputedRef<boolean>> & {
greaterOrEqual: (k: MaybeRefOrGetter<K>) => ComputedRef<boolean>
smallerOrEqual: (k: MaybeRefOrGetter<K>) => ComputedRef<boolean>
greater(k: MaybeRefOrGetter<K>): ComputedRef<boolean>
smaller(k: MaybeRefOrGetter<K>): ComputedRef<boolean>
between(a: MaybeRefOrGetter<K>, b: MaybeRefOrGetter<K>): ComputedRef<boolean>
isGreater(k: MaybeRefOrGetter<K>): boolean
isGreaterOrEqual(k: MaybeRefOrGetter<K>): boolean
isSmaller(k: MaybeRefOrGetter<K>): boolean
isSmallerOrEqual(k: MaybeRefOrGetter<K>): boolean
isInBetween(a: MaybeRefOrGetter<K>, b: MaybeRefOrGetter<K>): boolean
current: () => ComputedRef<K[]>
active(): ComputedRef<"" | K>
}
export type UseBreakpointsReturn<K extends string = string> = ReturnType<
typeof useBreakpoints<K>
>
Source
Contributors
Changelog
v12.3.0
on 1/2/202559f75
- feat(toValue): deprecate toValue
from @vueuse/shared
in favor of Vue's nativev12.1.0
on 12/22/2024v12.0.0-beta.1
on 11/21/2024v11.2.0
on 10/30/2024v10.8.0
on 2/20/2024a086e
- fix: stricter typesv10.7.0
on 12/5/2023v10.5.0
on 10/7/2023v10.4.0
on 8/25/2023v10.0.0-beta.3
on 4/12/2023e75a5
- feat: update depsv10.0.0-beta.2
on 3/28/2023