Решён
Как зафиксировать меню категорий товаров в верхней части страницы при прокрутке?

CSS Wizard HTML/CSS
1.1k
5

Делаю интернет магазин на чистом HTML/CSS/JS. Есть горизонтальное меню с категориями товаров под шапкой сайта.

Нужно чтобы при скролле вниз это меню оставалось видимым (прилипало к верху экрана), а шапка уезжала вверх как обычно.

Пробовал position: fixed - меню фиксируется, но при этом наезжает на контент и ломает всю верстку. Как правильно реализовать такое поведение?

Решение
104
Участник • 2 ответа

Используй position: sticky вместо fixed.

.menu {
  position: sticky;
  top: 0;
  z-index: 100;
  background: white;
}

Sticky работает как relative до тех пор пока элемент не достигнет указанной позиции (в данном случае top: 0), после чего ведет себя как fixed но не выпадает из потока документа. Контент не съезжает.

Обязательно укажи background чтобы меню не было прозрачным при наложении на контент. И z-index чтобы меню было поверх всего.

Аватар CSS Wizard

Офигеть, не знал про sticky. Работает идеально, спасибо!

77
Участник • 1 ответ

Если нужна поддержка старых браузеров (sticky работает с IE11+ частично), используй JS:

const menu = document.querySelector('.menu');
const menuOffset = menu.offsetTop;

window.addEventListener('scroll', () => {
  if (window.pageYOffset >= menuOffset) {
    menu.classList.add('fixed');
  } else {
    menu.classList.remove('fixed');
  }
});

В CSS:

.menu.fixed {
  position: fixed;
  top: 0;
  width: 100%;
}

.menu.fixed + * {
  margin-top: 60px; /* высота меню */
}

Когда меню получает класс fixed, следующему элементу добавляется верхний отступ равный высоте меню, чтобы контент не прыгал.

38
Эксперт • 2 ответа

sticky это топ, только не забудь что родитель должен иметь overflow: visible (по дефолту так и есть). Если где то выше стоит overflow: hidden или auto - sticky работать не будет.

0
Участник • 2 ответа

А зачем вообще фиксировать меню? Пользователь хочет листать контент, а не чтобы меню занимало место на экране постоянно. Особенно на мобилках это бесит - половина экрана под интерфейс, половина под товары.

Лучше сделай кнопку "наверх" в углу, по клику возвращает к меню.

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.