原生 dialog 对话框体系与可访问性实践概述`<dialog>` 提供模态与非模态对话能力,支持 `::backdrop` 遮罩与焦点管理,是构建可访问对话框的首选。核心概念与参数`show()` 与 `showModal()` 打开对话框;`close()` 关闭。事件:`cancel`、`close`;焦点返回触发点。特性检测:`'HTMLDialogElement' in window`。实践示例<button onclick="dlg.showModal()">打开</button> <dialog id="dlg"> <form method="dialog"> <p>确认操作?</p> <button value="cancel">取消</button> <button value="ok">确定</button> </form> </dialog> <style> dialog::backdrop { background: rgba(0,0,0,.25); } dialog { border: none; border-radius: 12px; padding: 16px; } }</style> <script> const dlg = document.getElementById('dlg'); if (!('HTMLDialogElement' in window)) { // 降级:使用 Popover 或绝对定位容器 console.warn('dialog not supported, fallback to popover/absolute'); } </script> 验证方法A11y:Esc 关闭、焦点在对话框内循环、关闭后返回触发按钮。一致性:与 Popover/菜单统一遮罩与层级策略。键盘可达:Tab/Shift+Tab 行为符合预期。注意事项避免通过 `display: none` 强隐导致焦点丢失;使用原生方法。在移动端考虑视口安全区与滚动阻止策略。区分模态/非模态的交互语义与使用场景。

发表评论 取消回复