
当页面视觉设计已通过布局(如分栏、卡片、间距)隐式传达结构层级时,HTML 仍须严格遵循语义化标题顺序(h1→h2→h3…),不可跳级;若某逻辑节无显式标题,应添加带 .visually-hidden 类的语义化标题,确保屏幕阅读器可感知完整结构。
当页面视觉设计已通过布局(如分栏、卡片、间距)隐式传达结构层级时,html 仍须严格遵循语义化标题顺序(h1→h2→h3…),不可跳级;若某逻辑节无显式标题,应添加带 `.visually-hidden` 类的语义化标题,确保屏幕阅读器可感知完整结构。
在构建可访问的网页时,“视觉即语义”的假设是危险的。尽管设计师可能通过留白、边框、背景色或栅格系统清晰划分内容区块(例如:一个 article 内并列三个功能对等的 section,均以 H2 视觉呈现),但屏幕阅读器无法解析这些视觉线索——它只依赖 DOM 结构与语义标签进行导航。因此,HTML 必须显式表达所有逻辑层级,哪怕该层级在视觉上“不言自明”。
✅ 正确做法:用语义化隐藏标题补全结构
当某 <section></section> 在逻辑上属于当前上下文的同级单元(如均为文章主体下的并列模块),但未设置可见标题时,应为其添加一个语义准确、仅对辅助技术可见的标题:
<article><h1>数字无障碍设计指南</h1>
<section><h2>语义化标题原则</h2>
<p>标题层级必须线性递进……</p>
</section><section><!-- 视觉上无标题,但逻辑上是独立模块 --><h2 class="visually-hidden">作者与发布信息</h2>
<aside aria-labelledby="author-heading"><div id="author-heading" class="visually-hidden">作者与发布信息</div>
<p><strong>作者:</strong>张明</p>
<p><strong>发布日期:</strong>2026年10月8日</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher"><img
src="https://img.php.cn/upload/skill/000/000/081/179109368394970.jpg" alt="Wechat HTML Publisher" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="overflowclass">Wechat HTML Publisher</a>
<p class="overflowclass">直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。</p>
</div>
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<button>分享至社交媒体</button>
</aside></section><section><h2>常见误区与修复方案</h2>
<ul>…
</ul></section></article>
配套 CSS(符合 WCAG 推荐的“视觉隐藏但保留可访问性”模式):
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
⚠️ 注意:切勿使用
display: none或visibility: hidden,二者会完全移除元素的可访问性暴露;也禁止跳级(如<h2></h2>后直接<h4></h4>),这违反 WCAG 1.3.1 Info and Relationships 及 HTML5 纲要模型(outline algorithm)。
❌ 错误模式辨析
| 错误写法 | 问题 |
|---|---|
<section><h3>联系表单</h3>...</section>(前一节以 <h2></h2> 结束) |
跳过 h2 → h3 属于层级断裂,破坏文档纲要,屏幕阅读器可能将此节错误归入上一 h2 下的子节 |
<section><div class="card">...</div></section>(无任何 heading) |
屏幕阅读器用户通过「按 heading 导航」时会直接跳过整个区块;即使使用「按 section 导航」,缺乏 aria-label 或 aria-labelledby 也将导致多个无名 section 难以区分 |
<section><span aria-hidden="true">作者信息</span><span class="sr-only">作者信息</span>...</section> |
冗余且易出错;应直接使用 <h2 class="visually-hidden">作者信息</h2>,既满足语义又保障结构完整性 |
? 总结:结构优先,视觉服从语义
可访问性不是“附加功能”,而是 Web 文档的基础契约。标题层级跳级看似节省代码或贴合设计,实则割裂了内容与辅助技术之间的信任链。真正的优雅在于:用最简语义标记承载最丰富的意图,再通过 CSS 精准控制其视觉表现。 每一个 <section></section> 都值得一个 <h2></h2>(或对应层级)——无论它是否在屏幕上显示。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










