Закреплённое меню для лендинга: position sticky и JavaScript

Как сделать меню, которое остаётся вверху экрана при прокрутке: одна строка CSS с position: sticky и вариант, когда меню появляется только после первого экрана.

Закреплённое меню — частый элемент посадочных страниц: навигация и кнопка заявки всегда под рукой, сколько бы посетитель ни прокрутил.

Простой способ: position sticky

<header class="menu">…</header>
.menu {
  position: sticky;
  top: 0;
  z-index: 999;
  height: 50px;
  background: #000;
}

Меню стоит на своём месте в потоке страницы и «прилипает» к верху окна, когда до него доходит прокрутка. Контент под ним не прыгает, JavaScript не нужен. z-index держит меню над остальными блоками.

Меню появляется после первого экрана

Если меню должно закрепляться только после того, как посетитель пролистал первый экран:

.menu.floating { position: fixed; top: 0; left: 0; right: 0; }
<script>
const menu = document.querySelector('.menu');
window.addEventListener('scroll', function () {
  menu.classList.toggle('floating', window.scrollY > 450);
}, { passive: true });
</script>

Когда страница прокручена больше чем на 450 пикселей, меню получает класс floating и закрепляется. Флаг passive: true говорит браузеру, что обработчик не мешает прокрутке, — страница не тормозит.

Если на сайте jQuery

$(window).on('scroll', function () {
  $('.menu').toggleClass('floating', $(this).scrollTop() > 450);
});

Все статьи

Расскажите о задаче — подберём платформу и оценим работу

Обсудить проект