何时使用 ARIA,何时使用原生 HTML
遵循 ARIA 第一原则:优先使用原生语义
何时使用 ARIA,何时使用原生 HTML 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。
什么是 ARIA?
ARIA(可访问的富互联网应用)是一组可以添加到 HTML 中的属性,用于改善辅助技术的无障碍性。当原生 HTML 语义不足时,它可以填补其中的空缺。
ARIA 的第一条规则
最重要的 ARIA 指南是:原生 HTML 能实现时,不要使用 ARIA:
<!-- BAD: ARIA on a div -->
<div role="button" tabindex="0" onclick="submit()">Submit</div>
<!-- GOOD: use a real button -->
<button type="submit">Submit</button>
<!-- Native HTML elements:
- Are keyboard accessible by default
- Have correct semantics built in
- Work in more contexts
- Require less code
-->原生 HTML 不够用时
以下情况需要使用 ARIA:
- 自定义用户界面组件没有对应的 HTML 元素(选项卡、组合框)
- 需要覆盖原生元素的角色
- 需要播报动态内容更新
- 需要明确表达元素之间的复杂关系
ARIA 不会添加行为
一个重要的误解是:ARIA 添加的是无障碍元数据,而不是功能:
<!-- Adding role="button" to a div does NOT:
- Make it keyboard-focusable (add tabindex="0")
- Make Enter/Space activate it (add event listeners)
- Make it styled like a button (add CSS)
-->
<!-- You must implement ALL behavior yourself -->
<!-- Native <button> handles all this for free -->ARIA 分类体系
ARIA 属性分为三类:
- 角色——定义元素是什么:
role="button"、role="dialog" - 属性——描述静态特征:
aria-label、aria-required - 状态——描述动态条件:
aria-expanded、aria-checked
语义化 HTML 与 ARIA 等效项
大多数 HTML 元素已经具有隐式的 ARIA 角色:
<nav> ≡ role="navigation"
<main> ≡ role="main"
<aside> ≡ role="complementary"
<header> ≡ role="banner" (page-level)
<footer> ≡ role="contentinfo" (page-level)
<button> ≡ role="button"
<a href> ≡ role="link"
<h1-h6> ≡ role="heading"
<ul> ≡ role="list"ARIA 的常见有效用法
ARIA 的合理使用示例:
<!-- 1. Custom dropdown (no native equivalent): -->
<div role="combobox" aria-expanded="false">...</div>
<!-- 2. Loading state announcement: -->
<div role="status" aria-live="polite">Loading results...</div>
<!-- 3. Override landmark label: -->
<nav aria-label="Primary navigation">...</nav>
<!-- 4. Associate error with input: -->
<input aria-describedby="error-msg">
<span id="error-msg" role="alert">Invalid email</span>无效的 ARIA 用法
常见的 ARIA 错误:
<!-- BAD: ARIA role contradicts the element -->
<h2 role="button">Heading</h2> <!-- don't turn a heading into a button -->
<!-- BAD: ARIA on an unsupported element -->
<div role="listitem">Item</div> <!-- listitem must be inside list role -->
<!-- BAD: ARIA where HTML works fine -->
<p role="paragraph">Text</p> <!-- p already has paragraph semantics -->
<!-- BAD: aria-label on hidden element -->
<span aria-hidden="true" aria-label="something"> <!-- contradictory -->地标角色
ARIA 地标角色可以帮助屏幕阅读器用户在页面区域之间导航:
<div role="banner"> <!-- header for the whole page -->
<div role="navigation"> <!-- major navigation -->
<div role="main"> <!-- main content -->
<div role="complementary"> <!-- aside content -->
<div role="contentinfo"> <!-- page footer -->
<div role="search"> <!-- search form -->
<div role="form"> <!-- form with label -->
<!-- These are ONLY needed if using divs instead of semantic elements -->
<!-- Prefer the native HTML elements instead -->测试 ARIA 实现
验证 ARIA 是否正确的方法:
- 使用 Chrome/Firefox DevTools 中的“无障碍”面板
- 使用 VoiceOver(Mac)或 NVDA(Windows)听取播报
- 运行 axe DevTools 扩展
- 检查无障碍树——它是否反映了您的预期?
ARIA 隐藏陷阱
常见的 aria-hidden 错误:
<!-- BAD: aria-hidden on element that still receives focus -->
<button aria-hidden="true">Close</button>
<!-- The button is still focusable but invisible to screen readers
Screen reader users reach it via Tab but hear nothing -->
<!-- GOOD: for focus + hide, use hidden attribute or display:none: -->
<button hidden>Close</button> <!-- removes from both tab order and AT -->
<!-- Or: if you must keep visible: -->
<button style="display:none" aria-hidden="true">Close</button>快速检查
将 role="button" 添加到 div 后,会自动为您提供什么?
回顾:ARIA 与原生 HTML
ARIA 的要点:
- 第一条规则:可能时使用原生 HTML
- ARIA 只添加语义——行为必须由您实现
- 三类:角色、属性、状态
- 地标角色有助于屏幕阅读器导航
- 使用 DevTools“无障碍”面板和屏幕阅读器进行测试
常见问题解答
「何时使用 ARIA,何时使用原生 HTML」课时是免费的吗?
是的 — 「何时使用 ARIA,何时使用原生 HTML」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。
「何时使用 ARIA,何时使用原生 HTML」这节课中我会学到什么?
遵循 ARIA 第一原则:优先使用原生语义 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 HTML Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「何时使用 ARIA,何时使用原生 HTML」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 HTML Academy 课中编写并运行代码吗?
能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 何时使用 ARIA,何时使用原生 HTML
- role、button、alert、dialog 和地标
- aria-label、aria-labelledby 和 aria-describedby
- aria-hidden 和 aria-live