Нужно правильно реализовать гамбургер. Что можно сделать?

Ссылка скопирована
3 марта 2026 1 ответ

HTML:

<label for="menu-toggle" class="menu-btn">                     <span class="hamburger"></span>                 </label>

<label for="menu-toggle" class="menu-btn"> <span class="hamburger"></span> </label>

CSS:

.hamburger,     .hamburger:before,     .hamburger:after {       position: absolute;       top: 53%;       left: 0;       width: 100%;       height: 1px;       background-color: white;     }        .hamburger:before,     .hamburger:after {       content: "";     }        .hamburger:before {       transform: translateY(-6px);     }        .hamburger:after {       transform: translateY(6px);     }   #menu-toggle:checked ~ .menu-btn .hamburger {       background: none;       transform: rotate(45deg);     }        #menu-toggle:checked ~ .menu-btn .hamburger:before {       top: 0;       transform: rotate(45deg);     }        #menu-toggle:checked ~ .menu-btn .hamburger:after {       top: 0;       transform: rotate(-45deg);     }        #menu-toggle:checked ~ .menu-btn .hamburger {       transform: rotate(45deg);       transition: transform 0.3s ease;     }        #menu-toggle:checked ~ .menu-btn .hamburger:before {       top: 0;       transform: translateY(0) rotate(0deg);       transition: transform 0.3s ease;     }        #menu-toggle:checked ~ .menu-btn .hamburger:after {       top: 0;       transform: translateY(0) rotate(-90deg);       transition: transform 0.3s ease;     }          #menu-toggle:checked ~ .menu {       opacity: 1;       visibility: visible;       width: 100%;       position: fixed;       left: 0;       right: 0;       height: 100%;       background-color: black;       z-index: 1;       padding-top: 450px;       text-align: center;     }

.hamburger, .hamburger:before, .hamburger:after { position: absolute; top: 53%; left: 0; width: 100%; height: 1px; background-color: white; } .hamburger:before, .hamburger:after { content: ""; } .hamburger:before { transform: translateY(-6px); } .hamburger:after { transform: translateY(6px); } #menu-toggle:checked ~ .menu-btn .hamburger { background: none; transform: rotate(45deg); } #menu-toggle:checked ~ .menu-btn .hamburger:before { top: 0; transform: rotate(45deg); } #menu-toggle:checked ~ .menu-btn .hamburger:after { top: 0; transform: rotate(-45deg); } #menu-toggle:checked ~ .menu-btn .hamburger { transform: rotate(45deg); transition: transform 0.3s ease; } #menu-toggle:checked ~ .menu-btn .hamburger:before { top: 0; transform: translateY(0) rotate(0deg); transition: transform 0.3s ease; } #menu-toggle:checked ~ .menu-btn .hamburger:after { top: 0; transform: translateY(0) rotate(-90deg); transition: transform 0.3s ease; } #menu-toggle:checked ~ .menu { opacity: 1; visibility: visible; width: 100%; position: fixed; left: 0; right: 0; height: 100%; background-color: black; z-index: 1; padding-top: 450px; text-align: center; }

В таком коде гамбургер открывается и закрывается, отлично.
Но задача гамбургера закрываться при нажатии на якорную ссылку:

Нужно правильно реализовать гамбургер. Что можно сделать?

Это всё тоже прекрасно работает за счёт js:

const menuToggle = document.querySelector("#menu-toggle"); const body = document.querySelector("body");  const menuLink = document.querySelectorAll(".menu-link"); const menu = document.querySelector(".menu");  menuToggle.addEventListener("click", function () {   if (body.style.overflow === "hidden") {     body.style.overflow = "auto";   } else {     body.style.overflow = "hidden";     menu.style.display = 'block'   } });  for (let el of menuLink) {   el.addEventListener("click", () => {     menu.style.display = 'none'     body.style.overflow = "auto";   }); }

const menuToggle = document.querySelector("#menu-toggle"); const body = document.querySelector("body"); const menuLink = document.querySelectorAll(".menu-link"); const menu = document.querySelector(".menu"); menuToggle.addEventListener("click", function () { if (body.style.overflow === "hidden") { body.style.overflow = "auto"; } else { body.style.overflow = "hidden"; menu.style.display = 'block' } }); for (let el of menuLink) { el.addEventListener("click", () => { menu.style.display = 'none' body.style.overflow = "auto"; }); }

НО после нажатия на ссылку крестик остаётся:

Нужно правильно реализовать гамбургер. Что можно сделать?

1.Нужно его перевести в гамбургер как то.
2.И самая главная проблема что при повторном нажатии, блогируется экран и не появляется менюшка гамбургера. Хотя крестик меняется на бургер:

Нужно правильно реализовать гамбургер. Что можно сделать?

Буду очень благодарен если кто сможет помочь ❤️

Дополнительно:

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

const toggler = document.getElementById('menu-toggle'); const menuLinks = document.querySelectorAll(".menu-link"); for (let el of menuLinks) {   el.addEventListener("click", () => {     toggler.checked = !toggler.checked;     // toggler.checked = false; // или так   }); }

const toggler = document.getElementById('menu-toggle'); const menuLinks = document.querySelectorAll(".menu-link"); for (let el of menuLinks) { el.addEventListener("click", () => { toggler.checked = !toggler.checked; // toggler.checked = false; // или так }); }

  • Благодарю :)
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Виктор Sys Ответ

Для правильной реализации гамбургера на сайте можно использовать следующий код на HTML, CSS и JavaScript:

HTML:

<div class="hamburger">
  <div class="line"></div>
  <div class="line"></div>
  <div class="line"></div>
</div>

<div class="hamburger"> <div class="line"></div> <div class="line"></div> <div class="line"></div> </div>

CSS:

.hamburger {
  display: block;
  cursor: pointer;
  width: 30px;
  height: 20px;
  position: relative;
}
 
.line {
  width: 100%;
  height: 3px;
  background-color: #333;
  margin: 5px 0;
}

.hamburger { display: block; cursor: pointer; width: 30px; height: 20px; position: relative; } .line { width: 100%; height: 3px; background-color: #333; margin: 5px 0; }

JavaScript:

document.querySelector('.hamburger').addEventListener('click', function() {
  this.classList.toggle('active');
});

document.querySelector('.hamburger').addEventListener('click', function() { this.classList.toggle('active'); });

Этот код создает стилизованную и анимированную иконку гамбургера, которая при клике добавляет класс 'active'. Вы можете использовать этот класс для отображения и скрытия меню на вашем сайте.

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

Надеюсь, данное решение поможет вам правильно реализовать гамбургер на вашем сайте!

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно