Полноэкранная навигация перескакивает из-за отсутствия полосы прокрутки

У меня есть сайт с полноэкранной навигацией, которая при запуске скрывает переполнение элемента html. Это сделано для остановки прокрутки страницы за навигационной панелью, когда она открыта.

Урезанный SCSS (при активной навигации) выглядит так:

    html.nav-is-active {
      overflow: hidden
    }
    
    nav.active {
      display: block;
      position: fixed;
      top: 0;
      left: 0;
      width: 100vw;
      height: 100vh;
      z-index: 1600000;
    }

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

У меня вопрос, как я могу это решить? Я могу удалить overflow:hidden из элемента html, чтобы сохранить полосу прокрутки, но тогда это означает, что сайт может непреднамеренно прокручиваться при открытой навигационной панели.

Любая помощь приветствуется

Майк

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
321
2

Ответы 2

Это действительно хакер, но он должен делать то, что вы хотите ...

html {
  overflow-y: hidden;
}

body {
  overflow-y: scroll; // causes an empty scrollbar
  height: auto; //set height = content so body can't overflow
}

Таким же образом можно сделать полосу прокрутки видимой в наложении.

ИЛИ Если вы можете определить ширину полосы прокрутки (обычно 15 пикселей на Mac и думаю аналогично Win 10), вы можете вычесть из размера наложения или добавить отступ. Это немного лучше, чем установка оверлея на overflow-y: scroll, поскольку это не приведет к прокрутке ВНУТРИ оверлея на маленьких экранах.

nav.active {
  width: calc(100vw - 15px); // could be done with javascript
}

Просто html.nav-is-active {position: fixed; overflow-y:scroll;} должен помочь.

DanieleAlessandra 26.10.2018 21:10

Альтернативой блочной прокрутки без overflow: hidden; является position: fixed; overflow-y:scroll;, поэтому просто измените это:

html.nav-is-active {
  overflow: hidden;
}

с этим:

html.nav-is-active {
  position: fixed;
  overflow-y:scroll;
}

Вы увидите пустую полосу прокрутки, но страница больше не будет "прыгать".

Другие вопросы по теме