EDIT: The mobile query class .Nav contains "display: none;" within it. The javascript code works as intended opening and closing the desired classes. Although the open class is invisible due to the "display:none" in the .Nav class. Once this code is removed, The javascript no longer works. You can view it on my website https://blacklist-rs.com/design/
document.querySelector('#menu-icon').addEventListener('click', function() {
document.querySelector('.nav-container').classList.toggle('nav-open')
})
body {
margin: 0px;
padding: 0px;
width: 100%;
height: 100%;
background-color:#000;
font-family: 'EurostileBold', sans-serif;
}
#background{
position:fixed;
z-index:-1;
top:0px;
left:0px;
}
@media only screen and (max-width: 1280px) {
.header #menu-icon{
left: 35px;
top: 46px;
position: absolute;
width: 30px;
height: 30px;
background-image:url(https://blacklist-rs.com/design/img/menu.svg);
background-repeat: no-repeat;
cursor:pointer;
}
.nav{
position:fixed;
top:0px;
left:0px;
width:100%;
height:100%;
z-index:99999;
display:none; /** Code that makes the javascript work **/
/** Once removed, menu displays but javascript doesnt work **/
}
.header {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100px;
z-index: 999;
}
.nav-container {
position:absolute;
top:0px;
left:-340px;
width: -340px;
height:100%;
background-color:#000;
}
.nav-open {
position:absolute;
top:0px;
left:0px;
width:340px;
height:100%;
background-color:#000;
-webkit-transform: translateY(340px,0);
-ms-transform: translateY(340px,0);
transition: all 0.5s;
}
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="header">
<div id="menu-icon"></div>
<div class="nav">
<div class="nav-bg-close"></div>
<div class="nav-container">
<div class="close"></div>
<div class="main-menu">
<ul class="menu">
<li><a href="#home">Home</a> </li>
<li><a href="#about">About</a> </li>
<li><a href="#services">Services</a> </li>
<li><a href="#contact">Contact</a> </li>
</ul></div>
</div>
</div>
</div>
</body>
Note that JS will work as long as these two elements exist: #menu-icon
and .nav-container
I've tried removing .nav css inside media query, the JS toggles class nav-open
and shows the menu.
document.querySelector('#menu-icon').addEventListener('click', function() {
document.querySelector('.nav-container').classList.toggle('nav-open')
})
body {
margin: 0px;
padding: 0px;
width: 100%;
height: 100%;
background-color:#000;
font-family: 'EurostileBold', sans-serif;
}
#background{
position:fixed;
z-index:-1;
top:0px;
left:0px;
}
@media only screen and (max-width: 1280px) {
.header #menu-icon{
left: 35px;
top: 46px;
position: absolute;
width: 30px;
height: 30px;
background-image:url(https://blacklist-rs.com/design/img/menu.svg);
background-repeat: no-repeat;
cursor:pointer;
}
}
.header {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100px;
z-index: 999;
}
.nav-container {
position:absolute;
top:0px;
left:-340px;
width: -340px;
height:100%;
background-color:#000;
}
.nav-open {
position:absolute;
top:0px;
left:0px;
width:340px;
height:100%;
background-color:#000;
-webkit-transform: translateY(340px,0);
-ms-transform: translateY(340px,0);
transition: all 0.5s;
}
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="header">
<div id="menu-icon"></div>
<div class="nav">
<div class="nav-bg-close"></div>
<div class="nav-container">
<div class="close"></div>
<div class="main-menu">
<ul class="menu">
<li><a href="#home">Home</a> </li>
<li><a href="#about">About</a> </li>
<li><a href="#services">Services</a> </li>
<li><a href="#contact">Contact</a> </li>
</ul></div>
</div>
</div>
</div>
</body>