<dialog> с заблокированным скроллом



Скорее всего у вас была похожая задачка: при показе всплывающего окна сделать так, чтобы за ним не скроллился контент. Обычно для такого при открытии модалки при помощи JavaScript на body добавляют overflow: hidden. Но у такого подхода есть пара недостатков:

- Нужен JavaScript там, где он как будто не должен быть.

- Контент за модалкой начинает прыгать, потому что скроллбар убирается, а это влияет на ширину страницы.



Крис Койер делится простым рецептом, как на современном CSS эти недостатки убираются:

- Вместо JavaScript можно использовать body:has(dialog[open]). Если модалки сделаны при помощи dialog, то такого селектора достаточно.

- На html можно добавить scrollbar-gutter: stable;, чтобы при открытии модалки скроллбар прятался из-за overflow: hidden, но место под него оставалось. То есть контент прыгать не будет.



https://frontendmasters.com/blog/scroll-locked-dialogs/