用途:针对运行时行为依赖焦点、背景交互、滚动状态、关闭方式或嵌套堆叠的浮层,明确其生命周期契约并使其可回归测试,而非泛化的无障碍审查。
主要能力:分类浮层模态性(模态对话框、非模态弹出层、菜单、抽屉、命令面板、提示、嵌套浮层、移动端面板);追踪打开序列(触发、焦点移动、背景非交互、按需滚动锁定);追踪关闭与卸载序列(ESC/背景点击/操作关闭、焦点返回、恢复原有 body 样式、解绑监听、避免动画延迟导致陈旧陷阱);检查 aria-hidden 与 inert 时序(不得对仍持有焦点的后代隐藏);处理嵌套堆叠与滚动行为(保存并恢复 overflow/padding、滚动条补偿、卸载与路由变更清理);用窄范围测试锁定(Tab/Shift+Tab、Escape、背景点击、焦点恢复、body overflow 清理、嵌套关闭顺序)。
使用方式:先用 rg 探针检索 aria-hidden、inert、role="dialog"、focus-trap、overflow 隐藏、keydown/Escape、backdrop 等代码线索,再检查真实运行时路径;对原生 dialog.showModal()、popover 等原语可先评估是否已覆盖契约。参考 overlay-contracts 获取官方参考与证据框架。
适用场景:评审或实现模态、对话框、抽屉、面板、弹出层、菜单、命令面板等浮层行为。
限制:非模态控件不应强制模态陷阱;装饰性 aria-hidden 图标不构成浮层焦点缺陷;Radix、Headless UI、Element Plus、Melt UI、focus-trap 等库可能已处理部分契约,需先检查配置与渲染行为。定价、平台支持、官方文档等暂未提供。