Fun with Stateful CSS: Modals
23 October 2013
In the first post in this series, we looked at how to switch between the “view” and “edit” modes of a page with just a checkbox. Today, we’ll apply a similar technique to show a modal popup. Once again, we’ll be using nothing but HTML and CSS…no JavaScript!
To review, the concept is simple: use HTML elements that are designed to hold state to do so (think form inputs), and rely on CSS rules to react to those states. The previous post relied on a checkbox input and the :checked
selector, which is what we’ll use here, too.
The HTML is quite simple. Due to the nature of CSS, our checkbox needs to be before (in the DOM) any elements we want to target with selectors, but we only need two extra elements beyond that (one for the modal itself and another to form the “cover” behind it):
<input id="show-modal" type="checkbox"> |
Behaviorally, both label
elements in this example will toggle the state of the show-modal
checkbox. We’ll use CSS to show the modal (and its cover) when that checkbox is checked, and hide it otherwise. The “general sibling” selector makes another appearance here:
/* Hide the modal by default... */ |
You can easily add some CSS transitions to make the modal fade in and out (or even something more exciting), but the concept remains the same. You may wonder about the label
tag inside the modal: its purpose is to un-check the checkbox, thereby hiding the modal, much like a “close” button (but without the JavaScript!).
See the Pen KILyq by Tim G. Thomas (@TimGThomas) on CodePen
My team uses this approach on our current project. Though we use JavaScript to populate the contents of our modals, this technique seriously cuts down on the script overhead of showing a modal popup. Stick around for more fun with stateful CSS!