Простое адаптивное меню без скрытых пунктов
Делаем меню, которое переносится на узком экране и остаётся доступным без JavaScript.
Задача и ограничения
Для небольшого сайта из четырёх-пяти разделов не всегда нужен выпадающий мобильный интерфейс. Пункты можно оставить видимыми и разрешить перенос. Так навигация работает сразу, даже если скрипты не загрузились.
Пошаговое решение
Используйте nav с понятным именем и список ссылок. На списке включите display: flex, flex-wrap: wrap и gap. У ссылок добавьте достаточные внутренние отступы, чтобы по ним было удобно попасть пальцем.
Текущую страницу обозначьте aria-current=»page» и заметным оформлением. Не используйте только цвет: можно добавить подчёркивание или более выраженную рамку. Сохраните отдельное видимое состояние фокуса.
Код компонента
<style>
nav ul { display: flex; flex-wrap: wrap; gap: 8px; padding: 0; list-style: none; }
nav a { display: block; padding: 10px 14px; color: #11694e; border-radius: 6px; }
nav a[aria-current] { background: #eaf4ee; text-decoration: underline; }
nav a:focus-visible { outline: 3px solid #b87912; }
</style>
<nav aria-label="Главное меню"><ul><li><a href="#" aria-current="page">Обзор</a></li><li><a href="#html">HTML</a></li><li><a href="#css">CSS</a></li><li><a href="#practice">Практика</a></li></ul></nav>
<p id="html">HTML</p><p id="css">CSS</p><p id="practice">Практика</p>
Что может пойти не так
Не уменьшайте шрифт до нечитаемого размера, чтобы все пункты помещались в одну строку. Перенос часто лучше решает задачу, чем запрет переноса и скрытое переполнение.
Как проверить результат
- Проверьте меню на узкой ширине.
- Перейдите по всем пунктам через Tab и Enter.
- Увеличьте названия пунктов и убедитесь, что ничего не скрыто.
Разберите также: навигация HTML, перенос Flexbox.
Попробуйте сами
РЕЗУЛЬТАТ · ИЗОЛИРОВАННЫЙ ПРЕДПРОСМОТР
Измените код и нажмите «Запустить». JavaScript и внешние запросы отключены.
Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.