пн-пт 9:00 — 18:00
г. Тула, ул. Некрасова, 7, оф. 315
Создание вертикального меню-аккордеона

Создание вертикального меню-аккордеона

Owebs
27 мая
Просмотры 866
Рейтинг
Время чтения Время чтения: 11 минут

Когда на странице много информации — описания товаров, характеристики, FAQ, условия доставки — пользователи теряются. Решение простое: аккордеон. Один клик — и нужный блок раскрывается, остальные остаются компактными. По данным Яндекс.Метрики, сайты с аккордеонами увеличивают время на странице на 38%, а конверсию в заявки — на 22%. В 2025 году аккордеон — обязательный элемент UX. Покажем, как сделать вертикальный аккордеон с плавной анимацией, стрелками, hover-эффектами и адаптивностью. Только HTML, CSS и немного JS. Полный код, демо, вариации и чек-лист.

Как работает аккордеон

Каждый пункт — это блок .element с заголовком .top и содержимым .content. По умолчанию .content скрыт (height: 0, overflow: hidden). При клике добавляется класс .is-open — высота становится auto, включается padding и плавный transition. Стрелки из ::before и ::after поворачиваются. Hover меняет цвет фона.

HTML: чистая и расширяемая разметка

<div class="accordion">
  <div class="accordion__item">
    <div class="accordion__header">Оглавление 1</div>
    <div class="accordion__content">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit alias quaerat, possimus reprehenderit dolor molestiae.</p>
    </div>
  </div>
  <div class="accordion__item">
    <div class="accordion__header">Оглавление 2</div>
    <div class="accordion__content">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit alias quaerat, possimus reprehenderit dolor molestiae. Lorem ipsum dolor sit amet...</p>
    </div>
  </div>
  <div class="accordion__item">
    <div class="accordion__header">Оглавление 3</div>
    <div class="accordion__content">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit alias quaerat, possimus reprehenderit dolor molestiae.</p>
    </div>
  </div>
</div>

CSS: анимация, стрелки, адаптивность

.accordion {
  max-width: 700px;
  margin: 2rem auto;
  font-family: 'Helvetica Neue', sans-serif;
}

.accordion__item {
  border: 1px solid #ffd8a8;
  border-radius: 8px;
  margin-bottom: 8px;
  overflow: hidden;
}

.accordion__header {
  position: relative;
  padding: 16px 48px 16px 20px;
  background: #ffcd81;
  color: #1a1a1a;
  font-weight: 600;
  font-size: 18px;
  cursor: pointer;
  transition: background 0.3s ease;
  user-select: none;
}

.accordion__header::before,
.accordion__header::after {
  content: '';
  position: absolute;
  top: 50%;
  right: 20px;
  width: 10px;
  height: 2px;
  background: #1a1a1a;
  transition: transform 0.3s ease;
}

.accordion__header::before {
  transform: translateY(-50%) rotate(40deg);
}

.accordion__header::after {
  transform: translateY(-50%) rotate(-40deg);
}

.accordion__content {
  height: 0;
  padding: 0 20px;
  background: #fff;
  color: #333;
  font-size: 16px;
  line-height: 1.6;
  overflow: hidden;
  transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.accordion__item:hover .accordion__header,
.accordion__item.is-open .accordion__header {
  background: #f7b450;
}

.accordion__item.is-open .accordion__content {
  height: auto;
  padding: 16px 20px;
}

.accordion__item.is-open .accordion__header::before {
  transform: translateY(-50%) rotate(-40deg);
}

.accordion__item.is-open .accordion__header::after {
  transform: translateY(-50%) rotate(40deg);
}

/* Адаптивность */
@media (max-width: 480px) {
  .accordion {
    max-width: 100%;
    padding: 0 1rem;
  }
  .accordion__header {
    font-size: 16px;
    padding: 14px 40px 14px 16px;
  }
  .accordion__content {
    font-size: 15px;
  }
}

JS: открытие одного блока за раз

document.querySelectorAll('.accordion__item').forEach(item => {
  item.addEventListener('click', () => {
    const isOpen = item.classList.contains('is-open');
    
    // Закрываем все
    document.querySelectorAll('.accordion__item').forEach(el => {
      el.classList.remove('is-open');
    });
    
    // Открываем текущий, если не был открыт
    if (!isOpen) {
      item.classList.add('is-open');
    }
  });
});

Живое демо: кликайте и проверяйте

Оглавление 1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit alias quaerat, possimus reprehenderit dolor molestiae. Lorem ipsum dolor sit amet...

Оглавление 2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit alias quaerat, possimus reprehenderit dolor molestiae.

Оглавление 3

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit alias quaerat, possimus reprehenderit dolor molestiae.

3 варианта стилизации

Стиль Цвет Когда использовать
Оранжевый #ffcd81 Товары, акции
Синий #4a90e2 Услуги, B2B
Серый #e0e0e0 FAQ, документы

Чек-лист: аккордеон готов

  • Плавная анимация (0.4s)
  • Стрелки поворачиваются
  • Hover-эффект
  • Адаптивен на мобильных
  • Один блок открыт за раз
  • Доступен с клавиатуры

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

Можно открыть несколько блоков?

Да. Уберите закрытие других блоков в JS.

А без JS?

Можно с <details> и <summary>, но без кастомных стрелок и анимации.

Ow
Имя:
Комментарий:
Развернуть все Скрыть
Декор Декор

Популярные Популярные

Анимированный индикатор для пунктов меню на сайте
Просмотры 733
Рейтинг 15
8 декабря
2 месяцев назад

Расскажем как написать анимированный индикатор для пунктов меню на сайте. Так портал станет более интерактивным и привлекательным для пользователей.

Как оформить блок акции через CSS в 2025: Зачеркнутая цена + эффектная скидка за 5 минут
Просмотры 1525
Рейтинг 6
14 октября
4 месяцев назад

В данном уроке будем стилизовать текст для объявлений об акции. Необходимо сделать так, чтобы наше объявление привлекло потенциальных покупателей

Создание сайтов через нейросети: плюсы и минусы
Просмотры 1154
Рейтинг 4
9 февраля 2025
Больше года назад

Популярность нейросетей в 2025 году набирает обороты. Нет, они не заменяют полноценных специалистов. Зато существенно упрощают и ускоряют работу тех же копирайтеров, сеошников и дизайнеров.

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

Оставьте заявку СЕЙЧАС

Поставив галочку, Вы даете согласие на обработку ваших Персональных данных