中文

一份关于如何使用悬停和聚焦状态实现无障碍工具提示的综合指南,确保为包括残障人士在内的所有用户提供可用性。

工具提示的实现:悬停与聚焦状态下的无障碍信息

工具提示(Tooltip)是一种小型的、上下文相关的帮助信息,当用户将鼠标指针悬停在某个元素上或聚焦于该元素时出现。它们可以提供额外信息、阐明元素用途或提供功能使用提示。然而,如果实现不当,工具提示很容易成为无障碍性的噩梦。本指南概述了创建对包括残障人士在内的所有人都可用的工具提示的最佳实践。

为何工具提示的无障碍性至关重要

无障碍性不仅关乎合规,更关乎为每个人创造更好的用户体验。当工具提示不具备无障碍性时,可能会将依赖屏幕阅读器、键盘导航或语音输入等辅助技术的用户排除在外。请思考以下场景:

通过遵循无障碍性最佳实践,我们可以确保工具提示是增强而非损害所有用户的体验。

无障碍工具提示的关键原则

以下原则对于创建无障碍工具提示至关重要:

  1. 提供替代访问方式:确保工具提示可通过悬停和键盘聚焦两种方式访问。
  2. 使用 ARIA 属性:使用 ARIA(Accessible Rich Internet Applications)属性来向辅助技术正确识别和描述工具提示。
  3. 管理焦点:控制工具提示显示和隐藏时焦点的去向。
  4. 确保足够的对比度:在工具提示文本和背景之间提供足够的颜色对比度。
  5. 留出足够的时间:给用户足够的时间来阅读工具提示内容。
  6. 使其可关闭:提供一种明确的方式来关闭工具提示。
  7. 避免过度使用:谨慎使用工具提示,仅在必要时使用。

实现技术

1. 使用悬停和聚焦

无障碍工具提示最关键的一点是确保它们对鼠标和键盘用户都可用。这意味着工具提示应该在元素悬停和接收焦点时都能出现。

HTML:

<a href="#" aria-describedby="tooltip-example">示例链接</a>
<div id="tooltip-example" role="tooltip" style="display: none;">这是一个示例工具提示。</div>

CSS:

a:hover + div[role="tooltip"],
a:focus + div[role="tooltip"] {
  display: block;
  position: absolute;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
  padding: 5px;
  z-index: 1000; /* 确保工具提示在顶层 */
}

解释:

JavaScript(高级控制 - 可选):

虽然 CSS 可以处理简单的显示/隐藏,但 JavaScript 允许进行更强大的控制,尤其是在工具提示是动态生成或需要更复杂行为时。

const link = document.querySelector('a[aria-describedby="tooltip-example"]');
const tooltip = document.getElementById('tooltip-example');

link.addEventListener('focus', () => {
  tooltip.style.display = 'block';
});

link.addEventListener('blur', () => {
  tooltip.style.display = 'none';
});

link.addEventListener('mouseover', () => {
  tooltip.style.display = 'block';
});

link.addEventListener('mouseout', () => {
  tooltip.style.display = 'none';
});

2. 使用 ARIA 属性

ARIA 属性对于向辅助技术提供语义信息至关重要。以下是关键属性的分解:

示例:

<button aria-describedby="help-tooltip">提交</button>
<div id="help-tooltip" role="tooltip" aria-hidden="true">点击此处提交表单。</div>

JavaScript(用于 aria-hidden):

const button = document.querySelector('button[aria-describedby="help-tooltip"]');
const tooltip = document.getElementById('help-tooltip');

button.addEventListener('focus', () => {
  tooltip.setAttribute('aria-hidden', 'false');
  tooltip.style.display = 'block';
});

button.addEventListener('blur', () => {
  tooltip.setAttribute('aria-hidden', 'true');
  tooltip.style.display = 'none';
});

button.addEventListener('mouseover', () => {
  tooltip.setAttribute('aria-hidden', 'false');
  tooltip.style.display = 'block';
});

button.addEventListener('mouseout', () => {
  tooltip.setAttribute('aria-hidden', 'true');
  tooltip.style.display = 'none';
});

3. 管理焦点

当工具提示出现时,它通常*不应该*从触发元素上窃取焦点。焦点应保留在触发工具提示的元素上。这确保了键盘用户可以继续浏览页面而不会受到意外干扰。

然而,在某些情况下,您可能*希望*将焦点移动到工具提示上,特别是当工具提示包含交互式元素(例如链接、按钮)时。在这种情况下,请确保:

在大多数情况下,为了简单和可用性,最好避免在工具提示本身内部进行焦点管理。

4. 确保足够的对比度

颜色对比度对于可读性至关重要。请确保工具提示中的文本颜色与背景颜色有足够的对比度。《网页内容无障碍指南》(WCAG)建议,正常文本的对比度至少为 4.5:1,大号文本(18pt 或 14pt 粗体)的对比度至少为 3:1。

使用在线对比度检查器来验证您的颜色选择是否符合无障碍标准。对比度检查器的示例如下:

示例(良好对比度):

.tooltip {
  background-color: #000;
  color: #fff;
}

示例(不良对比度):

.tooltip {
  background-color: #fff;
  color: #eee;
}

5. 留出足够的时间

用户需要足够的时间来阅读工具提示内容。避免工具提示过快消失。虽然没有一个固定的神奇数字,但目标是至少显示几秒钟。此外,只要用户悬停在或聚焦于触发元素上,工具提示就应该保持可见。如果由于其他事件需要关闭工具提示,请提供一个指示器,表明工具提示即将关闭。

如果工具提示内容很长,可以考虑提供一种方式让用户手动关闭工具提示(例如,一个关闭按钮或按 Escape 键)。

6. 使其可关闭

虽然当用户将鼠标移开或移除焦点时,工具提示通常会自动消失,但提供一种明确的手动关闭方式是一个好习惯,特别是对于内容较长的工具提示或包含交互元素的工具提示。

关闭工具提示的方法:

示例(关闭按钮):

<div id="my-tooltip" role="tooltip" aria-hidden="true">
  这是我的工具提示内容。
  <button onclick="hideTooltip()">关闭</button>
</div>

示例(Escape 键):

document.addEventListener('keydown', function(event) {
  if (event.key === 'Escape') {
    hideTooltip(); // 替换为您的实际隐藏工具提示函数
  }
});

7. 避免过度使用

工具提示应谨慎使用,并且仅在它们提供真正有用的信息时才使用。过度使用工具提示会使界面混乱,分散用户注意力,并造成令人沮丧的体验。

工具提示的替代方案:

高级注意事项

动态内容

如果您的工具提示内容是动态生成的(例如,从 API 加载或根据用户输入更新),请确保相应地更新 aria-describedby 属性和工具提示的可见性。使用 JavaScript 来管理这些更新。

定位

仔细考虑工具提示的定位。避免将它们放置在遮挡重要内容或导致布局变化的位置。注意不同的屏幕尺寸和分辨率,并使用 CSS 确保工具提示始终在视口内可见。

移动设备

传统上,工具提示依赖于悬停交互,这在触摸设备上是不可用的。对于移动设备,请考虑使用替代的交互方法,例如:

测试您的工具提示

彻底测试您的工具提示,以确保它们对所有用户都是无障碍的。结合使用手动测试和自动化无障碍测试工具。

测试方法:

国际化 (i18n) 和本地化 (l10n)

在为全球受众开发工具提示时,请牢记国际化和本地化:

结论

实现无障碍的工具提示需要仔细的规划和对细节的关注。通过遵循本指南中概述的原则和技术,您可以创建出每个人,无论其能力如何,都能使用的工具提示。请记住,无障碍是一个持续的过程,因此请继续测试和完善您的工具提示,以确保它们满足所有用户的需求。

资源