JSFiddle - React, Tailwind, and code Playground
by Axiniya
HTML
<div class="menu-button pushmenu">
<a href="#"><img src="https://cdn-icons-png.flaticon.com/512/149/149719.png" alt=""></a>
</div>
<div class="pushmenu nav-icon3">
<a href="#"><img src="https://cdn-icons-png.flaticon.com/512/660/660252.png" alt=""></a>
</div>
<nav>
<div class="main-menu">
<ul class="menu-main-menu">
<li class="menu-parent-item item-001">
<a href="#">Пункт меню 1 ▶</a>
<div class="menu-lvl-2">
<ul class="lvl-2 lvl-2-content-001">
<li class="menu-child-item">
<a href="#">Подпункт меню 1 ▶</a>
<div class="menu-lvl-3">
<ul class="lvl-3">
<li><a href="#">Подподпункт меню 1</a></li>
<li><a href="#">Подподпункт меню 2</a></li>
<li><a href="#">Подподпункт меню 3</a></li>
</ul>
</div>
</li>
<li><a href="#">Подпункт 2</a></li>
<li><a href="#">Подпункт 3</a></li>
</ul>
</div>
</li>
<li class="menu-parent-item item-002">
<a href="#">Пункт меню 2 ▶</a>
<div class="menu-lvl-2">
<ul class="lvl-2 lvl-2-content-002">
<li class="menu-child-item">
<a href="#">Какой-то контент 1 ▶</a>
<div class="menu-lvl-3">
<ul class="lvl-3">
<li><a href="#">Вложеность 1</a></li>
<li><a href="#">Вложеность 2</a></li>
<li><a href="#">Вложеность 3</a></li>
</ul>
</div>
</li>
<li><a href="#">Какой-то контент 2</a></li>
<li><a href="#">Какой-то контент 3</a></li>
</ul>
</div>
</li>
<li><a href="#">Пункт меню 3</a></li>
</ul>
</div>
</nav>
<div class="hidden-overley"></div>
CSS
.menu-button img {
height: 50px;
width: 50px;
}
.nav-icon3 img {
height: 50px;
width: 50px;
}
.main-menu li, a {
text-decoration: none;
list-style: none;
color: black;
}
.main-menu {
position: fixed;
width: 200px;
top: 0;
height: 100%;
background: gray;
margin: 0;
padding: 0;
left: -200px;
z-index: 100;
}
.main-menu.show {
left: 0;
}
.hidden-overley {
position: fixed;
top: 0;
left: 0;
z-index: 99;
background: #000000;
opacity: 0;
width: 0;
height: 0;
transition: opacity 1s;
}
.hidden-overley.show {
height: 100%;
width: 100%;
opacity: 0.5;
transition: opacity 1s;
}
.menu-lvl-2 .lvl-2 {
display: none;
position: fixed;
width: 200px;
left: 200px;
top: 0;
list-style: none;
height: 100%;
background: darkgray;
padding: 0;
}
.menu-lvl-3 .lvl-3 {
display: none;
position: fixed;
width: 200px;
left: 400px;
top: 0;
list-style: none;
height: 100%;
background: lightgray;
padding: 0;
}
JavaScript
$(document).ready(function() {
$(".item-001").mouseover(function() {
$(".lvl-2-content-001").show();
$(".lvl-2-content-002").hide();
});
$(".item-002").mouseover(function() {
$(".lvl-2-content-002").show();
$(".lvl-2-content-001").hide();
});
});
document.addEventListener('DOMContentLoaded', () => {
// получаем все элементы с классом pushmenu
const pushmenu = document.getElementsByClassName('pushmenu');
// получаем элемент с классом hidden-overley
const hiddenOverley = document.querySelector('.hidden-overley');
// отслеживаем клик клика по оверлею
hiddenOverley.addEventListener('click', (e) => {
e.currentTarget.classList.toggle('show');
document.querySelector('.main-menu').classList.toggle('show');
document.querySelector('body').classList.toggle('sidebar-opened');
for( i=0; i < pushmenu.length; i++ ){
pushmenu[i].classList.toggle('open');
}
});
const pushmenuFunction = function() {
document.querySelector('.pushmenu').classList.toggle('open');
document.querySelector('.main-menu').classList.toggle('show');
document.querySelector('.hidden-overley').classList.toggle('show');
document.body.classList.toggle('sidebar-opened');
};
// Отслеживаем клики кнопок с классом pushmenu
for( i=0; i < pushmenu.length; i++ ){
pushmenu[i].addEventListener('click', pushmenuFunction, false);
}
// Получим все родительские элементы в меню
const sidebarAccordeon = document.querySelectorAll('.main-menu .menu-parent-item a:first-child');
const accordeonFunction = function() {
this.parentNode.querySelector('ul').classList.toggle('show');
}
});