Красивый burger-переключатель мобильного меню

27.08.2019

В современной разработке сайтов и веб-приложений всегда возникает необходимость модификации простого меню в мобильное, чтобы сократить занимаемое на экране место. Как правило, для этой задачи используется меню с бургер-переключателем. Я использую готовый анимированный burger-переключатель, чтобы не делать одну и ту же работу на каждом проекте (если иное не указано в техническом задании).

Начнем с создания самого элемента переключателя и контейнера с меню:

<div id="burger-toggler" class="burger-toggler"><span></span></div>
<div id="menu-container" class="menu-container"></div>

Подключим следующие css-стили:

<style>
.burger-toggler{
    border-radius: 50px;
    width: 45px;
    height: 45px;
    border: 2px solid #f25b83;
    position: absolute;
    top: 15px;
    right: 15px;
    margin: 0;
    z-index: 100;
    cursor: pointer;
}
.burger-toggler > span {
    position: relative;
    display: inline-block;
    text-align: left;
    width: 25px;
    height: 3px;
    border-radius: 3px;
    background: #f25b83;
    margin-top: 21px;
    margin-left: 10px;
    -webkit-transition: all .2s ease-in-out;
    -o-transition: all .2s ease-in-out;
    transition: all .2s ease-in-out;
}
.burger-toggler > span:before, .burger-toggler > span:after {
    position: absolute;
    background: #f25b83;
    content: '';
    width: 25px;
    height: 3px;
    border-radius: 3px;
    -webkit-transition: all .2s ease-in-out;
    -o-transition: all .2s ease-in-out;
    transition: all .2s ease-in-out;
}
.burger-toggler > span:before {
    top: -7px;
}
.burger-toggler > span:after {
    top: 7px;
}
.burger-toggler.active > span {
    background: transparent !important;
}
.burger-toggler.active > span:before {
    -webkit-transform: rotate(45deg) translate(5px, 5px);
        -ms-transform: rotate(45deg) translate(5px, 5px);
            transform: rotate(45deg) translate(5px, 5px);
}
.burger-toggler.active > span:after {
    -webkit-transform: rotate(-45deg) translate(5px, -5px);
        -ms-transform: rotate(-45deg) translate(5px, -5px);
            transform: rotate(-45deg) translate(5px, -5px);
}
.menu-container{
    display: none;
}
.menu-container.active{
    display: block;
}
</style>

А теперь напишем Javascript-код, который будет описывать логику работы:

<script>
var burgerToggler = document.getElementById('burger-toggler');
var menuContainer = document.getElementById('menu-container');
            
burgerToggler.addEventListener('click', function(event){
    this.classList.toggle('active');
    menuContainer.classList.toggle('active');
});
</script>

При клике на бургер, мы переключаем класс active у него самого и у контейнера с меню, чтобы показывать и скрывать его содержимое.

« список статей