html大纲视图是语言服务器对语义标签(h1–h6、section、article等)的解析结果,非自动目录;不写/写错语义标签则为空或断裂,且依赖已保存文件、合法id、可见性及正确嵌套。

HTML 编辑器里的大纲视图不是“自动显示文档目录”的功能,它本质是语法解析器对当前文件中 <h1></h1>–<h6></h6>、<section></section>、<article></article> 等语义结构的提取结果——不写语义标签,大纲就为空;写错嵌套,大纲就断裂。
VS Code 中 HTML 大纲视图为什么空白或只显示几个标签
这不是插件没装好,而是语言服务没识别出可导出的结构。HTML 本身没有“符号”概念,VS Code 的大纲依赖 HTML 语言服务器(如 built-in HTML language features)主动上报 SymbolKind。它默认只上报标题(<h1></h1>–<h6></h6>)和部分 sectioning root(<section></section>、<article></article>、<nav></nav>、<aside></aside>),但不会上报 <div class="title"> 或未闭合的 <code><header></header>。
- 确保文件右下角语言模式是
HTML,不是Plain Text或Auto - 大纲不显示
<h2></h2>?检查是否被注释包裹、是否在<script></script>内、是否拼写为<h2></h2>(大小写敏感) - 装了
Auto Close Tag或Highlight Matching Tag不影响大纲生成,它们不参与符号解析 - 如果用了 Pug / JSX / Vue 单文件组件,原生 HTML 大纲基本失效,需对应语言扩展支持(如 Volar、Vue Language Features)
点击大纲项不跳转到对应标题?检查这三处硬性条件
大纲跳转依赖 DOM 位置映射,不是简单字符串匹配。常见失效不是快捷键问题,而是底层定位失败。
- 文件必须已保存:未保存的 HTML 更改不会触发语言服务器重新解析符号位置
- 标题必须有唯一、合法的
id属性:<h2 id="introduction"></h2>可跳转;<h2 id="第一章"></h2>或<h2 id=""></h2>会失败 - 目标元素不能被
display: none或visibility: hidden隐藏:大纲节点存在,但编辑器无法计算其可视位置时会静默失败 - 不要依赖折叠状态:即使
<section></section>被折叠,只要<h3></h3>在 DOM 中,仍应可跳转;若不可,说明该<h3></h3>实际未被语言服务器捕获
怎么让大纲真正反映语义结构,而不是 DOM 树形图
浏览器渲染的大纲(document outline)和编辑器显示的大纲视图是两套逻辑:前者由 HTML5 规范定义,后者由语言服务器实现。想让两者一致,关键在写法收敛。
- 禁用“视觉即结构”惯性:
<div class="h2">标题</div>永远不会出现在大纲里,必须用<h2></h2> -
<section></section>必须配标题:空<section></section>在大纲中显示为“无标题”,读屏器会跳过;应补上<h2>参数说明</h2> - 避免跳级:
<h2>一级</h2> <h4>跳过三级</h4>会导致大纲层级错乱,辅助技术可能将<h4></h4>当作<h3></h3>子项处理 - 验证真实大纲:别信编辑器侧边栏,用 Chrome 的
axe DevTools扩展点Analyze→Structure查heading-order错误
最易被忽略的是:大纲视图从不校验标题内容是否为空、是否重复、是否含非法字符。它只管“有没有标签”,不管“标不标准”。所以你看到一个完整的树形列表,不代表屏幕阅读器能正确朗读——那得靠 axe、Lighthouse 或 NVDA 实际跑一遍。











