<dialog> с заблокированным скроллом
Скорее всего у вас была похожая задачка: при показе всплывающего окна сделать так, чтобы за ним не скроллился контент. Обычно для такого при открытии модалки при помощи JavaScript на
- Нужен JavaScript там, где он как будто не должен быть.
- Контент за модалкой начинает прыгать, потому что скроллбар убирается, а это влияет на ширину страницы.
Крис Койер делится простым рецептом, как на современном CSS эти недостатки убираются:
- Вместо JavaScript можно использовать
- На
https://frontendmasters.com/blog/scroll-locked-dialogs/
Скорее всего у вас была похожая задачка: при показе всплывающего окна сделать так, чтобы за ним не скроллился контент. Обычно для такого при открытии модалки при помощи 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/