jQuery a11y modal window

Accessible Modal Dialog
jQuery a11y modal window.
Requirements
jQuery - tested and works with latest releases of jQuery 1 - 3.
Usage
Simply include the a11y.modal.js file at the bottom of your document, or concatenated into your primary .js file as part of your build process.
Modals can be triggered by either a <button>
or <a>
. If using an <a>
, the JavaScript will add a role="button"
to the element, and will allow both Space and Enter to open a modal.
<button type="button"
class="__your_btn_classes_here__"
data-action="modal-open"
data-modal-open="unique_ID_1">
Unique Button Text
</button>
<a data-action="modal-open"
href="#unique_ID_2"
id="unique_link_id">
Unique Link Text
</a>
The recommended default markup for the modal window component:
<div id="unique_ID_1" class="a11y-modal">
<div class="modal">
<header class="modal__intro">
<h3 class="modal__intro__title">
Modal Window
</h3>
</header>
<div class="modal__content">
...
</div> <!-- /.modal__content -->
<div class="modal__outro">
...
<a data-modal-close
href="#unique_link_id"
class="modal__outro__close">
Close <!-- or add your close icon here -->
</a>
</div> <!-- /.modal__outro -->
</div> <!-- end .modal -->
</div> <!-- /.a11y-modal -->
The data-modal-close
attribute is what the script looks for in closing the modal window. So if you would like to change the class or the <svg>
, go right ahead. Just make sure to add that attribute to whatever your close trigger ends up being.
Optional attributes
Optional attributes that can be set to the modal trigger or .a11y-modal
container:
data-set-modal-title="Title Goes Here"
Use this attribute to set anaria-label
to a modal that doesn't already have a defined heading oraria-label
.data-modal-alert="true"
Set a modal to have a role ofalertdialog
.
Note - the above attributes should be set to either the container or trigger element. Not both.
Classes & their uses
.modal-is-open
Class that is toggled on the<html>
. It's primary function is to ensure that on desktop browsers, the content under the modal window is not scrollable while the modal is open..a11y-modal
Primary hook for the JavaScript, and the main parent class for the entire modal window component. This class specifically is used to style the overlay..modal
Class used to style the visible content container of the modal window..modal--sm
Helper class to make a smaller sized modal content container..modal--full-width
Helper class to make a full width modal content container..modal--take-over
Helper class to make the modal content container take up the full browser screen real estate..modal__intro
Class to style the intro (header) area of the modal content container..modal__intro__title
Class to be used on the primary heading (title) of the modal..modal__content
Class to be used on the primary content area of the modal..modal__outro
Class to be used on the call to action, or footer area of the content container..modal__outro__close
Class to be used on the close button for the modal..no-js-hide
Helper class to hide elements when JavaScript is not available.
Made with
Html
Css
JavaScript
Author
Scott O'Hara