<nav>
<button class="toggle-dropdown" aria-haspopup="true" aria-controls="nav-dropdown" aria-expanded="false" aria-label="Nav toggle">
<svg viewBox="0 0 448 512" width="100" title="bars">
<path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z" />
</svg>
</button>
<div id="nav-dropdown" class="dropdown" aria-role="region">
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/projects">Projects</a>
<a href="/contact">Contact</a>
</div>
</nav>
.dropdown.expanded {
opacity: 1;
visibility: visible;
}
.dropdown {
opacity: 0;
visibility: hidden;
transition: opacity 0.2s, visibility 0.2s;
z-index: -1;
height: 100vh;
width: 100%;
display: flex;
flex-direction: column;
justify-content: center;
position: absolute;
top: 0;
left: 0;
}
.dropdown a {
font-size: 24px;
font-weight: bold;
margin: 20px;
}
.toggle-dropdown svg {
width: 24px;
height: auto;
vertical-align: middle;
}
.toggle-dropdown {
z-index: 1;
cursor: pointer;
}
nav {
position: relative;
}
@import url("https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700");
html {
font-family: "Open Sans";
}
const dropdown = document.querySelector(".dropdown");
const toggle = document.querySelector(".toggle-dropdown");
toggle.addEventListener("click", () => {
dropdown.classList.toggle("expanded");
if (dropdown.classList.contains("expanded")) {
toggle.setAttribute("aria-expanded", "true");
} else {
toggle.setAttribute("aria-expanded", "false");
}
});
dropdown.addEventListener("transitionend", () => {
if (dropdown.classList.contains("expanded")) {
dropdown.firstElementChild.focus();
}
});
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.