ハンバーガーボタンを作成する

自分のメモ用の記事です。クリックすると×に変形します。

サンプル

See the Pen ハンバーガーボタン by keiichisawai (@sawakei) on CodePen.

HTML

<button class="c-buggerBtn" id="js-nav-btn">
    <span class="c-buggerBtn__bar"></span>
    <span class="c-buggerBtn__screen">MENU</span>
</button>

CSS(Sass)

.c-buggerBtn {
    all: unset;
    aspect-ratio: 1/1;
    cursor: pointer;
    display: grid;
    outline: revert;
    place-items: center;
    -webkit-tap-highlight-color: transparent;
    width: 20px;
    z-index: calc(infinity);
}

.c-buggerBtn__bar,
.c-buggerBtn::before,
.c-buggerBtn::after {
    background-color: currentColor;
    content: "";
    display: block;
    grid-area: 1/1;
    height: 2px;
    transition: transform 0.5s;
    width: 100%;
}

.c-buggerBtn {
    &::before {
        transform: translateY(-7px);
    }

    &::after {
        transform: translateY(7px);
    }
}

.is-open {
    .c-buggerBtn__bar {
        transform: scale(0);
    }

    .c-buggerBtn {
        &::before {
            transform: translateY(0) rotate(45deg);
        }

        &::after {
            transform: translateY(0) rotate(-45deg);
        }
    }
}

//スクリーンリーダー
.c-buggerBtn__screen {
    border: 0;
    clip: rect(0, 0, 0, 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px;
}

javaScript

const jsBody = document.querySelector('body');
const jsNavBtn = document.querySelector('#js-nav-btn');

jsNavBtn.addEventListener('click', () => {
    jsBody.classList.toggle('is-open');
})