模态必须有键盘可达的关闭方式
别名: Escape 关闭 · 键盘关对话框 · 模态退出键 · Escape to close
概念解释
只用指针才能关掉的对话框,把键盘和开关用户关在里面。键盘可达的关闭(keyboard-reachable dismiss)要求至少有一条不依赖鼠标的离开路径:通常是 Escape,再加上焦点能走到的关闭或取消按钮。它不管焦点有没有被关在对话框里——那是捕获;它管的是「在里面的人怎么出来」。点遮罩关闭是指针通道,不能拿来顶替这一条。
机制
键盘用户的世界里没有「点外面」。没有 Escape、关闭按钮又不在 Tab 顺序里,离开只能靠猜快捷键或刷新页面,模态从阻断变成囚禁。Escape 的约定是取消而不是提交:它应走与「取消」相同的路径,丢弃未提交的输入,而不是偷偷保存。破坏性或无法撤销的决策可以不让 Escape 直接生效,但必须让取消按钮可被键盘走到,并在按钮上写清后果。只画一个右上角的叉、却不放进焦点顺序,是把关闭做成了装饰。移动平台没有 Escape 键时,这条约束改由系统返回手势和可聚焦的关闭按钮承担,不能因为没有那一键就省略离开路径。
怎么研究
禁止使用指针,只靠键盘打开并关闭对话框。比较:有 Escape、只有可聚焦取消、两者都无。记录成功离开率、误提交率(本想关却按了回车)、以及求助于刷新的次数。自变量:Escape 是否绑定取消、默认按钮是否为提交、关闭控件是否可聚焦。因变量:离开成功、意外提交。默认按钮是提交且无 Escape 时,误提交应最高。
边界
进行到不可中断的步骤(正在付款、正在写入)时,关闭本身非法,键盘关闭应无效并说明为什么现在不能走。这不是省略路径,是路径暂时拒绝。自定义绘图或游戏画布把按键用于内容,Escape 可能已被占用,需要在对话框出现期间改绑,或提供明确的取消按钮作为唯一键盘出口。屏幕阅读器用户依赖按钮名称,无名的叉即使可聚焦也不算可达。
怎么落地
- 把 Escape 绑到取消路径;对话框打开期间不要让 Escape 落到下层去关闭别的东西。
- 提供可聚焦、有名称的取消或关闭按钮,不要只放不可聚焦的叉。
- 回车触发的默认按钮指向安全动作,避免「想关却提交」。
- 验证:拔掉鼠标或关掉触控板,打开对话框再离开。做不到,键盘关闭就不存在。