Как создать выпадающее меню с помощью Css и javascript быстро и просто

Как создать простое выпадающее меню с помощью css и javascript

Немного истории: от HTML-таблиц до интерактивных меню

Как создать простое выпадающее меню с помощью CSS и JavaScript - иллюстрация

В начале 2000-х веб-дизайн был довольно примитивным. Меню часто строились на базе HTML-таблиц, а интерактивность достигалась при помощи громоздких JavaScript-фреймворков или даже Flash. С появлением CSS2 и, в частности, псевдокласса `:hover`, стало возможно создавать простейшие выпадающие меню без единой строчки скрипта. А уже с развитием ECMAScript и популяризацией адаптивного дизайна, создание меню JavaScript получило вторую жизнь — лёгкие, анимированные, кроссбраузерные решения стали нормой.

Сегодня, зная основы CSS и немного JavaScript для начинающих, можно собрать стильное и функциональное меню буквально за полчаса. Но давайте не ограничиваться банальностями — заглянем чуть глубже.

Базовые принципы: на чём держится выпадающее меню

Простое меню на веб-сайте всегда состоит из трёх слоёв:

- HTML-разметка — скелет меню, обычно список (`

    ` и `

  • `)
    - CSS-стилизация — отвечает за внешний вид, анимацию и отображение подменю
    - JavaScript — добавляет интерактивность, особенно полезен для мобильных устройств

    Главная идея CSS меню с подменю — использовать `position: absolute` для скрытия вложенных элементов, и `:hover` или `classList.toggle()` для их отображения. Это просто, но часто не гибко. Поэтому имеет смысл комбинировать стили и скрипты.

    Пример: базовая реализация CSS + JavaScript

    Как создать простое выпадающее меню с помощью CSS и JavaScript - иллюстрация

    Представим, что нам нужно создать горизонтальное меню с выпадающим списком при наведении:

    ```html

    ```

    Теперь добавим стили:

    ```css
    .main-menu ul {
    list-style: none;
    padding: 0;
    display: flex;
    }

    .main-menu li {
    position: relative;
    padding: 10px 20px;
    cursor: pointer;
    }

    .submenu {
    position: absolute;
    top: 100%;
    left: 0;
    display: none;
    background: #f0f0f0;
    min-width: 150px;
    }

    .has-submenu:hover .submenu {
    display: block;
    }
    ```

    И немного JavaScript для мобильной поддержки:

    ```javascript
    document.querySelectorAll('.has-submenu').forEach(item => {
    item.addEventListener('click', function(e) {
    e.preventDefault();
    this.querySelector('.submenu').classList.toggle('visible');
    });
    });
    ```

    Дополнительно в CSS:

    ```css
    .submenu.visible {
    display: block;
    }
    ```

    Вот и всё — у нас получилось элементарное выпадающее меню CSS с подменю и небольшой порцией JavaScript для кликов. Это особенно полезно для сенсорных экранов, где `:hover` не работает.

    Нестандартные решения: немного магии

    Как создать простое выпадающее меню с помощью CSS и JavaScript - иллюстрация

    Если стандартные подходы вам наскучили, попробуйте эти фишки:

    - Использование `clip-path` и `transform`: можно создать анимированное появление подменю, например, в виде «вылетающего» блока.
    - CSS Grid вместо Flexbox: гибче управляет позиционированием подменю, особенно если в нём несколько колонок.
    - Data-атрибуты + делегирование событий: вместо того чтобы вешать обработчик на каждый элемент, можно использовать делегирование на уровне всего меню.

    Пример делегирования:

    ```javascript
    document.querySelector('.main-menu').addEventListener('click', function(e) {
    if (e.target.closest('.has-submenu')) {
    const submenu = e.target.closest('.has-submenu').querySelector('.submenu');
    submenu.classList.toggle('visible');
    }
    });
    ```

    Такой подход упрощает создание меню JavaScript и делает код более масштабируемым.

    Частые заблуждения: не дайте себя обмануть

    Несмотря на кажущуюся простоту, вокруг темы меню ходит много мифов:

    - «Всё можно сделать только на CSS» — да, но на практике без JavaScript вы потеряете поддержку на мобильных устройствах.
    - «JavaScript замедляет сайт» — только если он плохо написан. Хорошо оптимизированный скрипт на пару строк никакой скорости не убавит.
    - «Выпадающие меню устарели» — это неправда. Они нужны, пока есть иерархия контента. Главное — адаптировать их под UX.

    Вот несколько советов, которых стоит придерживаться:

    - Не прячьте важные действия в подменю.
    - Делайте анимации короткими, до 300 мс.
    - Обеспечьте доступность: добавьте `aria-haspopup`, `aria-expanded` и фокусировку.

    Вывод: меню — это не просто список ссылок

    Выпадающее меню CSS и JavaScript — это не только про навигацию, но и про опыт пользователя. Даже простое меню на веб-сайте должно быть удобным, отзывчивым и адаптивным. Используйте возможности CSS для анимации и позиционирования, а JavaScript — для интерактивности. И не бойтесь экспериментировать: нестандартные решения сделают ваш сайт запоминающимся.

    А если вы только начинаете, не переживайте — создание меню JavaScript может быть отличным стартом в веб-разработке.

Scroll to Top