초점 관리 및 불활성
많은 보조 기술은 키보드 내비게이션을 사용하여 화면 컨텐츠를 이해하고 조작합니다. 탐색하는 한 가지 방법은 탭 키를 통한 것입니다. 마우스 나 트랙 패드를 사용하지 않고 양식의 개별 입력으로 빠르게 이동하는 데 사용하는 경우 이미이 탐색 방법에 익숙 할 수 있습니다.
탭 키는 DOM에 나타나는 순서대로 대화식 요소로 이동합니다. 이것이 소스 코드의 순서가 디자인의 시각적 계층 구조와 매우 중요한 이유 중 하나입니다.
탭 키 작업을 수행 할 수있는 대화식 요소 목록 :
- 앵커 포인트 (HREF 속성이 존재하는 경우),
-
<button></button>
,,, -
<input>
and<textarea></textarea>
(带有相应的标签), -
<select></select>
, -
<details></details>
和,
-
<audio></audio>
和<video></video>
(当存在控件时), -
<object></object>
(取决于其使用方法), - Firefox中任何具有滚动溢出的元素,
- 任何应用了
contenteditable
属性的元素,以及 - 任何应用了
tabindex
属性的元素(稍后将详细介绍此属性)。
交互式元素获得焦点的情况:
- 通过Tab键导航到它,
- 点击它,
- 或者通过JavaScript中的
element.focus()
以编程方式设置焦点。
焦点类似于将鼠标光标悬停在元素上,因为它标识了您想要激活的内容。这也是为什么视觉上明显的焦点样式如此重要的原因。
焦点管理
焦点管理是协调哪些元素可以接收和不能接收焦点事件的做法。这是前端开发中比较棘手的事情之一,但对于使网站和Web应用程序更易访问至关重要。
良好的焦点管理实践
99%的情况下,您都想保留焦点顺序。 我再怎么强调这一点也不为过。
如果您使用<button></button>
元素作为按钮,使用<a></a>
元素作为链接,使用<input>
元素作为用户输入等等,那么焦点将无需任何额外努力就能正常工作。
在极少数情况下,您可能希望将焦点应用于焦点顺序之外的内容,或者使通常无法接收焦点事件的内容可聚焦。以下是一些关于如何在易于访问且直观的导航方式中进行操作的指导原则:
✅ 操作:了解tabindex属性
tabindex
允许元素获得焦点。它接受一个整数作为值。它的行为取决于使用的整数。
❌ 不要:将tabindex="0"应用于不需要它的内容
可以接收键盘焦点的交互式元素(例如<button></button>
元素)不需要应用tabindex
属性。
此外,您不需要在非交互式元素上声明tabindex
来确保辅助技术可以读取它们(事实上,如果不存在角色和可访问名称,则这是一个WCAG失败)。这样做实际上会为使用辅助技术的人创建一个意外且难以导航的体验——他们有其他预期的方式来阅读此内容。
✅ 操作:使用tabindex="-1"进行JavaScript聚焦
tabindex="-1"
用于使用JavaScript创建可访问的交互式窗口小部件。
声明tabindex="-1"
将使元素可以通过JavaScript或点击/点击获得焦点。但是,它不会允许通过Tab键导航到它。
❌ 不要:使用正整数作为tabindex值
这是一个严重的反模式。使用正整数将覆盖预期的Tab键顺序,并为尝试导航内容的人创建一个混乱和令人迷失方向的体验。
一个这样的实例已经够糟糕了。多个声明简直就是一场噩梦。说真的:不要这样做。
❌ 不要:创建手动焦点顺序
交互式元素仅仅因为被使用就可以被Tab键操作。您不需要在每个交互式元素上设置一系列具有递增值的tabindex
属性,以按照您认为用户应该使用的顺序进行设置。您将让DOM中元素的顺序为您完成此操作。
焦点捕获
有时您可能需要阻止某些内容获得焦点。一个很好的例子是焦点捕获,它是有条件地将焦点事件限制到元素及其子元素的行为。
焦点捕获不要与键盘陷阱(有时称为焦点陷阱)混淆。键盘陷阱是指通过键盘导航的人由于编写不良的逻辑而无法从窗口小部件或组件中逃脱的情况。
您将使用焦点捕获的实际示例是模态框:
为什么这很重要?
将焦点保持在模态框内传达了它的边界,并有助于告知什么是模态内容,什么不是模态内容——这类似于视力正常的人如何看到模态框“浮动”在其他网站或Web应用程序内容之上。如果以下情况,则此信息非常重要:
- 您视力低下或没有视力,并依赖屏幕阅读器公告来帮助传达交互模式的转变。
- 您视力低下并且使用了放大显示器,在模态框边界之外聚焦可能会令人困惑和迷失方向。
- 您仅通过键盘导航,否则可能会从模态框中跳出,并在尝试返回模态框时迷失在底层页面或视图中。
如何操作?
可靠地管理焦点是一件复杂的事情。您需要使用JavaScript来:
- 确定当前页面或视图上所有可聚焦元素的容器元素。
- 识别被捕获内容的边界,包括第一个和最后一个可聚焦项目。
- 删除被识别为可聚焦但不在该被捕获内容集内的任何内容的交互性和可发现性。
- 将焦点移动到被捕获的内容中。
- 侦听表示关闭被捕获内容的事件(保存、取消、关闭/按下Esc键等)。
- 当相关事件触发时,关闭被捕获的内容区域。
- 恢复先前删除的交互性。
- 将焦点移回触发被捕获内容的交互式元素。
为什么我们要这样做?
我不会撒谎:所有这些都很棘手且耗时。但是,焦点管理和合理、可用的焦点顺序是Web内容无障碍指南。它非常重要,以至于它被认为是关于可用性的国际、具有法律约束力的标准的一部分。
可Tab键操作和可发现性
删除可发现性和交互性都有一些技巧。
屏幕阅读器有一种交互模式,允许它们通过虚拟光标浏览页面或视图。虚拟光标还允许使用屏幕阅读器的人发现页面的非交互式部分(标题、列表等)。与使用Tab键和焦点样式不同,虚拟光标仅适用于使用屏幕阅读器的人。
当您管理焦点时,您可能希望限制虚拟光标发现内容的能力。对于我们的模态框示例,这意味着防止用户在阅读模态框时意外“跳出”模态框的边界。
可发现性可以通过明智地应用aria-hidden="true"
来抑制。但是,交互性则更为细致。
使用inert 属性
inert
属性是一个全局HTML属性,它将使删除然后恢复交互式元素的可发现性和可聚焦能力变得容易得多。以下是如何使用它的示例:
<div aria-labelledby="modal-title" role="dialog" tabindex="-1"> <div role="document"> <h2 id="Save-changes">Save changes?</h2> <p>The changes you have made will be lost if you do not save them.</p> <p> Save Discard </p> </div> </div> <main inert=""> </main>
由于其许多辅助技术支持问题,我故意避免在模态框中使用<dialog></dialog>
元素。
在保存确认模态框后,在<main></main>
元素上声明了inert
。这意味着<main></main>
内包含的所有内容都不能接收焦点或被点击。
焦点仅限于模态框内。当模态框被关闭时,可以从<main></main>
元素中删除inert
。这种处理焦点捕获的方式比现有技术要容易得多。
记住: 关闭事件可能是由我们模态框示例中的两个按钮引起的,也可能是通过按下键盘上的Esc键引起的。有些模态框还允许您点击模态框区域之外来关闭。
inert 的支持
最新版本的Edge、Chrome和Opera在启用实验性Web平台功能时都支持inert
。Firefox的支持也很快就会到来!唯一例外的是台式机和移动版的Safari。
我很想看到Apple实现对inert
的原生支持。虽然可以使用polyfill,但它对所有主要的屏幕阅读器都有非微不足道的支持问题。不太好!
此外,我想提请注意inert
polyfill项目自述文件中的以下说明:
与原生的
inert
实现相比,polyfill在性能方面将非常昂贵,因为它需要大量的树遍历。
树遍历意味着polyfill中的JavaScript可能需要大量的计算能力才能工作,因此会减慢最终用户的体验。对于低功耗设备(例如预算型Android智能手机、旧款笔记本电脑)和执行计算密集型任务(例如运行多个Electron应用程序)的更强大的设备,这可能意味着会发生冻结或崩溃。原生浏览器支持意味着这种行为对设备的负担要小得多,因为它可以访问JavaScript无法访问的浏览器部分。
Safari
就我个人而言,我对Apple缺乏对inert
的支持感到失望。虽然我理解向浏览器添加新功能是一项极其复杂和困难的工作,但inert
似乎是一个Apple应该更早支持的功能。
macOS和iOS历来对辅助功能有很好的支持,并且辅助技术友好的功能是其营销活动中的常见部分。支持inert
似乎是Apple使命的自然延伸,因为该功能本身将极大地简化可访问的Web体验的开发。
令人沮丧的是,Apple对正在开发的内容以及我们何时可以普遍预期看到它也守口如瓶。因此,inert
的未来是一个悬而未决的问题。
不再包含Igalia 部分
总结
管理焦点需要一些技巧和谨慎,但这非常值得去做。inert
属性可以在很大程度上简化这一过程。
像inert
这样的技术也代表了Web平台最强大的优势之一:能够铺设紧急行为的牛车道并将其编纂成简单有效的东西。
进一步阅读
- 使用tabindex控制焦点(A11ycasts,第04集)
- 使用tabindex属性(Paciello集团)
- 使用JavaScript在元素中捕获焦点(Hidde de Vries)
感谢Adrian Roselli和Sarah Higley的反馈。
위 내용은 초점 관리 및 불활성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Svelte Transition API는 맞춤형 전환을 포함하여 문서를 입력하거나 떠날 때 구성 요소를 애니메이션하는 방법을 제공합니다.

웹 사이트의 컨텐츠 프레젠테이션을 설계하는 데 얼마나 많은 시간을 소비합니까? 새 블로그 게시물을 작성하거나 새 페이지를 만들 때

최근 Bitcoin의 가격이 20k 달러가 넘는 USD가 최근에 등반되면서 최근 30k를 끊었으므로 Ethereum을 만드는 데 깊이 다이빙을 할 가치가 있다고 생각했습니다.

개발자로서 어느 단계에 있든, 우리가 완료 한 작업은 크든 작든, 개인적이고 전문적인 성장에 큰 영향을 미칩니다.

그것은#039; VUE 팀에게 그것을 끝내는 것을 축하합니다. 나는 그것이 막대한 노력과 오랜 시간이라는 것을 알고 있습니다. 모든 새로운 문서도 있습니다.

NPM 명령은 서버 시작 또는 컴파일 코드와 같은 것들에 대한 일회성 또는 지속적으로 실행되는 프로세스로 다양한 작업을 실행합니다.
