Вебсправочник
Справочник JavaScript

classList: переключение оформления

Как добавлять и удалять CSS-классы и синхронизировать видимое состояние с доступностью.

Основная идея

ClassList управляет классами элемента без ручного разбора строки className. Add добавляет класс, remove удаляет, toggle переключает. Это удобно, когда поведение написано на JavaScript, а внешний вид остаётся в CSS.

Второй аргумент toggle позволяет задать состояние явно. Для раскрывающей кнопки не ограничивайтесь классом: обновляйте aria-expanded и доступность связанной области. Визуальное изменение должно соответствовать тому, что видят вспомогательные технологии.

Пример JavaScript

const button = document.querySelector("[data-toggle]");
const panel = document.querySelector("[data-panel]");
button?.addEventListener("click", () => {
  if (!panel) return;
  const open = button.getAttribute("aria-expanded") !== "true";
  button.setAttribute("aria-expanded", String(open));
  panel.hidden = !open;
  button.classList.toggle("is-open", open);
});

Пример ожидает начальное aria-expanded=»false» у кнопки и hidden у панели. После клика оба состояния меняются согласованно.

Частая ошибка

Не скрывайте панель только прозрачностью: её элементы могут остаться в порядке клавиатурного фокуса.

Самостоятельная проверка

Создайте кнопку и скрытую область с соответствующими data-атрибутами. Проверьте два последовательных открытия и закрытия.

Код здесь показан для изучения. Встроенная песочница сайта выполняет только HTML/CSS. JavaScript проверяйте в собственном учебном файле или консоли своего тестового проекта; не вставляйте непонятный код на страницах с личными данными.

Следующие темы: события, поиск элементов.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.