Атрибут hidden тега <dialog>
Описание
Атрибут hidden скрывает диалоговое окно <dialog> от пользователя. В отличие от стандартного поведения <dialog>, который управляется методами show()/close(), атрибут hidden полностью удаляет элемент из доступности и потока документа.
| Метод | Видимость | Доступность | DOM |
|---|---|---|---|
hidden |
Скрыт | Удалён из дерева доступности | Остаётся в DOM |
Обычный <dialog> |
Скрыт | Остаётся в дереве доступности | Остаётся в DOM |
<dialog hidden id="hiddenDialog">
Этот диалог полностью скрыт и недоступен
</dialog>
<dialog id="normalDialog">
Этот диалог можно открыть методами show()/showModal()
</dialog>
<button onclick="toggleHiddenDialog()">Переключить hidden</button>
<script>
function toggleHiddenDialog() {
const dialog = document.getElementById('hiddenDialog');
dialog.hidden = !dialog.hidden;
console.log('Dialog hidden:', dialog.hidden);
}
</script>
Когда использовать:
- Для временного скрытия диалога без возможности взаимодействия
- Когда нужно полностью удалить диалог из дерева доступности
- Для сложных сценариев управления видимостью
- В сочетании с CSS-анимациями появления/исчезновения
Совместное использование с ARIA:
<dialog hidden
aria-hidden="true"
aria-labelledby="dialogTitle"
id="accessibleDialog">
<h3 id="dialogTitle">Скрытый диалог</h3>
<p>Этот диалог правильно скрыт для скринридеров</p>
</dialog>
<button onclick="showAccessibleDialog()">Показать</button>
<script>
function showAccessibleDialog() {
const dialog = document.getElementById('accessibleDialog');
dialog.hidden = false;
dialog.setAttribute('aria-hidden', 'false');
// Дополнительная логика для фокуса и управления
}
</script>
Особенности работы:
- Эквивалентен CSS-правилу
display: none - Не влияет на методы
show()/showModal() - Не предотвращает программное взаимодействие с элементами диалога
- Может использоваться вместе с CSS-переходами
Динамическое управление:
<dialog id="dynamicDialog">
<h3>Управляемый диалог</h3>
<button onclick="hideDialog()">Скрыть полностью</button>
<button onclick="this.closest('dialog').close()">Обычное закрытие</button>
</dialog>
<script>
function hideDialog() {
const dialog = document.getElementById('dynamicDialog');
dialog.hidden = true;
// Дополнительные действия при скрытии
}
</script>
Рекомендации:
- Используйте для диалогов, которые должны быть полностью выключены
- Сочетайте с
aria-hiddenдля лучшей доступности - Избегайте для часто используемых диалогов - лучше методы show()/close()
- Учитывайте, что содержимое остаётся в DOM
Примечание: Хотя атрибут hidden может быть полезен в специфических сценариях, для большинства случаев работы с диалоговыми окнами предпочтительнее использовать стандартные методы управления видимостью через show(), showModal() и close().