Навигационные меню: горизонтальное, вертикальное, выпадающее, адаптивное
Основы навигационных меню в CSS 🧭
Навигационные меню — это "дорожные знаки" вашего сайта. Они помогают пользователям перемещаться между страницами и находить нужную информацию. Рассмотрим четыре основных типа меню, которые должен знать каждый фронтенд-разработчик.
Горизонтальное меню ↔️
Самый распространённый тип, который обычно размещается в шапке сайта. Создаётся через display: flex или display: inline-block.
.nav-horizontal {
display: flex;
gap: 20px;
background: #2c3e50;
padding: 15px;
}
.nav-horizontal a {
color: white;
text-decoration: none;
font-weight: bold;
transition: color 0.3s;
}
.nav-horizontal a:hover {
color: #3498db;
}
💡 Совет: Используйте
gapвместоmarginдля равномерных отступов между пунктами — это современный и чистый способ.
Вертикальное меню ↕️
Идеально для сайдбаров или мобильных меню. Основное отличие — направление flex-контейнера.
.nav-vertical {
display: flex;
flex-direction: column;
width: 200px;
background: #f8f9fa;
padding: 10px 0;
}
.nav-vertical a {
padding: 10px 15px;
color: #333;
border-bottom: 1px solid #ddd;
}
.nav-vertical a:last-child {
border-bottom: none;
}
🔥 Лайфхак: Добавьте
position: sticky; top: 0;к вертикальному меню, чтобы оно оставалось на экране при прокрутке.
Выпадающее меню 🎯
Создадим простое выпадающее меню с помощью псевдокласса :hover. Для более сложных сценариев лучше использовать JavaScript.
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background: white;
min-width: 160px;
box-shadow: 0 8px 16px rgba(0,0,0,0.1);
z-index: 1;
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown-content a {
display: block;
padding: 12px 16px;
color: #333;
}
.dropdown-content a:hover {
background: #f1f1f1;
}
⚠️ Важно: Всегда проверяйте доступность выпадающих меню для пользователей с ограниченными возможностями.
Адаптивное меню 📱
Современный must-have! Используем медиа-запросы для переключения между горизонтальным и мобильным (часто "бургер") меню.
/* Десктопная версия */
.nav-main {
display: flex;
justify-content: space-between;
}
/* Мобильная версия */
@media (max-width: 768px) {
.nav-main {
flex-direction: column;
display: none; /* Скрываем по умолчанию */
}
/* Стили для бургер-кнопки */
.menu-toggle {
display: block;
background: #333;
color: white;
padding: 15px;
cursor: pointer;
}
/* Показываем меню при активации */
.nav-main.active {
display: flex;
}
}
🌟 Профессиональный подход: Для сложных адаптивных меню рассмотрите CSS Grid или библиотеки типа Bootstrap.
Лучшие практики для всех типов меню 🏆
- Доступность: Используйте семантические теги
<nav>и ARIA-атрибуты - Консистентность: Соблюдайте единый стиль для всех пунктов
- Интерактивность: Добавляйте визуальный feedback при наведении
- Производительность: Оптимизируйте для быстрой загрузки
- Тестирование: Проверяйте на разных устройствах и браузерах
/* Пример доступного меню */
nav[aria-label="Main"] {
font-family: 'Arial', sans-serif;
}
nav ul li:focus-within {
outline: 2px solid #3498db;
}
Готовый пример: Комбинированное меню
Создадим меню, которое:
- Горизонтальное на десктопе
- Превращается в "бургер" на мобильных
- Имеет выпадающие подменю
/* Основные стили */
.nav-combo {
display: flex;
justify-content: space-between;
background: #34495e;
padding: 0 20px;
}
/* Выпадающее подменю */
.has-dropdown {
position: relative;
}
.submenu {
position: absolute;
display: none;
background: white;
width: 200px;
}
.has-dropdown:hover .submenu {
display: block;
}
/* Адаптивность */
@media (max-width: 768px) {
.nav-combo {
flex-direction: column;
display: none;
}
.nav-combo.active {
display: flex;
}
.submenu {
position: static;
width: auto;
}
}
🎨 Совет от Данилы Бежина: "Всегда проектируйте меню с учётом контента — оно должно решать задачи пользователей, а не просто красиво выглядеть."
Теперь у вас есть все инструменты для создания профессиональных навигационных меню. Экспериментируйте, тестируйте разные подходы и помните — хорошая навигация делает сайт удобным, а значит, успешным!