Modal
Accessible modal dialog
Usage
Create a modal dialog and button(s) to toggle in HTML
<button class="js-modal-toggle">Open modal</button>
<div id="modal-1" class="js-modal modal" data-modal-toggle="js-modal-toggle" hidden>
<div class="modal__inner" role="dialog" aria-labelledby="modal-label">
<h2 id="modal-label">Modal title</h2>
...
<button class="modal__close-btn js-modal-toggle" aria-label="close">
<svg focusable="false" fill="#fff" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
<path d="M0 0h24v24H0z" fill="none"/>
</svg>
</button>
</div>
</div>
Install the package
npm i -S @stormid/modal
Import the module
import modal from '@stormid/modal';
Initialise the module via selector string
const [ instance ] = modal('.js-modal');
Initialise with a DOM element
const element = document.querySelector('.js-modal');
const [ instance ] = modal(element);
Initialise with a Node list
const elements = document.querySelectorAll('.js-modal');
const [ instance ] = modal(elements);
Initialise with an Array of elements
const elements = [].slice.call(document.querySelectorAll('.js-modal'));
const [ instance ] = modal(elements);
CSS
The className 'is--modal' added to the document.body when the modal is open. This can be used to prevent the body from scrolling
.is--modal {
overflow: hidden;
}
Options
Options can be set during initialising in an Object passed as the second argument to the modal function, e.g. modal('.js-modal', { startOpen: true })
, or as data-attributes on the modal element (the element passed to the modal function), e.g. data-start-open="true"
{
onClassName: 'is--active', //className added to node when modal is open
toggleSelectorAttribute: 'data-modal-toggle', //attribute on node to use as toggle selector
callback: false, //optional function called after modal state change
delay: 0, //ms delay before focus on first focuable element
startOpen //boolean, to trigger modal to open when initialised
}
API
modal() returns an array of instances. Each instance exposes the interface
{
getState, a Function that returns the current state Object
open, a Function that opens the modal
close a Function that closes the modal
}
Tests
npm t
License
MIT