const navBurger = document.getElementById('burger'); function handleClick() { if (this.classList.contains('active')) { this.classList.remove('active'); this.classList.add('inactive'); } else { this.classList.add('active'); this.classList.remove('inactive'); } } navBurger.addEventListener('click', handleClick);
<nav> <div id="burger"></div> </nav>
$nav-burger-spacing: 8px; $nav-burger-weight: 3px; $nav-burger-color: black; @keyframes outsideToX{ 0% { top: 0; bottom: 0; } 25% { top: 100%; bottom: -$nav-burger-weight; transform: rotate(0deg); background-color: transparent; } 70% { top: 100%; bottom: -$nav-burger-weight; transform: rotate(15deg); background-color: transparent; } 80% { top: -$nav-burger-weight * 2; bottom: $nav-burger-weight * 2; } 100% { top: 0; bottom: 0; height: 3px; margin: auto; background-color: $nav-burger-color; border: none; transform: rotate(45deg); } } @keyframes insideToX{ 0% { top: 0; bottom: 0; } 25% { top: 100%; bottom: -$nav-burger-weight; transform: rotate(0deg); background-color: transparent; } 70% { top: 100%; bottom: -$nav-burger-weight; transform: rotate(-75deg); background-color: transparent; } 80% { top: -$nav-burger-weight * 2; bottom: $nav-burger-weight * 2; } 100% { top: 0; bottom: 0; border: none; transform: rotate(-45deg); } } nav{ width: 100%; background-color: #eee; } #burger{ overflow: hidden; position: relative; width: 30px; height: ($nav-burger-spacing * 2) + ($nav-burger-weight * 3); border: 10px solid transparent; &:before, &:after { content: ""; display: block; position: absolute; top: 0; bottom: 0; width: 100%; } &:before { border-top: $nav-burger-weight solid $nav-burger-color; border-bottom: $nav-burger-weight solid $nav-burger-color; } &:after { height: 3px; margin: auto; background-color: $nav-burger-color; } &:hover { cursor: pointer; } &.active { &:before { animation: outsideToX 0.7s ease-out forwards; } &:after { animation: insideToX 0.7s ease-out forwards; } } }