标签语义极弱,仅表示主题分组,不提升无障碍体验,误用会破坏可访问性树;正确用法是包裹有统一主题的标题集群,且需配合连续标题层级与明确父容器。

section 标签本身不提升无障碍体验,用错反而破坏可访问性树
<section></section> 是语义标签,但它的语义极弱——仅表示“一个主题分组”,既不暗示导航价值,也不代表内容独立性或结构权重。屏幕阅读器不会为 <section></section> 提供快捷跳转(如 NVDA 的 Insert+F6 不会列出它),也不会改变朗读节奏或焦点行为。如果把它当 <main></main> 或 <article></article> 用,比如套住整页内容、或嵌套在 <main></main> 外再包一层,反而会让辅助技术误判层级,甚至导致部分旧版 VoiceOver 忽略内部标题。
什么时候该用 section,什么时候不该用
判断依据不是“有没有边框”或“CSS 是否需要 class”,而是内容是否自然构成一个有统一主题的段落集群:
- 该用:
<section></section>包裹一组相关<h2></h2>~<h3></h3>小节,比如“产品特性”下分“性能”“安全”“兼容性”三个子模块 - 不该用:单个
<p></p>或一个<h2></h2>加一段文字就套<section></section>——这属于语义冗余,增加 DOM 深度却无实际价值 - 更不该用:
<section></section>替代<nav></nav>、<aside></aside>或<footer></footer>;这些区域有明确角色,换用<section></section>会丢失隐式 ARIA 语义(如<nav></nav>自带role="navigation")
section 和 article、main 混用时的常见错误
三者语义不可互换,混用会直接干扰屏幕阅读器的内容流解析:
-
<main></main>必须全局唯一,且应直接包裹页面核心内容;若里面只有一层<section></section>,不如去掉这层包装,让<h1></h1>直接作为<main></main>子元素 -
<article></article>强调可独立分发(如博客正文、新闻稿),即使脱离当前页面也语义完整;而<section></section>没有这个属性,强行用它包一篇完整文章,会让屏幕阅读器无法识别其“可引用性” - 多个
<section></section>嵌套时,标题层级必须连续:不能在<section></section>内突然用<h1></h1>,否则会重置大纲,造成“从 h2 跳到 h1”的逻辑断裂
真正影响无障碍阅读的是标题层级与父容器组合
<section></section> 的价值,只在配合正确标题和合理父级时才显现:
- 每个
<section></section>应以<h2></h2>或更高级别标题开头(不能是<h3></h3>起头,除非父级已有<h2></h2>) - 它应出现在语义明确的容器中:比如
<main></main>下的“用户评价”区块、<article></article>内的“技术参数”小节 - 避免用
<section></section>包裹纯装饰性内容(如分割线、空 div、背景图容器)——这类内容应直接用<div>,加 <code>aria-hidden="true"更稳妥说到底,
<section></section>不是“无障碍开关”,它是结构描述工具。真正决定屏幕阅读器怎么读的,是你给它配了什么标题、放在什么上下文中、以及有没有和其他语义标签形成一致的信息地图。











