在实现带有 Show/Hide 功能的界面元素时,需严格遵循 WAI-ARIA 规范以保障可访问性。根据 W3C ARIA 作者实践指南(APG),Accordion(手风琴)与 Disclosure(展开/隐藏)组件虽功能相似,但在角色设置上存在关键区别。

对于 Disclosure 组件,核心在于使用 `aria-expanded` 属性标识当前内容的展开状态(true/false)。当内容被折叠时,屏幕阅读器应能明确告知用户该区域已隐藏;展开时则需朗读完整内容。若涉及焦点管理,通常建议将触发按钮设为可聚焦元素,并在状态变化时通过事件监听器更新 `aria-expanded` 属性。

Accordion 组件则是多个 Disclosure 的集合,通常包含一组标题和内容片段。每个折叠项同样需要独立的 `aria-expanded` 属性。若 Accordion 为单选模式(一次只展开一个),还需配合 `aria-controls` 指向对应内容区域,并考虑使用 `aria-current="step"` 或类似机制指示当前激活项。

动态内容更新时,必须确保在 DOM 变更后立即同步 ARIA 属性值。例如,点击按钮后先隐藏/显示内容,再更新 `aria-expanded`,避免状态与视觉不一致。此外,键盘导航需支持通过 Tab 键切换标题、Enter 或空格键触发展开/折叠,并保证焦点逻辑清晰。

总之,构建此类组件时,应优先采用语义化 HTML 结构,辅以恰当的 ARIA 角色和属性,结合事件监听器实现状态同步,从而确保所有用户——包括屏幕阅读器使用者——都能顺畅获取信息。

信息来源