YuanUI pattern library

11 #Modal Modal

Toggle full screen Open in new window Toggle example guides Toggle HTML markup

Displays a dialog to your webpage.

Use JavaScript to toggle the is-open class in order to open and close the dialog.

Examples
Default styling
.modal--slidein
Slide in from top
.modal--verticalcenter
Vertically centered
Markup
<button class="demobtn">Click</button>
<div class="modal [modifier class]">
  <div class="modal__dialog">
    <div class="modal__header">
      <div class="modal__title">Modal title</div>
      <button class="modal__close">close</button>
    </div>
    <div class="modal__body">
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <!--
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
      -->
    </div>
    <div class="modal__footer">
      <button type="button">Close</button>
      <button type="button">Save changes</button>
    </div>
  </div>
</div>
<script>
Array.prototype.forEach.call(document.querySelectorAll('.demobtn'), function(btn) {
  btn.addEventListener('click', function() {
    btn.nextElementSibling.classList.add('is-open');
  });
});
var modals = document.querySelectorAll('.modal');
Array.prototype.forEach.call(modals, function(modal) {
  modal.addEventListener('click', function (event) {
    if (event.target.classList.contains('modal__close')) {
      modal.classList.remove('is-open');
    }
  });
});
document.body.addEventListener('click', function(e) {
  if (e.target.classList.contains('modal')) {
    e.target.classList.remove('is-open');
  }
});
window.addEventListener('keydown', function(e) {
  var activeModal = document.querySelector('.modal.is-open');
  if (e.key.toLowerCase() === 'escape') {
    if (activeModal) {
      activeModal.classList.remove('is-open');
    }
  }
});
</script>
Source: modal.css, line 1