Modal
A light weight & flexible dialog prompts, with importance to accessibility.
Demo
Basic
Close Methods
Custom header and footer
Top alignment
Sizes
Install
bash
npm i @vuesimple/vs-modalUsage
html
<template>
<button size="sm" @click="openModal('modal1')">Basic Modal</button>
<vs-modal ref="modal1" title="Funny, Modal Works 🥳"> Hello Peeps from vs-modal!! </vs-modal>
<button size="sm" @click="openModal('backdrop-modal')">Basic Modal (with blur backdrop)</button>
<vs-modal ref="backdrop-modal" backdropBlur title="Funny, Modal Works 🥳">
Wow!! Backdrop is blurred out 🔥
</vs-modal>
</template>
<script>
import VsModal from '@vuesimple/vs-modal';
export default {
components: {
VsModal,
},
methods: {
openModal(ref) {
this.$refs[ref].open();
},
closeModal(ref) {
this.$refs[ref].close();
},
},
};
</script>CDN
html
<script src="https://cdn.jsdelivr.net/npm/@vuesimple/vs-modal@<version>/dist/index.min.js"></script>TIP
Replace <version> with a version number in the above url.
javascript
// Main/Entry file
app.use(VsModal.plugin);html
<template>
<button size="sm" @click="openModal('modal1')">Basic Modal</button>
<vs-modal ref="modal1" title="Funny, Modal Works 🥳"> Hello Peeps from vs-modal!! </vs-modal>
</template>
<script>
export default {
methods: {
openModal(ref) {
this.$refs[ref].open();
},
closeModal(ref) {
this.$refs[ref].close();
},
},
};
</script>Nuxt.js
Nuxt Demo - Code Sandbox: Link
After installation,
Create a file
/plugins/vs-modal.jsjavascriptimport Vue from 'vue'; import VsModal from '@vuesimple/vs-modal'; Vue.component('vs-modal', VsModal);Update
nuxt.config.jsjavascriptmodule.exports = { ... plugins: [ { src: '~plugins/vs-modal', mode: 'client' } ... ] }In the page/ component
html<template> <button size="sm" @click="openModal('modal1')">Basic Modal</button> <client-only> <vs-modal ref="modal1" title="Funny, Modal Works 🥳"> Hello Peeps from V-Simple-Modal!! </vs-modal> </client-only> </template> <script> export default { methods: { openModal(ref) { this.$refs[ref].open(); }, closeModal(ref) { this.$refs[ref].close(); }, }, }; </script>
TIP
- For older Nuxt versions, use
<no-ssr>...</no-ssr>tag. - You can also do
import VsModal from '@vuesimple/vs-modal'& add incomponent:{VsModal}and use it within component, without globally installing in plugin folder.
Props
| Name | Type | Default | Description |
|---|---|---|---|
| title | String | Modal title | The modal title (text only). For HTML, use the header slot. |
| size | String | m | The size of the modal. One of s, m, l, fullscreen, or auto. Setting the size to auto will make the modal's width grow to fit its content. |
| alignTop | Boolean | false | Whether or not the modal should be vertically aligned to the top of the viewport. When true, the modal will be top aligned, instead of vertically centered. |
| alignTopMargin | Number | 60 | The modal's distance from the top of the viewport, in pixels. Applies only when the alignTop prop is true. |
| role | String | dialog | The ARIA role for the modal (important for accessibility). One of dialog or alertdialog. |
| removeHeader | Boolean | false | Whether or not the modal header is removed. |
| removeCloseButton | Boolean | false | Whether or not the header close button is removed. |
| preventShift | Boolean | false | Whether or not to add a dummy scrollbar to the modal backdrop to prevent the modal shifting horizontally when the <body> scrollbar is hidden. Set to true to prevent the modal shift. |
| dismissible | Boolean | true | Whether or not the modal can be dismissed. Set to false to prevent the user from dismissing the modal. This will also hide the header close button. |
| dismissOn | String | backdrop close-button esc | The type of event or events that will cause the modal to be dismissed. One or more of backdrop, close-button, or esc. Separate multiple events with a space. |
Events
| Name | Description |
|---|---|
| open | Emitted when the modal starts to open. Listen for it using @open. |
| reveal | Emitted when the modal is revealed (i.e. when the transition completes). Listen for it using @reveal. |
| close | Emitted when the modal starts to close. Listen for it using @close. |
| hide | Emitted when the modal close transition completes. Listen for it using @hide. |
Slots
You can define own item markup via #slot-name:
| Name | Description |
|---|---|
| (default) | Holds the modal body and can contain HTML. |
| header | Holds the the modal header and can contain HTML. |
| footer | Holds the the modal footer and can contain HTML. |

