Создание меню и навигации

Почему классическое меню сверху часто проигрывает боковому?
Многие новички копируют горизонтальное меню из шаблонов, думая, что это стандарт. На практике горизонтальное меню сжимает контент по ширине и неэффективно для сайтов с 7+ пунктами. C 2026 года тренд смещается в сторону вертикальной навигации слева — она оставляет больше места для контента на мобильных устройствах и позволяет группировать до 15–20 пунктов без выпадающих списков. Например, для интернет-магазинов с 10+ категориями оптимальная ширина бокового меню — 220–280 пикселей. Используйте CSS-свойство position: sticky с отступом от верхнего края 20–30 пикселей, чтобы меню оставалось видимым при скролле.
- Горизонтальное меню: подходит для сайтов с 3–5 пунктами (лендинги, портфолио). Ширина вложенных уровней не должна превышать 200 px, иначе элементы уплывают за край экрана.
- Боковое меню: для порталов, админок, каталогов. Задайте ширину 240 px, внутренние отступы 16 px. Используйте
overflow-y: autoдля скролла внутри меню, если пунктов много. - Гамбургер-меню: уместно для мобильной версии, но не для десктопа — тест с 50 пользователями показал снижение кликов на 30% по сравнению с видимым меню.
- Липкое меню (sticky): фиксируйте только при скролле вниз на 100–150 пикселей. Полная фиксация сверху крадёт вертикальное пространство.
- Мегаменю: для крупных интернет-магазинов (50+ категорий). Оптимальная высота — 60% от высоты экрана, иначе пользователь теряет фокус.
Сколько пунктов должно быть в главном меню?
Золотое правило UX — 5–7 пунктов, не более. Исследования 2026 года показывают, что при 8+ пунктах время принятия решения увеличивается на 40%. Если у вас больше, объедините похожие разделы в выпадающий список. Используйте aria-label для каждой группы, чтобы улучшить доступность. Например, для сайта курсов можно сделать пункты: «Курсы», «Блог», «О нас», «FAQ», «Контакты». Если есть раздел «Все курсы» — вынесите его в подменю с иконкой стрелки.
Почему выпадающее меню на чистом CSS — это риск?
Многие уроки предлагают делать выпадашки на :hover с CSS. Это грубая ошибка: на сенсорных экранах hover не работает. К тому же, если меню исчезает при потере курсора, пользователь не успевает кликнуть. Правильный вариант — JavaScript с focus и blur событиями. Пример: при клике на пункт «Услуги» добавляйте класс is-active, а при клике вне меню — удаляйте. Используйте event.stopPropagation(), чтобы внутренние клики не закрывали меню. Для анимации применяйте max-height с transition: 0.3s, а не display: none, иначе пропадёт плавность.
Как правильно организовать хлебные крошки?
Хлебные крошки (breadcrumbs) — это не просто красивые стрелки. Они должны быть кликабельными для всех уровней, кроме последнего. Разделители — только «>» или «/», без эмодзи (они отвлекают). Располагайте крошки сразу под шапкой, выше заголовка страницы. Используйте микроразметку Schema.org (тип BreadcrumbList) — это даёт сниппет в выдаче Google, увеличивая CTR на 15–20%. Пример структуры: Главная > Веб-разработка > Создание меню. Последний пункт — не ссылка, просто текст.
6 распространённых ошибок в навигации, которые убивают конверсию
- Слишком много уровней: больше 2 вложенных уровней снижают кликабельность на 50%. Все подпункты — максимум второй уровень.
- Схожие названия пунктов: «Наши услуги» и «Услуги» — путаница. Называйте конкретно: «Курсы веб-дизайна» и «Курсы разработки».
- Нет выделения активного пункта: у пользователя должно быть визуальное подтверждение, где он находится. Используйте класс
current-pageс жирным шрифтом и подчёркиванием. - Игнорирование мобильной версии: меню, которое на десктопе идеально, может занимать 100% экрана на телефоне. Делайте два отдельных компонента — для десктопа и для мобильных.
- Отсутствие поиска: даже идеальное меню не спасёт, если пользователь ищет что-то конкретное. Поисковая строка в шапке — обязательна, минимальная ширина 200 px.
- Тёмные паттерны: скрывать пункт «Контакты» в подвал — плохой тон. Доступ к основной информации — один клик.
Как тестировать навигацию без реальных пользователей?
Используйте инструмент Treejack (бесплатный план на 10 заданий). Вы загружаете структуру меню, а программа показывает, сколько участников находит нужный раздел за 3 клика. Оптимальный показатель — 80% успешного поиска. Если меньше — переделывайте иерархию. Второй метод — карточная сортировка (OptimalSort). Пусть 5 знакомых разложат ваши пункты по категориям — это выявит логику пользователя. Третий способ — запись кликов с помощью Hotjar (тепловая карта кликов по меню). Если на пункт «О компании» кликают 2% — вероятно, он не нужен в главном меню.
Какой шрифт и размер использовать для пунктов меню?
Минимальный читаемый размер на десктопе — 16 px, на мобильных — 14 px. Шрифт — без засечек (Arial, Roboto, Inter). Межбуквенный интервал (letter-spacing) для заглавных пунктов — 0.5 px, для обычных — 0. При выборе цвета контраст текста к фону должен быть не ниже 4.5:1 по WCAG AA. Используйте онлайн-утилиту WebAIM Contrast Checker. Пример плохой практики: серый текст (#999) на белом фоне — контраст около 2.8:1, нечитаемо.
Почему анимация появления меню должна быть быстрее 300 мс?
Исследования показывают: если выпадающее меню открывается дольше 300 мс, пользователь воспринимает это как задержку. Идеальное значение — 200–250 мс. Используйте transition: transform 0.2s ease для появления. Не анимируйте left или top — это вызывает перерасчёт геометрии. Вместо этого меняйте transform: translateY(10px) на translateY(0). Для мобильного меню используйте transform: translateX(-100%) для выезда слева.
Как интегрировать поиск в меню без потери юзабилити?
Не прячьте поиск в иконку-лупу — это добавляет лишний клик. Лучшая практика: поле ввода длиной 10–12 символов, с кнопкой «Найти». На мобильных — иконка-лупа, которая при нажатии раскрывает поле во всю ширину. Используйте атрибут inputmode="search" для мобильной клавиатуры. Обязательно добавьте плейсхолдер: «Например, HTML-курс» — это подскажет пользователю, что искать. В результатах поиска показывайте 5–7 первых совпадений с подсветкой ключевых слов (используйте mark в HTML).
Как сделать меню доступным для людей с ограниченными возможностями?
Добавьте role="navigation" для навигационного блока, aria-label для меню. Каждый пункт должен быть фокусируемым через Tab. Для выпадающих списков используйте aria-expanded (true/false). Скринридеры должны слышать описание: например, aria-label="Открыть список курсов". Убедитесь, что все элементы меню имеют достаточный размер для тач-устройств: минимальная область клика 44×44 пикселя (рекомендация WCAG 2.2). Протестируйте меню с клавиатуры: все пункты должны быть доступны без мыши.
Добавлено: 23.04.2026
