Add modal variant of mobile navbar
This commit is contained in:
parent
3bc0364a1c
commit
42945b97c0
3 changed files with 152 additions and 0 deletions
33
src/navbar-modal/index.html
Normal file
33
src/navbar-modal/index.html
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="./index.scss" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header class="header">
|
||||||
|
<!-- Logo -->
|
||||||
|
<a href="#" class="logo">Logo</a>
|
||||||
|
|
||||||
|
<!-- Hamburger icon -->
|
||||||
|
<button class="side-menu">V</button>
|
||||||
|
|
||||||
|
<!-- Menu -->
|
||||||
|
<nav class="nav">
|
||||||
|
<button class="nav-close">X</button>
|
||||||
|
<ul class="menu">
|
||||||
|
<li><a href="#">Gallery</a></li>
|
||||||
|
<li><a href="#">Blog</a></li>
|
||||||
|
<li><a href="#">About</a></li>
|
||||||
|
<li><a href="#">Gallery</a></li>
|
||||||
|
<li><a href="#">Blog</a></li>
|
||||||
|
<li><a href="#">About</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="icons">
|
||||||
|
<li><a href="#">A</a></li>
|
||||||
|
<li><a href="#">B</a></li>
|
||||||
|
<li><a href="#">C</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
<script src="index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
9
src/navbar-modal/index.js
Normal file
9
src/navbar-modal/index.js
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
window.addEventListener("load", function() {
|
||||||
|
const NAVBAR_BUTTON = document.querySelector("button.side-menu");
|
||||||
|
|
||||||
|
// HACK: Work around window resizing whilst the modal is open animating its size,
|
||||||
|
// by closing the modal whenever the window is resized
|
||||||
|
window.addEventListener("resize", function() {
|
||||||
|
NAVBAR_BUTTON.blur();
|
||||||
|
});
|
||||||
|
});
|
110
src/navbar-modal/index.scss
Normal file
110
src/navbar-modal/index.scss
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
@import "normalize.css";
|
||||||
|
|
||||||
|
body,
|
||||||
|
html {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background-color: red;
|
||||||
|
padding: 1rem;
|
||||||
|
|
||||||
|
.side-menu,
|
||||||
|
.nav-close {
|
||||||
|
display: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu, .icons {
|
||||||
|
list-style: none;
|
||||||
|
display: inline-flex;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
li {
|
||||||
|
padding-left: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icons {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
nav {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: transparentize(black, 0.2);
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
transition-duration: 0.25s;
|
||||||
|
transition-timing-function: ease-in-out;
|
||||||
|
overflow: hidden;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.menu, .icons {
|
||||||
|
display: initial;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu li {
|
||||||
|
font-size: 2rem;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icons {
|
||||||
|
display: inline-flex;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-top: 1rem;
|
||||||
|
|
||||||
|
li {
|
||||||
|
padding: 0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-close {
|
||||||
|
position: absolute;
|
||||||
|
top: 1rem;
|
||||||
|
right: 1rem;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-menu:not(:focus) ~ nav {
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-close,
|
||||||
|
.side-menu {
|
||||||
|
display: initial !important;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
justify-content: space-between;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue