Глиф Учебники

Как сделать меню на сайте

Справочник · HTML и CSS · 1 минута чтения

Меню — это список ссылок внутри <nav>. Разметка:

HTML
<nav class="menu">
  <ul>
    <li><a href="index.html" aria-current="page">Главная</a></li>
    <li><a href="recipes.html">Рецепты</a></li>
    <li><a href="schedule.html">Расписание</a></li>
    <li><a href="contacts.html">Контакты</a></li>
  </ul>
</nav>

Стили для горизонтального меню:

CSS
.menu ul {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.menu a {
  display: block;
  padding: 10px 16px;
  color: #222;
  text-decoration: none;
  border-radius: 6px;
}

.menu a:hover {
  background-color: #eee;
}

.menu a[aria-current="page"] {
  background-color: #222;
  color: #fff;
}

Что здесь происходит:

Вертикальное меню

Для боковой колонки поменяйте направление:

CSS
.menu ul {
  display: flex;
  flex-direction: column;
  gap: 4px;
  list-style: none;
  margin: 0;
  padding: 0;
}

Логотип слева, меню справа

CSS
.site-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
}

Здесь .site-header — это <header>, в котором лежат логотип и <nav class="menu">.

Меню для телефона

Если пунктов немного, хватает flex-wrap: wrap — меню само перенесётся в две строки. Когда пунктов много, меню прячут под кнопку. Без JavaScript это делается тегом <details>: щелчок по <summary> показывает и прячет содержимое.

HTML
<details class="menu-mobile">
  <summary>Меню</summary>
  <ul>
    <li><a href="index.html">Главная</a></li>
    <li><a href="recipes.html">Рецепты</a></li>
    <li><a href="contacts.html">Контакты</a></li>
  </ul>
</details>

Привычную кнопку с тремя полосками («бургер»), анимацию и закрытие при щелчке мимо меню делают на JavaScript.

Подводные камни