Skip to content

聚焦

聚焦元素

当对话框打开时,对话框容器接收焦点。 这就是为什么它有一个 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

请谨慎使用此逃生口,因为这可能会严重损害屏幕阅读器用户的体验。

商务合作,E-mail:xnfaganer#163.com,微信:faganer,QQ:309946202