Атрибут open тега <dialog>


Описание

Атрибут open указывает, что диалоговое окно <dialog> должно быть видимым и активно взаимодействовать с пользователем. Это булевый атрибут — его наличие делает диалог видимым, а отсутствие скрывает.

Пример использования:
<dialog open> <h3>Важное уведомление</h3> <p>Этот диалог отображается сразу при загрузке страницы</p> <button onclick="this.closest('dialog').close()">Закрыть</button> </dialog> <dialog id="myDialog"> <p>Этот диалог изначально скрыт</p> <button onclick="this.closest('dialog').close()">Закрыть</button> </dialog>

Особенности работы:

Состояние Как задать Доступность
Открытый <dialog open> Фокус автоматически перемещается в диалог
Закрытый <dialog> (без атрибута) Скрыт из DOM-дерева доступности

Программное управление:

<button onclick="document.getElementById('myDialog').showModal()"> Показать модальный диалог </button> <dialog id="myDialog"> <h3>Модальное окно</h3> <p>Это модальный диалог с фоном затемнения</p> <button onclick="this.closest('dialog').close()">Закрыть</button> </dialog> <script> // Альтернативные методы: // dialog.show() - не модальный диалог // dialog.close() - закрытие // dialog.returnValue - доступ к возвращаемому значению </script>

Разница между show() и showModal():

  • show() - простой диалог, можно взаимодействовать с остальной страницей
  • showModal() - модальное окно с затемнением фона и захватом фокуса
  • Оба метода автоматически добавляют атрибут open

Стилизация диалога:

<style> dialog { width: 80%; max-width: 500px; border: none; border-radius: 8px; box-shadow: 0 0 20px rgba(0,0,0,0.3); } dialog::backdrop { background-color: rgba(0,0,0,0.5); } dialog[open] { animation: slide-in 0.3s ease-out; } @keyframes slide-in { from { transform: translateY(30px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } </style> <dialog id="styledDialog"> <p>Красиво оформленный диалог</p> <button onclick="this.closest('dialog').close()">Закрыть</button> </dialog>

Лучшие практики:

  • Используйте showModal() для важных действий, требующих внимания
  • Всегда предоставляйте способ закрыть диалог (кнопку или Esc)
  • Для сложных диалогов используйте ARIA-атрибуты
  • Тестируйте работу с клавиатуры и скринридерами
  • Избегайте вложенных диалогов

Ограничения и совместимость:

  • Полная поддержка в современных браузерах
  • В старых версиях может потребоваться полифил
  • Диалог позиционируется по центру экрана автоматически
  • Не используйте атрибут open для модальных окон (только через JavaScript)

Примечание: Хотя атрибут open позволяет показывать диалог без JavaScript, на практике лучше управлять диалогами программно. Это дает больше контроля над анимациями, обработкой событий и доступностью.