Как правильно сделать выпадающее бургер меню на чистом JS
html:
<div class="container">
<div class="header__inner">
<div class="krea__logo">
<img src="img/KreaLogo.png" alt="">
</div>
<nav class="krea__nav" >
<ul class="menu__link">
<li><a data-goto="#Services" class="nav__link" href="#">Services</a></li>
<li><a data-goto="#Works" class="nav__link" href="#">Works</a></li>
<li><a data-goto="#References" class="nav__link" href="#">References</a></li>
<li><a data-goto="#Contact" class="nav__link" href="#">Contact</a></li>
</ul>
</nav>
<a class="burger" id="dropDown">
<span class="burger__item"></span>
</a>
</div>
</div><!--/Container-->
Бургер меню используется только в адаптивной вёрстке, поэтому на десктопной версии сайта он скрыт. CSS:
.krea__nav {
display: none;
margin-top: 23px;
position: absolute;
background-color: #333366;
right: 0;
min-width: 160px;
z-index: 1;
}
.burger {
z-index: 5;
display: block;
position: relative;
width: 30px;
height: 18px;
cursor: pointer;
}
.burger span,
.burger::before,
.burger::after {
left: 0;
position: absolute;
height: 10%;
width: 100%;
transition: all .2s linear;
background-color: #fff;
}
.burger::before,
.burger::after {
content: "";
}
.burger::before {
top: 0;
}
.burger::after {
bottom: 0;
}
.burger span {
top: 50%;
transform: scale(1) translate(0px, -50%);
}
.menu__link {
display: flex;
flex-direction: column;
padding: 12px 5px 12px 5px;
text-decoration: none;
display: block;
text-align: left;
}
Ответы (3 шт):
Автор решения: WalkMess
→ Ссылка
//Получаем бургер
const menuBurger = document.querySelector(".menu__burger");
//Вешаем слушатель событий при его клике - вызываем функцию.
menuBurger.addEventListener("click", function() {
//Функция добавляет класс или удаляет его.
menuBurger.classList.toggle('active');
});
Автор решения: Alexandr
→ Ссылка
и зачем бургеру JS?
стилизуйте чекбокс через ::after,
а при помощи :checked ловите состояние для показа/скрытия блока с меню.
делов то.
Автор решения: Andrei Fedorov
→ Ссылка
Тут вам не нужен JS, воспользуйтесь возможностями, которые предлагает современный HTML.
.krea__nav {
margin-top: 23px;
position: absolute;
inset: auto;
background-color: #333366;
min-width: 160px;
z-index: 1;
border: none;
}
.burger {
z-index: 5;
display: flex;
align-items: center;
width: 30px;
height: 18px;
cursor: pointer;
border: none;
background: #444;
}
.burger__item {
fill: white;
width: 30px;
height: 18px;
}
.menu__link {
display: flex;
flex-direction: column;
padding: 12px 5px 12px 5px;
text-decoration: none;
display: block;
text-align: left;
}
.nav__link {
color: white;
}
<div class="container">
<div class="header__inner">
<div class="krea__logo">
<img src="img/KreaLogo.png" alt="">
</div>
<nav class="krea__nav" id="mypopover" popover>
<ul class="menu__link">
<li><a data-goto="#Services" class="nav__link" href="#">Services</a></li>
<li><a data-goto="#Works" class="nav__link" href="#">Works</a></li>
<li><a data-goto="#References" class="nav__link" href="#">References</a></li>
<li><a data-goto="#Contact" class="nav__link" href="#">Contact</a></li>
</ul>
</nav>
<button class="burger" id="dropDown" popovertarget="mypopover" popovertargetaction="toggle">
<svg class="burger__item" clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m22 16.75c0-.414-.336-.75-.75-.75h-18.5c-.414 0-.75.336-.75.75s.336.75.75.75h18.5c.414 0 .75-.336.75-.75zm0-5c0-.414-.336-.75-.75-.75h-18.5c-.414 0-.75.336-.75.75s.336.75.75.75h18.5c.414 0 .75-.336.75-.75zm0-5c0-.414-.336-.75-.75-.75h-18.5c-.414 0-.75.336-.75.75s.336.75.75.75h18.5c.414 0 .75-.336.75-.75z" fill-rule="nonzero"/></svg>
</button>
</div>
</div>