How to stop page scrolling when you have an open dialog element
I was implementing a <dialog>
element on a recent project, but was bothered by how the page kept scrolling in the background.
I noticed that when a <dialog>
is open, the browser adds an open
attribute to that element.
<dialog class="example-dialog" open>...</dialog>
Knowing that, combined with the :has
selector, makes this a pretty straightforward one-liner in CSS:
body:has(.example-dialog[open]) {
/* Poof! No more scrolling! */
overflow: hidden;
}
A caveat here is that the <dialog>
should not possibly need scrolling - that is, it should be pretty short in terms of content.
Hope that helps you!
Previous: Distraction Driven Development