nuxt-viewport
Define custom viewports for your Nuxt️ project
Features
- ⚡️ Fast & Light with MatchMedia API ⚡️
- 🕶 Auto detects the device viewport from Cookie & User-Agent
- 👌 Zero configuration to start
- 👴️ Supports IE9+
Quick Setup
- Add
nuxt-viewport
dependency to your project
npm install --save-dev nuxt-viewport
yarn add --dev nuxt-viewport
- Add
nuxt-viewport
to the modules
section of nuxt.config.js
{
modules: [
[
'nuxt-viewport', {
}
],
]
}
using top level options
{
modules: [
'nuxt-viewport',
],
viewport: {
},
}
Usage with @nuxtjs/composition-api
import { defineComponent, useContext, watch } from '@nuxtjs/composition-api'
export default defineComponent({
setup() {
const context = useContext()
const viewport = context.$viewport
watch(() => viewport.breakpoint, (newBreakpoint, oldBreakpoint) => {
console.log('Breakpoint updated:', oldBreakpoint, '->', newBreakpoint)
})
},
})
Typescript
If using typescript or running typescript language server to check the code (for example through Vetur), add types to types
array in your tsconfig.json
:
{
"compilerOptions": {
"types": [
"@nuxt/types",
"nuxt-viewport",
]
}
}
Configuration
breakpoints
An object where the key is the name of the viewport, and the value is the viewport size.
cookieName
- Type: String
- Default:
viewport
The key for the document cookie.
defaultBreakpoints
- Type: Object
- Detectable devices:
console
, desktop
, embedded
, mobile
, smarttv
, tablet
, wearable
An object where the key is the name of the detected device, and the value is the breakpoint key.
fallbackBreakpoint
- Type: String
- Default:
viewport
The breakpoint key to be used, if the device was not detected.
Default configuration
{
viewport: {
breakpoints: {
desktop: 1024,
desktopMedium: 1280,
desktopWide: 1600,
mobile: 320,
mobileMedium: 375,
mobileWide: 425,
tablet: 768,
},
cookieName: 'viewport',
defaultBreakpoints: {
desktop: 'desktop',
mobile: 'mobile',
tablet: 'tablet',
},
fallbackBreakpoint: 'desktop',
},
}
Example configuration for Tailwind CSS
{
viewport: {
breakpoints: {
xs: 320,
sm: 640,
md: 768,
lg: 1024,
xl: 1280,
'2xl': 1536,
},
defaultBreakpoints: {
desktop: 'lg',
mobile: 'xs',
tablet: 'md',
},
fallbackBreakpoint: 'lg'
},
}
API
$viewport.breakpoint
Current breakpoint.
$viewport.isGreaterThan
$viewport.isGreaterThan('mobile')
$viewport.isGreaterThan('desktop')
$viewport.isGreaterOrEquals
$viewport.isGreaterOrEquals('mobile')
$viewport.isGreaterOrEquals('desktop')
$viewport.isLessThan
$viewport.isLessThan('desktopWide')
$viewport.isLessThan('mobile')
$viewport.match
$viewport.match('tablet')
$viewport.match('desktop')
$viewport.matches
$viewport.matches('tablet', 'mobileWide')
$viewport.matches('mobile', 'tablet')
Contributing
You can contribute to this module online with CodeSandBox:
Or locally:
- Clone this repository
- Install dependencies using
yarn install
or npm install
- Start development server using
yarn dev
or npm run dev
License
MIT License
Copyright (c) mvrlin mvrlin@pm.me