Атрибут open тега <details>
Описание
Атрибут open определяет, должен ли элемент <details> быть изначально раскрытым при загрузке страницы. Это булевый атрибут - его наличие (без значения) делает блок раскрытым, отсутствие - скрытым.
<details open>
<summary>Подробности акции</summary>
<p>Специальное предложение действительно до 31 декабря 2023 года.</p>
</details>
<details>
<summary>Условия использования</summary>
<p>Этот контент будет скрыт при загрузке.</p>
</details>
Особенности работы:
| Состояние | Описание | Как задать |
|---|---|---|
| Раскрыто | Контент виден сразу | <details open> или <details open="open"> |
| Скрыто | Контент скрыт (по умолчанию) | <details> (без атрибута) |
Динамическое управление:
<details id="dynamic-details">
<summary>Нажмите для управления</summary>
<p>Этот блок можно программно раскрывать/закрывать.</p>
</details>
<button onclick="toggleDetails()">Переключить состояние</button>
<script>
function toggleDetails() {
const details = document.getElementById('dynamic-details');
details.open = !details.open; // Инвертируем текущее состояние
}
</script>
Рекомендации по использованию:
- Используйте для важной информации, которая должна быть сразу видна
- Не злоупотребляйте - слишком много раскрытых элементов перегружают страницу
- Сочетайте с JavaScript для сохранения состояния между перезагрузками
- Для аккордеонов убедитесь, что только один элемент раскрыт одновременно
Пример с сохранением состояния:
<details id="remember-state">
<summary>Настройки пользователя</summary>
<form>
<!-- Форма с настройками -->
</form>
</details>
<script>
// Восстановление состояния при загрузке
document.getElementById('remember-state').open =
localStorage.getItem('detailsState') === 'open';
// Сохранение состояния при изменении
document.getElementById('remember-state').addEventListener('toggle', function() {
localStorage.setItem('detailsState', this.open ? 'open' : 'closed');
});
</script>
Стилизация раскрытого состояния:
<style>
details[open] {
background-color: #f8f9fa;
border-left: 3px solid #4CAF50;
padding: 10px;
}
details[open] summary {
color: #4CAF50;
font-weight: bold;
}
</style>
<details open>
<summary>Стилизованный раскрытый блок</summary>
<p>Этот блок имеет особое оформление когда раскрыт.</p>
</details>
Ограничения и совместимость:
- Поддерживается во всех современных браузерах
- В IE и Edge до версии 79 требует полифила
- Состояние не сохраняется при обновлении страницы (без JavaScript)
- Не влияет на SEO - скрытый контент индексируется
Примечание: Атрибут open особенно полезен для часто используемых элементов или важной информации, которая должна быть сразу видна. Для сложных интерфейсов рассмотрите использование JavaScript-библиотек для аккордеонов с дополнительными функциями (анимация, сохранение состояния и др.).