HTML语义化不当会严重破坏辅助功能:main标签必须唯一,包含核心内容,否则辅助技术的锚点失效;section和article需有明确标题或独立语义,不可滥用;div包裹大多数语义标签不影响识别,但ul/ol、table的嵌套必须严格;标题层级需连续递进,断裂的大纲使读屏导航失效。
一个常见场景是:用户打开你的网站后按下 M 键,结果什么都没发生,或者直接跳到了页脚。
这不是 Bug,而是 main 标签的使用出了大问题。辅助技术(如 NVDA、VoiceOver)将 main 视为语义锚点,用户按 M 键的目的就是绕过所有干扰项,直达核心内容。但规范明确要求:整个 DOM 树中只能有一个 main,且它必须代表用户当前最需要操作或阅读的核心内容。一旦出现多个 main,或者把广告、导航、页脚都塞进去,这个锚点就会彻底失效。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
实际中的常见问题包括:
main,子页面又写了一个——浏览器通常只认第一个,第二个直接被忽略。用户从首页跳转到详情页后按 M 键,仍然停留在旧位置。iframe 内自行声明 main,脱离主文档上下文后,辅助技术无法将其纳入整体的可访问性树。main——读屏工具播报时堆砌大量无关信息,用户被迫听完一整段噪音才能找到表单所在。section 和 article 不是 div 的高阶替代品很多人认为将 div 换成 section 就完成了可访问性优化——这个误解的影响很大。它们解决的不是布局问题,而是文档大纲和内容可分发性。滥用只会让屏幕阅读器的导航节点急剧增多,用户反而更难定位信息。
判断标准可以概括为两点:
section 必须自带 到 标题。没有标题?那就用 div,不必勉强。article 要能独立存在:将周围内容全部删除后,它自己是否语义完整?能否被 RSS 抓取、邮件推送或聚合页引用?如果答案是否定的,就不要硬套。一个典型的错误写法是: 一段无关内容——没有标题、不可分发、无结构意义,纯属污染大纲。
div 里到底影响可访问性吗?看标签类型对于 header、footer、nav、main 这类块级语义标签,被 div 包裹通常问题不大——辅助技术仍能识别其角色,DOM 中的语义信息没有丢失。
但有两类标签绝不允许随意嵌套:
ul / ol:它们的子元素只能是 li。中间插入一个 div 或 span,HTML 直接失效。浏览器会降级解析,屏幕阅读器可能跳过整段列表,或者将 div 当作空项播报——后者更令人困扰。table:只接受 thead、tbody、tr、td 这些表格专用子元素。用 div 包裹 tr,或在 td 中塞入 section,表格语义会直接断裂,读屏工具无法构建正确的行列关系,数据表格对于视障用户而言就是一团乱麻。很多团队花力气将 div 换成了语义标签,却在 h1 到 h6 上出了问题。页面从 h2 开始、main 外面堆了三个 h1、产品页的小节用了 h3 但主内容还没出现 h2……这些混乱的层级直接导致屏幕阅读器生成的文档大纲完全错乱。用户依赖大纲快速跳转,而断裂的层级会让“下一级标题”键失效,或跳到完全意料之外的位置。
可以记住以下几个硬性标准:
h1(通常是站点名称或页面主标题)。main 内部的标题必须严格递进:主内容用 h1 或 h2,章节用 h2/h3,绝对禁止跨级——例如 h2 后面直接跟 h5。说到底,真正困难的从来不是记住哪些标签该用,而是每次写完都问自己一句:这个结构,能让一个看不见屏幕的人,在不听完整页的前提下,三秒内定位到他要的内容吗?
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述