accordion: шаблон в целом, состоящий из следующих частей
panel: каждая панель в аккордеоне - это виджет раскрытия деталей
header: заголовок, который отображает интерактивную сводку содержимого панели
heading: заголовок, который находится внутри элемента и отражает суть панели
auto-collapse: свойство аккордеона, при котором автоматически сворачиваются открытые панели при открытии новой панели
Лучшая практика
Каждый заголовок (header) находится в естественном индексе табуляции. Этот естественный tabindex нельзя удалять или изменять.
По умолчанию все панели могут быть в открытом, развернутом состоянии.
При желании аккордеон может быть ограничен отображением только одной панели содержимого за раз (т.е. открытие панели закроет любую другую открытую панель). Это называется автоматически сворачивающимся аккордеоном.
Интерактивный дизайн
Управление клавиатурой
Нажатие клавиши TABдолжно перемещать фокус клавиатуры с одного заголовка на другой. Он также будет перемещать фокус через любые интерактивные элементы внутри открытых панелей.
Точно так же нажатие клавиш SHIFT-TAB перемещает фокус назад по заголовкам и содержимому интерактивной панели.
Нажатие клавиши ПРОБЕЛили ВВОДв заголовке с фокусом клавиатуры должно открывать панель. Для автоматического сворачивания аккордеонов любая другая открытая панель должна закрываться.
Screenreader
Виртуальный курсор должен иметь возможность перемещаться от одного заголовка к другому.
С виртуальным курсором на заголовке, он должен иметь возможность открывать панель с помощью имитации события щелчка. Для аккордеонов с автоматическим сворачиванием любая другая открытая панель должна закрываться, но об этом не следует объявлять.
Код
В шаблоне «аккордеон» активно используется тег "details" HTML. Старые браузеры, включая IE11 и Edge, изначально не поддерживают тег сведений, поэтому требуют полифилла.
При использовании details нет возможности анимировать открытие
HTML-элемент<details> используется для раскрытия скрытой (дополнительной) информации.
Виджет раскрытия обычно представлен на экране с использованием небольшого треугольника, который поворачивается, чтобы показать состояние открытия / закрытия, с меткой рядом с треугольником. Если первый дочерний элемент элемента <details> является <summary>, содержимое элемента <summary> используется в качестве метки для виджета раскрытия.
Обратите внимание, что в некоторых браузерах роль неявного списка удаляется, когда применяется CSS list-style-type: none, поэтому мы применили role = list в нашей разметке, чтобы гарантировать явную роль.