UNPKG

@cwist/vue-match-media

Version:

React to media query changes in your Vue 3 application (useful for adaptive design).

139 lines (112 loc) 2.75 kB
# Vue matchMedia This fork is a port to Vue 3 > React to media query changes in your Vue 3 application (useful for adaptive design). ## Installation ```sh npm install @cwist/vue-match-media ``` ## Usage ```js import { createApp } from 'vue'; import App from '@/App.vue'; import { createVueMatchMediaPlugin } from '@cwist/vue-match-media'; // Define breakpoints you want to react to const breakpoints = { s: '48em', m: '50em', l: '62em', xl: '75em', }; const VueMatchMediaPlugin = createVueMatchMediaPlugin({ breakpoints }); // Load plugin createApp(App) .use(VueMatchMediaPlugin) .mount('#app'); ``` ```html <template> <div> <div v-if="$matchMedia.s"> This content is visible only on devices above 48em. </div> <div v-if="$matchMedia.xl"> This content is visible only on devices above 75em. </div> <div v-else>This content is visible only on devices under 75em.</div> </div> </template> <script> export default { name: 'DemoComponent', }; </script> ``` Using composition API ```html <template> <div> <div v-if="matchMedia.s"> This content is visible only on devices above 48em. </div> <div v-if="matchMedia.xl"> This content is visible only on devices above 75em. </div> <div v-else>This content is visible only on devices under 75em.</div> </div> </template> <script> import { useMatchMedia } from '@cwist/vue-match-media'; export default { name: 'DemoComponent', setup() { const matchMedia = useMatchMedia(); return { matchMedia, }; }, }; </script> ``` ## Breakpoint syntax ```js const breakpoints = { // @media (min-width: 1920px) fullHD: 1920, // @media (min-width: 48em) medium: '48em', // Object notation // @media (max-width: 768px) mobile: { maxWidth: 768 }, // @media (orientation: landscape) landscape: { orientation: 'landscape' }, // Multiple features // @media (min-width: 62em) and (min-resolution: 150dpi) highDPIDesktop: { minWidth: '62em', minResolution: '150dpi', }, // @media (min-width: 768px) and (max-width: 992px) tablet: [768, 992], // SSR support // In order to use SSR, you must provide a default value // @media (min-width: 62em) // Defaults to true during SSR, will be updated on client side large: { breakpoint: '62em', defaultValue: true, }, // Defaults to false during SSR, will be updated on client side portrait: { breakpoint: { orientation: 'portrait' }, defaultValue: false, }, }; ``` ## Contributing Please see [contributing guide](CONTRIBUTING.md). ## License [MIT](LICENSE) ## TODO List - [x] SSR support (set a default breakpoint) - [ ] Improve composition API use - [ ] Add demo