聚焦
聚焦元素
当对话框打开时,对话框容器接收焦点。 这就是为什么它有一个 tabindex="-1"
属性很重要——这样它就可以通过 JavaScript 以编程方式集中。
除非对话框中有一个具有 autofocus
HTML 属性的表单控件(根据规范)。 在这种情况下,当对话框打开时,该元素将接收焦点,而不是对话框容器。 焦点陷阱(下面提到)不受此影响。
焦点陷阱
焦点被“捕获”在对话框中:在聚焦最后一个元素时按 TAB
会将焦点移动到第一个元素,在聚焦第一个元素时按 SHIFT
+ TAB
会将焦点移动到最后一个元素。 请注意,对话框容器不属于该焦点陷阱,因为它具有 tabindex="-1"
。
INFO
值得一提的是,如上所述,查询可聚焦元素以处理第一个和最后一个元素的方式并不完全安全。 例如,它不会将没有任何子 <summary>
的 <object>
元素、<embed>
元素和 <details>
元素视为可聚焦的,而技术上应该如此。 当第一个或最后一个可聚焦元素时,它还显示与 <iframe>
元素的一些不一致。
焦点恢复
当对话框关闭时,之前在打开对话框之前获得焦点的元素会再次获得焦点——通常是与之交互的对话框开启器。
高级集成
如果聚焦元素位于具有 data-a11y-dialog-ignore-focus-trap
属性(带有 1,而不是 L)的元素内,则脚本不会将焦点移回到对话框中。 这是与 popper.js 等其他库进行高级集成的逃生口,其中某些内容从技术上讲位于对话框本身之外(例如类似于嵌套对话框)。
DANGER
请谨慎使用此逃生口,因为这可能会严重损害屏幕阅读器用户的体验。