概述原生 `dialog` 元素提供模态与非模态对话能力,结合内置的焦点捕获与返回值机制,可替代繁琐的自定义弹层与表单确认流程。关键参数与概念`HTMLDialogElement.show()/showModal()/close(returnValue)`: 打开非/模态对话框并关闭时返回值。表单协作:`formmethod="dialog"` 可在对话框内部提交后自动关闭并设置返回值。可访问性:模态时应限制背景交互、管理焦点与键盘导航(Esc 关闭)。实践示例<button id="open">删除项目</button> <dialog id="confirm"> <form method="dialog"> <p>确定要删除该项目吗?此操作不可撤销。</p> <menu> <button value="cancel">取消</button> <button value="ok">确认删除</button> </menu> </form> </dialog> <script> const dlg = document.getElementById('confirm') document.getElementById('open').addEventListener('click', () => dlg.showModal()) dlg.addEventListener('close', () => { if (dlg.returnValue === 'ok') { // 执行删除 console.log('删除确认') } }) </script> 焦点与样式打开后将焦点移入对话框的第一个可聚焦元素;关闭后焦点回到触发源。通过 `::backdrop` 自定义遮罩样式:dialog::backdrop { background: rgba(0,0,0,.25); backdrop-filter: blur(2px); } 验证方法兼容性:Chromium/Firefox/Safari 高版本验证;不支持时回退到自定义弹层(`position: fixed` + 焦点管理)。可访问性:检查 Tab 环路、Esc 关闭、屏幕阅读器读出标题与内容。返回值:验证 `close(returnValue)` 与 `formmethod="dialog"` 的协同行为。注意事项模态对话应避免阻塞长计算;对话内容精简、操作明确。避免嵌套多个模态导致焦点混乱;统一关闭策略与外部点击处理。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
1.498841s