在屏幕阅读器中等于“沉默”,因其无内置语义,不触发role="navigation",无法被识别为导航地标;而自带语义与地标属性,支持快捷键跳转,多须用aria-label区分,仅能出现一次且不可嵌套,标题层级必须连续,缺alt即功能缺失。

HTML代码质量直接决定屏幕阅读器能否准确识别结构、跳转区域和内容关系——写错一个标签,就可能让视障用户在导航栏里“迷路”半小时。
为什么 <div class="nav"> 在屏幕阅读器里等于“沉默”
<p><code><div> 是纯容器,没有内置语义,屏幕阅读器既不播报它,也不提供导航快捷键(比如 NVDA 的 D 键跳导航区)。它只读里面文字,且不说明上下文。
<ul>
<li>错误写法:<code><div class="nav">@#@#@#@#@#@#@#@#@#@0</div> → 屏幕阅读器只读“首页”,用户不知道这是导航,也无法一键跳过
<nav></nav>,它自带 role="navigation",无需手动加 aria-role
<nav></nav> 时,必须用 aria-label 或 aria-labelledby 区分,否则全叫“导航”,无法区分页眉导航和页脚链接区
<main></main> 只能出现一次,且不能嵌套在 <header></header> 或 <nav></nav> 里
<main></main> 是强制性地标(landmark),浏览器和辅助技术靠它定位核心内容。重复或嵌套会破坏结构索引,导致“跳至主要内容”功能失效。
- 常见错误:
<header><main>...</main></header>→<main></main>被视为非主内容,部分阅读器直接忽略 - 正确结构:页面顶层并列
<header></header>、<nav></nav>、<main></main>、<footer></footer>,互不嵌套 - 动态渲染时注意:JS 插入的
<main></main>必须检查是否已存在,避免重复
标题层级断层会让 <h4></h4> 被当成新章节起点
屏幕阅读器依赖标题层级建立内容大纲。跳级(如从 <h1></h1> 直接到 <h4></h4>)不是样式问题,是语义断裂——阅读器会误判为“新文档开始”,甚至跳过中间内容。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 错误示例:CMS 输出正文时,
<h3></h3>下突然插入<h1></h1>(常见于富文本粘贴) - 实操检查:用 Chrome DevTools 的「Accessibility」面板看「Heading level」是否连续
- 构建时校验:用
remark-lint-heading-increment检查 Markdown 渲染出的 HTML 标题层级 - 禁止用 CSS 视觉降级伪装:
<div class="h2"> 再大也还是 <code><div>,语义为零 <h3> <code><img>缺alt不是“体验差”,是功能缺失带信息的图标(如“下载 PDF”按钮里的 PDF 图标)设
alt="",等于删掉了操作提示;而用aria-label替代<label></label>绑定,又没处理焦点管理,键盘用户 Tab 进去却不知道这是什么输入框。- 装饰图:真无信息,才用
alt="" - 信息图/图表:alt 需描述文字内容,不是“信息图”,而是“2024年各季度销售额柱状图:Q1 120万,Q2 185万…”
- 动态表单:JS 创建的
<input>必须同步生成唯一id,否则<label for="xxx"></label>失效 - 按钮图标:若图标本身承载操作含义(如放大镜表示搜索),必须配
aria-label或包裹文字
最常被忽略的点:语义标签不是“多用就好”,而是“用对才起作用”。一个错位的
<section></section>、一段跳级的标题、一个没命名的<nav></nav>,都会让屏幕阅读器把整页结构理解成乱码——修复不靠加 ARIA,靠重读 HTML5 规范里每个标签的隐含 role 和使用前提。 - 装饰图:真无信息,才用










