标准答案

  1. dialog 是 HTML 原生对话框元素,可以表示模态或非模态弹窗。
  2. showModal() 会打开模态弹窗,并让弹窗外内容处于不可交互状态。
  3. dialog 自带一些焦点和 ESC 关闭行为,但不能替代完整的交互设计。
  4. 使用时要提供清晰标题、关闭按钮、可访问名称、合理的初始焦点和关闭后的焦点恢复。
  5. 还要评估浏览器兼容、滚动锁定、动画、表单提交和框架组件库封装方式。

题目解析

这题不是只问“有没有原生弹窗”,而是问原生能力能覆盖多少,项目里还要补什么。

可访问性重点是用户能知道弹窗是什么、能用键盘操作、能关闭,并能回到打开前的位置。

代码示例

dialog 可以通过 showModal 打开,通过 close 关闭。

HTML
<button id="open">打开设置</button>
<dialog id="settings" aria-labelledby="settings-title">
  <h2 id="settings-title">设置</h2>
  <p>这里是设置内容。</p>
  <button id="close">关闭</button>
</dialog>

<script>
  settings.showModal()
  close.addEventListener('click', () => settings.close())
</script>

常见误区

  • 认为用了 dialog 就不需要标题、关闭按钮和焦点管理。
  • 只支持鼠标点击关闭,键盘用户无法顺利退出。
  • 没有处理关闭后焦点回到触发按钮,导致键盘浏览位置丢失。

作者信息