Это вторая часть по гамбургер меню . В первой части мы сделали пока только верстку.

Гамбургер меню на CSS или JS? Часть 2

Это вторая часть по гамбургер меню. В первой части мы сделали пока только верстку.

5. Скачать библиотеку jquery-3.3.1.min.js

Подключаем к нашему HTML документу перед закрывающимся тегом body два файла, один из них ещё пустой.

<script src="jquery-3.3.1.min.js"></script>
<script src="script.js"></script>
</body>

6. Создать событие на JS

Пишем следующий код в файл script.js

$(function(){
  $('.menuBurger').on('click', function(){
    $('.menu').slideToggle(200, function(){
      if($(this).css('display') === 'none'){
      $(this).removeAttr('style');
  }
});
});
});

Эта строчка $('.menuBurger').on('click', function(){ отслеживает событие на клик по элементу с классом .menuBurger.

$('.menu').slideToggle(200, function(){ здесь к самому меню применяется функция slideToggle(), которая поочередно разворачивает или сворачивает, выбранные элементы на странице за 200 милисекунд.

$(this).removeAttr('style'); - убирает из inline стилей display: none;

Теперь по клику гамбургер меню разворачивается и сворачивается, но есть проблема, при разворачивании меню сдвигает вниз основной контент сайта, а правильно, если оно находится поверх контента. При этом страдает скорость загрузки страницы, особенно на мобильном интернете.

Гамбургер меню на CSS или JS.

6. Разворачивание меню поверх контента

Эта проблема решается с помощью позиционирования меню.

В основном CSS коде надо добавить

.menu {
    position: relative;
}

В медиа-запросе: .menu {
    background: #eee;
    position: absolute;
  }

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

Гамбургер меню на CSS или JS.

Гамбургер меню на CSS

1. Отключаем и удаляем все скрипты

2. Вставляем в HTML файл между тегами div и ul строчку кода <input id="menuCSS" type="checkbox">

3. Заменяем тег div c классом .menuBurger на label

<label class="menuBurger" for="menuCSS">

4. Связать id input c атрибутом for label через #menuCSS

В результате, при клике по иконке гамбургера меню, появляется галочка и в чекбоксе.

Гамбургер меню на CSS или JS.

5. Добавим в медиа-запросе псевдокласс checked

#menuCSS:checked {
    display: none;
  }

Это значит, что при клике по иконке, галочка ставится в чекбокс, но на экране он скрыт, видна только иконка. Идея в том, что если чекбокс не отмечен, то меню закрыто, а если отмечен галочкой, то меню развернуто. Событие с открыванием и закрыванием меню, подвешено на то, в каком состоянии находится чекбокс.

6. Скроем input в CSS

#menuCSS {
    display: none;
    }

7. Меняем код в пункте 5, смотрите выше в статье на следующий

#menuCSS:checked + .menu {
    display: block;
  }

Если связующее звено между label и input #menuCSS отмечено галочкой (checked), то меню развернуто. Вот и вся магия, гамбургер меню работает на чистом CSS и если добавить ему плавную анимацию, то никакой разницы с меню на JS, вы не почувствуете.

Попробуйте уменьшить браузер и вы наглядно увидите, как работает гамбургер меню на CSS

Вывод

Оба варианта рабочие. Меню на JS, скажем так – правильное, с точки зрения использования кода. Меню на CSS – это «костыль», своего рода «проявление изобретательности», хорошо подходит тем, кто не хочет разбираться в JS и собирается применять это только на своих проектах. Для сайтов на заказ никаких «костылей», настоятельно стоит делать верстку, заточенную под дальнейшее применение JS, другими специалистами.