<div class="nav-container" tabindex="0">
<div class="nav-toggle"></div>
<nav class="nav-items">
<a class="nav-item" href="#">Яблоко</a>
<a class="nav-item" href="#">Вишня</a>
<a class="nav-item" href="#">Арбуз</a>
</nav>
</div>
$toggleSize: 40px;
$toggleMargin: 10px;
$toggleLine: 4px;
$toggleColor: red;
.nav-container {
position: relative;
display: inline-block;
max-width: $toggleSize + $toggleMargin;
max-height: $toggleSize + $toggleMargin;
overflow: visible;
outline: none;
//&:focus-within, &:focus {
&.is-active {
.nav-toggle {
&:before, &:after {
box-shadow: none;
}
&:before {
transform: rotate(-45deg);
}
&:after {
transform: rotate(45deg);
}
}
.nav-items {
transform: translate(0, 0);
}
}
.nav-toggle {
$offset: $toggleSize * 0.5;
position: relative;
width: $toggleSize;
height: $toggleSize;
margin: $toggleMargin;
z-index: 2;
&:hover {
cursor: pointer;
}
&:before, &:after {
content: "";
position: absolute;
top: #{$offset - $toggleLine / 2};
left: 0;
transform: translate(0, 0);
width: 100%;
height: $toggleLine;
background: $toggleColor;
transition: transform .3s ease, box-shadow .3s ease;
}
&:before {
box-shadow: 0 #{$offset / 1.5} 0 0 $toggleColor;
}
&:after {
box-shadow: 0 #{-$offset / 1.5} 0 0 $toggleColor;
}
}
.nav-items {
position: absolute;
top: 0;
left: 0;
min-width: 300px;
max-width: 50vw;
width: 100vw;
height: 100vh;
z-index: 1;
padding: 80px 20px 20px 10px;
transition: transform .3s ease;
transform: translate(calc(-100% - 50px), 0);
background: #EFEFEF;
display: grid;
grid-template-columns: 1fr;
grid-gap: 5px 0;
align-content: start;
box-shadow: 0 0 50px rgba(0, 0, 0, 0.3);
.nav-item {
background: darken(#EFEFEF, 5%);
padding: 10px;
transition: background-color .3s ease;
&:hover {
cursor: pointer;
background: darken(#EFEFEF, 10%);
}
}
}
}
View Compiled
const nav = document.querySelector(".nav-container");
if (nav) {
const toggle = nav.querySelector(".nav-toggle");
if (toggle) {
toggle.addEventListener("click", () => {
if (nav.classList.contains("is-active")) {
nav.classList.remove("is-active");
}
else {
nav.classList.add("is-active");
}
});
nav.addEventListener("blur", () => {
nav.classList.remove("is-active");
});
}
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.