찾다
웹 프론트엔드CSS 튜토리얼초점 관리 및 불활성

초점 관리 및 불활성

많은 보조 기술은 키보드 내비게이션을 사용하여 화면 컨텐츠를 이해하고 조작합니다. 탐색하는 한 가지 방법은 키를 통한 것입니다. 마우스 나 트랙 패드를 사용하지 않고 양식의 개별 입력으로 빠르게 이동하는 데 사용하는 경우 이미이 탐색 방법에 익숙 할 수 있습니다.

키는 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来:

  1. 确定当前页面或视图上所有可聚焦元素的容器元素。
  2. 识别被捕获内容的边界,包括第一个和最后一个可聚焦项目。
  3. 删除被识别为可聚焦但不在该被捕获内容集内的任何内容的交互性和可发现性。
  4. 将焦点移动到被捕获的内容中。
  5. 侦听表示关闭被捕获内容的事件(保存、取消、关闭/按下Esc键等)。
  6. 当相关事件触发时,关闭被捕获的内容区域。
  7. 恢复先前删除的交互性。
  8. 将焦点移回触发被捕获内容的交互式元素。

为什么我们要这样做?

我不会撒谎:所有这些都很棘手且耗时。但是,焦点管理和合理、可用的焦点顺序是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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
'Podcast 구독'링크는 어디에서 링크해야합니까?'Podcast 구독'링크는 어디에서 링크해야합니까?Apr 16, 2025 pm 12:04 PM

한동안 iTunes는 팟 캐스팅에서 큰 개 였으므로 "Podcast 구독"을 링크 한 경우 다음과 같습니다.

브라우저 엔진 다양성브라우저 엔진 다양성Apr 16, 2025 pm 12:02 PM

우리는 그들이 2013 년에 크롬에 갔을 때 오페라를 잃었습니다. 올해 초 크롬 (Chrome)에 갔을 때 Edge와 같은 거래를했습니다. Mike Taylor는 이러한 변화를 "감소 적으로"불렀습니다

웹 공유에 대한 UX 고려 사항웹 공유에 대한 UX 고려 사항Apr 16, 2025 am 11:59 AM

Trashy Clickbait 사이트에서 가장 8 월 출판물에 이르기까지 공유 버튼은 웹 전체에서 오랫동안 어디서 유비쿼터스되었습니다. 그럼에도 불구하고 이것들은 논쟁의 여지가 있습니다

Weekly Platform News : Apple은 웹 구성 요소, 프로그레시브 HTML 렌더링, 자체 호스팅 중요한 리소스를 배포합니다.Weekly Platform News : Apple은 웹 구성 요소, 프로그레시브 HTML 렌더링, 자체 호스팅 중요한 리소스를 배포합니다.Apr 16, 2025 am 11:55 AM

이번 주에 Apple은 웹 구성 요소, Instagram이 Insta-Loading 스크립트의 방법 및 자조적 자체 호스팅 리소스를 생각하기위한 음식을 웹 구성 요소에 들어갑니다.

Git Pathspecs 및 사용 방법Git Pathspecs 및 사용 방법Apr 16, 2025 am 11:53 AM

GIT 명령의 문서를 살펴 보았을 때 많은 사람들이 옵션이 있음을 알았습니다. 나는 처음에 이것이 단지 a라고 생각했다

제품 이미지를위한 컬러 피커제품 이미지를위한 컬러 피커Apr 16, 2025 am 11:49 AM

어려운 문제가 어려운 것 같지 않습니다. 우리는 종종 수천 가지 색상의 제품 샷을 가지고 있으므로 우리는 다음과 같이 뒤집을 수 있습니다. 우리도 아닙니다

Dark Mode는 React 및 Temprovider로 전환합니다Dark Mode는 React 및 Temprovider로 전환합니다Apr 16, 2025 am 11:46 AM

웹 사이트에 어두운 모드 옵션이있을 때 좋아합니다. 다크 모드는 웹 페이지를 더 쉽게 읽을 수있게하고 눈이 더 편안하다고 느끼도록 도와줍니다. 많은 웹 사이트를 포함합니다

HTML 대화 요소와 함께 일부 실습HTML 대화 요소와 함께 일부 실습Apr 16, 2025 am 11:33 AM

이것은 처음으로 HTML 요소를보고 있습니다. 나는 그것을 잠시 동안 알고 있었지만 아직 스핀을 위해 그것을 가져 갔다. 그것은 꽤 시원하고 있습니다

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경