Modal
The classic modal element with graceful spacings across devices and viewports.
Modals are built with <dialog>
as a wrapper and <article>
as a content container.
Inside <header>
, <a class="close">
is defined to float: right;
allowing a close icon to be top aligned with a title.
<dialog open>
<article>
<header>
<a href="#close" aria-label="Close" class="close"></a>
Modal title
</header>
<p>
Nunc nec ligula a tortor sollicitudin dictum in vel enim.
Quisque facilisis turpis vel eros dictum aliquam et nec turpis.
Sed eleifend a dui nec ullamcorper.
Praesent vehicula lacus ac justo accumsan ullamcorper.
</p>
</article>
</dialog>
Inside <footer>
, the content is right aligned by default.
<dialog open>
<article>
<h3>Confirm your action!</h3>
<p>
Mauris non nibh vel nisi sollicitudin malesuada.
Donec ut sagittis erat. Praesent eu eros felis.
Ut consectetur placerat pulvinar.
</p>
<footer>
<a href="#cancel" role="button" class="secondary">Cancel</a>
<a href="#confirm" role="button">Confirm</a>
</footer>
</article>
</dialog>
Live demo
Toggle a modal by clicking the button below.
Pico does not include JavaScript code. You will need to implement your JS to interact with modals.
As a starting point, you can look at this example: modal.js.
To make a modal appear, add the open
attribute to the <dialog>
container.
<!-- Open modal-->
<dialog open>
<article>
…
</article>
</dialog>
<!-- Modal closed -->
<dialog>
<article>
…
</article>
</dialog>
Utilities
Modals come with 3 utility classes.
ℹ️ These classes are not available in the class-less version.
.modal-is-open
prevents any scrolling and interactions below the modal.
<!doctype html>
<html class="modal-is-open">
…
</html>
.modal-is-opening
brings an opening animation.
<!doctype html>
<html class="modal-is-open modal-is-opening">
…
</html>
.modal-is-closing
brings a closing animation.
<!doctype html>
<html class="modal-is-open modal-is-closing">
…
</html>