Разработка и дизайн

Настройка выпадающего меню

Аркадий ЗверевАркадий Зверев, генеральный директор «Кометы»··7 мин чтения

Введение в работу с выпадающим меню

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

Грамотное меню помогает быстрее находить разделы, удерживает внимание и делает навигацию понятной на любой странице. Для SEO это тоже важно, потому что Google учитывает удобство работы, структуру страницы и качество размещения ссылок в верхней части сайта. Хорошо настроенное выпадающее меню помогает быстро открыть нужный раздел, сокращает число лишних кликов и делает верхнюю navbar понятной и на компьютере, и на телефоне. В этой статье разберём основы создания dropdown menu, HTML-структуру, CSS-оформление, работу button и поведение при hover.

Основы создания выпадающего меню

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

Затем набросайте схему: где будет кнопка button, какой элемент li открывает вложенный список ul, какую ширину получает блок и как меню ведёт себя при смене размера экрана. Например, для корпоративного сайта удобно сначала собрать карту разделов, а уже потом переносить её в HTML-структуру: div-контейнер, navbar, список ul, пункты li и раскрывающийся dropdown-блок. Такой порядок экономит время и снижает число правок.

На этом этапе полезно сразу определить тип меню, набор пунктов и то, как будет выглядеть панель на разных устройствах. Часто схему сначала собирают в Excel или даже в Word, чтобы вытащить повторяющиеся разделы, контакты, верхние ссылки и возможные сценарии просмотра. На этом этапе важно решить, будет ли меню простым, многоуровневым или адаптивным. Такой выбор влияет на дальнейшее использование CSS, JavaScript, hover-сценариев и позиционирования элементов.

Схема выпадающего меню с dropdown-триггером, выпадающим блоком, подменю и эффектом наведения
Схема показывает структуру dropdown menu: триггер, выпадающий блок с absolute-позиционированием, подменю и активные состояния при наведении.

Такой подход помогает сохранить логику структуры, проверить шкалу приоритетов и заранее понять, какие инструменты нужны для дальнейшей работы. Даже если черновой пример выглядит простым, он помогает начать оформление без хаоса и избежать резких изменений в готовом интерфейсе.

HTML-структура для раскрывающегося меню

  • Задайте контейнер <nav> для верхней навигации.
  • Внутри соберите <ul> и пункты списка.
  • Для раскрытия вложите второй <ul> в нужный пункт.
HTML
<nav id="top-menu">
  <ul>
    <li>
      <button type="button">Услуги</button>
      <ul>
        <li><a href="/prodvizhenie/">SEO</a></li>
        <li><a href="/razrabotka/dizayn/">Дизайн</a></li>
      </ul>
    </li>
  </ul>
</nav>

Базовая структура обычно содержит nav, div, ul и li. Один пункт списка становится родительским элементом, внутри которого размещается кнопка button или ссылка, а ниже — вложенный dropdown-блок с дополнительными пунктами. Такая HTML-основа помогает аккуратно создать структуру меню: ul отвечает за иерархию, li формирует пункты списка, href ведёт в нужные разделы, а class и id упрощают оформление, позиционирование и подключение JavaScript. Семантическая разметка делает контент понятнее для поисковых систем и улучшает доступность страницы.

Если хотите усилить структуру, можно добавить внешний div вокруг навигации, отдельный заголовок блока и служебные элементы для подсказок, иконок или подписи к кнопке меню. В больших меню часто выносят контакты, панель быстрого доступа или вкладки с дополнительной информацией.

CSS-стилизация раскрывающегося меню

После HTML-разметки задайте базовые CSS-свойства для внешнего вида, position, display и поведения элементов. Родительскому элементу li обычно назначают position: relative, чтобы вложенный блок dropdown-content или список ul открывался точно по координате left: 0 относительно кнопки или ссылки.

Сам раскрывающийся слой получает position: absolute, display: none, min-width или width, а также background-color, padding, margin: 0 и z-index, чтобы dropdown не прятался под другие элементы.

CSS
.navbar .dropdown { position: relative; }

.dropdown-content {
  position: absolute;
  left: 0;
  display: none;
  min-width: 220px;
  margin: 0;
  padding: 8px 0;
  background-color: #fff;
  z-index: 1000;
}

.dropdown:hover .dropdown-content { display: block; }

.dropdown-content a {
  display: block;
  padding: 10px 16px;
  text-align: left;
  text-decoration: none;
}

На практике CSS для dropdown menu почти всегда строится вокруг нескольких ключевых правил: display: none для скрытого состояния, display: block для показа, position: absolute для выпадающего слоя и hover для сценария наведения. Если в шапке используется navbar, важно сразу проверить ширину блока, z-index и поведение рядом с соседними элементами. Так проще контролировать отображение, избежать конфликтов слоёв и сделать аккуратный dropdown при наведении. За счёт этого меню выглядит чище и не теряется на фоне других элементов интерфейса.

Для более точной стилизации можно добавить border: 1px solid rgba(0,0,0,0.08);, настроить background, height активных строк и font-size для текста в списке. Если нужно выровнять внутренний контент, иногда помогает text-align: center для отдельного блока, хотя ссылки второго уровня чаще оставляют по левому краю.

Такой подход делает чище, а изменения заметнее при наведении. Кроме того, удобно заранее продумать возможность быстрого выбора темы оформления, чтобы позже без лишней переделки изменить цвет, border и top-отступы под новый стиль сайта.

JavaScript для раскрывающегося меню

Если меню открывается только при hover, на смартфонах и планшетах такой сценарий работает не всегда удобно, поэтому JavaScript нужен для клика по button, переключения class и управления состоянием dropdown. Поэтому лучше добавить скрипт, который по клику на button переключает активное состояние, меняет значение aria-expanded и закрывает список, когда пользователь нажимает в другое место страницы.

Дополнительно можно повесить закрытие на клавишу Escape. Такой подход делает навигацию стабильнее и помогает использовать дополнительные состояния без перегрузки интерфейса.

JavaScript
const trigger = document.querySelector('.dropbtn');
const panel = document.querySelector('.dropdown-content');

trigger.addEventListener('click', () => {
  const isOpen = panel.classList.toggle('open');
  trigger.setAttribute('aria-expanded', String(isOpen));
});

document.addEventListener('click', (event) => {
  if (!event.target.closest('.dropdown')) {
    panel.classList.remove('open');
    trigger.setAttribute('aria-expanded', 'false');
  }
});

Дополнительно через JavaScript можно закрывать по клику вне блока, по нажатию Escape и при повторном нажатии на button. Это особенно полезно, если верхняя navbar содержит несколько выпадающих элементов и вложенные пункты списка. Добавьте в стили класс .open, установите для него видимое состояние и при желании настройте закрытие при прокрутке body.

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

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

Часто задаваемые вопросы

Как создать меню с помощью CSS?

Сначала соберите HTML-основу через nav, div, ul и li, затем создайте вложенный список для dropdown и задайте стили через CSS. Затем оформите родительский пункт через position: relative, а раскрывающийся блок через position: absolute, чтобы меню открывалось рядом с кнопкой или ссылкой.

Скрытое состояние задайте как display: none, а видимое включайте отдельным классом или через :hover. Если нужен более аккуратный вид, добавьте border, мягкую тень через rgba и читабельный background для списка.

Как настроить CSS отображение меню при наведении?

Для этого обычно применяют селектор :hover к родительскому элементу li или к кнопке button, а вложенному блоку задают display: block. Когда курсор попадает в активную область, скрытый блок получает видимое состояние.

Чтобы меню не дёргалось, заранее задайте отступы, границы, фон и удобную зону наведения. Дополнительно проверьте height строки, font-size текста и расстояние до верхней границы блока.

Какие параметры CSS можно настроить в верхнем меню?

Чаще всего меняют ширину блока, display, position, выравнивание, цвет текста, background-color, расстояние между пунктами списка, стиль кнопки и поведение dropdown при hover или клике. Дополнительно настраивают button, navbar, скорость анимации и поведение на телефонах.

При необходимости верхнее menu можно дополнить JavaScript, чтобы раскрытие работало по клику, а не только при наведении. Также можно изменить element внутри списка, добавить вкладки, блок поддержки, ссылки на контакты и другие инструменты навигации.

Услуги по теме статьи

Если задачу из статьи удобнее отдать подрядчику — вот что мы делаем по этой теме.

  • Доработка сайта

    Новые блоки, формы, фильтры, интеграции и исправление ошибок на действующем сайте.

  • Продвижение сайта

    Вывод в ТОП Яндекса и Google, заявки из поиска и отчёт по заявкам каждый месяц.

  • Дизайн сайта

    Дизайн по прототипу под задачи бизнеса: первый экран, блоки, баннеры.

Флагманский продукт

Сайт под продвижение

Сайт с нуля, сразу сделанный под поисковые системы, и месяц продвижения после запуска. Один договор, одна команда, одна цена.

150 000 ₽сайт и первый месяц продвижения

Что входит

  • Разбор ниши и структура по запросам: разделы, посадочные, смета построчно — 2 недели
  • Прототип, дизайн и сборка на 1С-Битрикс или WordPress, до 20 страниц — 2 недели
  • Техподготовка и запуск: мета-теги, скорость, robots и sitemap, Метрика — 1–2 дня
  • Месяц SEO-продвижения после запуска с отчётом по индексации и заявкам

Услуга по теме

Доработка сайта

Новые блоки, формы, фильтры, интеграции и исправление ошибок на действующем сайте.

Похожие статьи

Ещё три разбора по близкой теме из блога «Кометы».

Рассчитать стоимостьПозвонить