Часто бывает, что нужно сделать раскрывающийся “аккордеон” список. Раньше для это требовалось писать JavaScript. Теперь в HTML5 появился тег details
, который предоставляет возможность делать раскрывающийся блок без написания JS.
Весь контент оборачивается в тег details
, а заголовок при нажатии на который будет раскрываться контент пишется в тег summary
. Сам же контент идет после заголовка в любом удобном для вас виде.
<details>
<summary>Заголовок</summary>
<p>Раскрывающийся контент</p>
</details>
Заголовок
Раскрывающийся контент
Дефолтный дизайн выглядит очень просто, но и изменяется он без проблем. Стилизуется все как обычно, только для скрытия стандартной стрелки используется свойством list-style
.
summary {
list-style: none;
}
Заголовок
Раскрывающийся контент
Если необходимо чтобы блок был изначально раскрытым, то в этом случает тегу details
добавляется атрибут open
.
<details open>
<summary>Заголовок</summary>
<p>Раскрывающийся контент</p>
</details>
Заголовок
Раскрывающийся контент
Чтобы анимировать открытие и закрытие аккордиона, нужно добавить открытому тегу details
padding
снизу и тегу summary
margin-bottom
. Более хорошую плавность анимации можно достичь играясь с размерами padding
, еще как вариант на этот padding
, можно сместить контент отрицательным margin
.
А что если необходимо при открытии одного списка скрывать все остальные? То просто добавьте одинаковый атрибут name
для каждого details