Мобильное меню: живой пример нашей работы

Мы нарисовали меню, сверстали его и отдали программисту клиента готовым модулем с заданием. Ниже — тот же код: его можно листать прямо в телефоне. Название клиента и контакты убраны.

Что попробовать

  1. Наберите в поиске «ролекс» или «картье». Поиск понимает русские написания марок и сортирует ответы по спросу.
  2. Откройте «Все бренды». 147 марок, у популярных — логотипы, справа шкала A–Z для быстрого перехода.
  3. Перейдите в раздел и вернитесь назад. Экраны сдвигаются, как в приложении. На телефоне работает свайп от края и кнопка «Назад».
  4. Нажмите на любую ссылку. В примере она не уводит со страницы — внизу появится подсказка, куда ведёт пункт.
46 КБскрипт без библиотек
0новых ссылок: меню строится из разметки сайта
11иконок одного набора и одной толщины линии
iOS и AndroidSafari 15+ и Chrome последних трёх лет
Задание программисту

Так мы передаём работу в разработку

Программист получает не «сделайте красиво», а архив с кодом и пошаговую инструкцию: что поправить в шаблоне, куда положить файлы и как проверить после выкладки. Ниже — задание из этого проекта, без названия клиента.

Главное правило: ссылки — только из HTML

Телефон и компьютер получают один и тот же HTML. Мобильное меню строится из ссылок блока nav.menu, который шаблон уже отдаёт в коде каждой страницы, и своих адресов не добавляет. Поэтому всё, что видит посетитель в меню, видит и робот Яндекса и Google — без JavaScript. Новый пункт меню появляется так: сначала ссылка в шаблоне, потом она сама попадает в мобильное меню.

Что в архиве

mm.cssстили, все классы с префиксом mm- — со стилями шаблона не пересекаются
mm.jsскрипт без библиотек, 46 КБ
nav-target.htmlобразец разметки nav.menu: 147 марок с товаром, «Мужские и женские», коллекции
mm-extra.jsonоформление и поиск: логотипы, русские написания, порядок популярных марок, что скрыть
logos/68 логотипов марок, поля обрезаны
menu.htmlстраница демо, на сайт не нужна

Иконки разделов встроены в скрипт: 11 иконок одного набора — сетка 32×32, одна толщина линии на любом размере. Иконки шаблона нарисованы в разном масштабе, и на телефоне линии выглядели разной толщины.

Шаг 1. Разметка меню в шаблоне

  1. Марки — все, у которых есть активный товар. Лишние пункты убрать, марки с товаром добавить. Скрывать пункты через style="display: none" не нужно: сворачивать список на компьютере — классом и CSS.
  2. Новый блок data-mm="watch": ссылки «Мужские часы» и «Женские часы».
  3. Новый блок data-mm="collections": коллекции. Анкор — как заголовок страницы, марка — в атрибуте data-brand.

Вместе с меню, иначе ссылки сработают слабее: canonical на себя у страниц коллекций и свои title и description у страниц «Мужские» и «Женские».

Шаг 2. Подключить модуль

Скопировать папку в шаблон сайта и подключить перед </body>:

<link rel="stylesheet" href="/local/templates/<шаблон>/mobile-menu/mm.css">
<script src="/local/templates/<шаблон>/mobile-menu/mm.js" defer></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
  var nav = document.querySelector('nav.menu');
  fetch('/local/templates/<шаблон>/mobile-menu/mm-extra.json')
    .then(function (r) { return r.json(); })
    .then(function (extra) {
      MobileMenu.init({
        data: MobileMenu.fromSiteNav(nav, extra),
        media: '(max-width: 767px)',
        trigger: '.burger-btn',
        tabbar: true
      });
    });
});
</script>
  • Меню собирается при первом нажатии. При загрузке страницы модуль не добавляет разметку и не грузит картинки.
  • На телефоне скрипт перехватывает нажатие на бургер раньше шаблона. На компьютере всё работает как раньше.
  • tabbar: true — нижняя панель «Меню», «Бренды», «Поиск», «Избранное». Если внизу уже есть плашка cookie или кнопка чата — поднять их на 58 px.

Как ведёт себя

  • Экраны сдвигаются, как в приложении. Свайп от левого края — назад.
  • Кнопка «Назад» на Android и жест «назад» в iPhone возвращают на шаг меню, а из первого экрана закрывают его. Страница при этом остаётся открытой.
  • Пока меню открыто, страница под ним не прокручивается.
  • «Вы смотрели» — последние 6 открытых марок. Личных данных там нет, только адреса страниц.
  • Esc закрывает меню, у кнопок есть подписи для экранного диктора, учитывается системная настройка «Уменьшить движение».

Проверка после выкладки

В коде страницы (не в инспекторе, а в «Просмотре кода») — все ссылки марок, коллекции с data-brand, «Мужские» и «Женские»; ни одного пункта меню со style="display: none". На живом iPhone: открыть, пролистать, поиск, шкала A–Z, «Назад».

Сделаем так же для вашего сайта

Дизайн, вёрстка и готовый код для программиста — или внедрим сами.