Задать вопрос

Как запретить скролл страницы при открытии попапа?

есть адекватный способ запретить скролл страницы?
тоесть иметь возможность скролить только попап
(когда открыли его)
  • Вопрос задан
  • 867 просмотров
Подписаться 5 Простой 18 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Профессиональная вёрстка на HTML и CSS
    3 месяца
    Далее
  • Stepik
    Основы HTML и CSS
    2 недели
    Далее
  • OTUS
    HTML/CSS
    3 месяца
    Далее
Решения вопроса 1
Dimox
@Dimox
Фронтендер
Делаю следующий образом.

html {
  &.overflow {
    overflow: hidden;
    margin-right: var(--scrollbar-width, 0);
  }
}


При отсутствии скроллбара добавляется отступ --scrollbar-width, равный его ширине, которая определяется скриптом:

const getScrollbarWidth = function () {
  const $scrollDiv = document.createElement('div');
  $scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
  document.body.appendChild($scrollDiv);
  const scrollBarWidth = $scrollDiv.offsetWidth - $scrollDiv.clientWidth;
  document.body.removeChild($scrollDiv);
  return scrollBarWidth;
};


В момент открытия и закрытия попапа запускается скрипт:

const $html = $('html');
if ($html.is('.overflow')) {
  $html.removeClass('overflow');
  $html.css('--scrollbar-width', '');
} else {
  $html.addClass('overflow');
  $html.css('--scrollbar-width', `${getScrollbarWidth()}px`);
}


А скролл попапа делать уже внутри блока с попапом.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы