Выпадающее меню по клику на ванильном JS
Нужно чтобы по клику на кнопку-бургер тоглилось появление меню. Как реализовать на чистом JS?
.header {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
display: block;
}
.container {
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
max-width: 1200px;
margin: 0 auto;
padding: 0 50px;
}
.header-menu {
display: none;
position: absolute;
right: 0;
top: 60px;
background: #fff;
line-height: 26px;
width: 200px;
}
.header-menu__list {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
list-style: none;
}
.header-menu__list-item {
list-style: none;
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
border-bottom: 2px solid #f5f5f5;
}
.header-menu__link {
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
text-transform: uppercase;
font-family: Roboto,sans-serif;
color: #7c7c7c;
text-decoration: none;
margin: 0 15px;
}
.header-menu__hamburger {
margin: 23px 0;
display: flex;
-webkit-box-pack: center;
justify-content: center;
-webkit-box-align: center;
align-items: center;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
flex-direction: column;
float: right;
width: 44px;
height: 37px;
background: #000;
border: #000;
outline: 0;
}
.header-menu__line {
-webkit-box-direction: normal;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
width: 17px;
height: 2px;
background: #fff;
margin: 2px 0;
}
.header__image {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
max-width: 100%;
}
<header class="header">
<div class="container">
<nav class="header-menu">
<ul class="header-menu__list">
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Home</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">About us</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Our journal</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Projects</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">News</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Features</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Contact</a>
</li>
</ul>
</nav>
<button class="header-menu__hamburger" id="menuToggle" data-target="#hamburgerToggle">
<div class="header-menu__line"></div>
<div class="header-menu__line"></div>
<div class="header-menu__line"></div>
</button>
<img src="https://avatars.mds.yandex.net/get-pdb/163339/4f27a481-cab6-4d41-8b65-d68eadcf9bb8/s1200" class="header__image" alt="Header Image">
</div>
</header>
Ответы (2 шт):
Самый простой добавить/убрать у элементов классы:
Методы classList:
elem.classList.add/remove("class") – добавить/удалить класс. elem.classList.toggle("class") – добавить класс, если его нет, иначе удалить. elem.classList.contains("class") – проверка наличия класса, возвращает true/false.
т.е. всё необходимое описываешь в css (делаешь невидимым меню и т.п. параллельно пишешь класс с видимым меню), далее всё при клике на бургер меню добавляешь класс списку и класс бургеру. При повторном клике класс убираешь.
Другой вариант редактировать css напрямую:
elem.style.display = "none"; // скрыть
document.querySelector('.header-menu__hamburger').addEventListener('click', e =>{
document.querySelector('.header__image').classList.toggle('block');
})
.header {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
display: block;
}
.container {
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
max-width: 1200px;
margin: 0 auto;
padding: 0 50px;
}
.header-menu {
display: none;
position: absolute;
right: 0;
top: 60px;
background: #fff;
line-height: 26px;
width: 200px;
}
.header-menu__list {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
list-style: none;
}
.header-menu__list-item {
list-style: none;
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
border-bottom: 2px solid #f5f5f5;
}
.header-menu__link {
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
text-transform: uppercase;
font-family: Roboto,sans-serif;
color: #7c7c7c;
text-decoration: none;
margin: 0 15px;
}
.header-menu__hamburger {
margin: 23px 0;
display: flex;
-webkit-box-pack: center;
justify-content: center;
-webkit-box-align: center;
align-items: center;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
flex-direction: column;
float: right;
width: 44px;
height: 37px;
background: #000;
border: #000;
outline: 0;
}
.header-menu__line {
-webkit-box-direction: normal;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
width: 17px;
height: 2px;
background: #fff;
margin: 2px 0;
}
.header__image {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
max-width: 100%;
}
.block{
display: none;
}
<header class="header">
<div class="container">
<nav class="header-menu">
<ul class="header-menu__list">
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Home</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">About us</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Our journal</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Projects</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">News</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Features</a>
</li>
<li class="header-menu__list-item">
<a href="#" class="header-menu__link">Contact</a>
</li>
</ul>
</nav>
<button class="header-menu__hamburger" id="menuToggle" data-target="#hamburgerToggle">
<div class="header-menu__line"></div>
<div class="header-menu__line"></div>
<div class="header-menu__line"></div>
</button>
<img src="https://avatars.mds.yandex.net/get-pdb/163339/4f27a481-cab6-4d41-8b65-d68eadcf9bb8/s1200" class="header__image" alt="Header Image">
</div>
</header>