Dialog closedBy

Содержание

HTML-элемент диалог может быть модальным и немодальным.

Из коробки модальный диалог умеет закрываться по нажатию на Escape. Немодальный не умеет.

Также и тот, и другой не могут закрываться по клику вне диалога.

И этой фичи очень не хватало, так как кастомные реализации модалок это умеют, пользователи к этому привыкли. И если разработчики использовали нативный dialog, то приходилось эту штуку реализовывать руками через JS.

Неудобно и бесяче.

Однако HTML спека не стоит на месте — теперь у нас есть атрибут closedby, который решает эту проблему.

closedBy

Атрибут меняет дефолтные способы закрытия диалога. Он имеет три значения:

any

<dialog closedby="any">

Диалог может быть закрыт:

  • по клику вне диалога
  • нажатием клавиши Escape на десктопе
  • нажатием на кнопку назад или свайп назад на мобильных девайсах
  • нажатием на кнопку назад на игровых контроллерах
  • применением закрытия через ассистивные технологии
  • программно: dialog.close() / command="close"

closerequest

<dialog closedby="closerequest">

Диалог может быть закрыт:

  • нажатием клавиши Escape на десктопе
  • нажатием на кнопку назад или свайп назад на мобильных девайсах
  • нажатием на кнопку назад на игровых контроллерах
  • применением закрытия через ассистивные технологии
  • программно: dialog.close() / command="close"

none

<dialog closedby="none">

Диалог может быть закрыт:

  • программно: dialog.close() / command="close"

Демки

Прикольно, что этот атрибут работает одинаково и для модальных диалогов, и для немодальных.

Собрал демки на CodePen, чтобы можно было потыкать: модальный и немодальный.

Атрибут пока доступен только в Chrome 134+.

Почитать более подробно про него можно в спеке: тут и тут.