track元素本身不添加字幕,它仅声明字幕文件位置与配置;生效需同时满足:位置在video/audio内部且同级、src/kind/srclang三属性齐全、vtt文件格式规范(含WEBVTT头、正确时间戳等)、track.mode设为showing或带default属性。

track元素本身不“添加”字幕,它只是告诉浏览器:「这里有个字幕文件,请按规则加载并显示」。真正起作用的是它指向的 WebVTT 文件(.vtt),以及正确的属性配置。用错一个属性,字幕就完全不出现,连控制台都不报错——这是最常被忽略的点。
track 必须和 video/audio 同级且放在内部
很多人把 track 写在 video 外面,或嵌套在 source 里,这直接导致浏览器忽略它:
- ✅ 正确位置:
video或audio标签内部,和其他子元素(如source)平级 - ❌ 错误写法:
(track不能是source的子节点) - ❌ 错误写法:
(标签闭合错位,或脱离媒体容器)
src、kind、srclang 三个属性缺一不可
track 要生效,必须同时指定:
-
src:指向一个有效的 .vtt 文件路径(相对或绝对),且该文件需能被浏览器直接 GET 到(注意跨域、404、MIME 类型) -
kind:值必须是subtitles(不是caption,除非你真需要含音效描述的无障碍字幕) -
srclang:语言代码(如zh、en),即使只有一条字幕也必须写,否则 Chrome/Firefox 默认不启用
示例:
<video controls><source src="movie.mp4" type="video/mp4"><track kind="subtitles" src="zh.vtt" srclang="zh" label="中文"></track></source></video>
vtt 文件格式必须严格符合规范
WebVTT 不是随便写个文本就能用。常见失效原因:
- 文件开头没写
WEBVTT(必须顶格、全大写、无空格) - 时间戳格式错误,比如写成
00:00:01,500(逗号应为英文句点:00:00:01.500) - 内容行包含 HTML 标签(
等不被原生支持,需用 WebVTT 内置语法text,且必须换行写) - 服务器返回的 Content-Type 不是
text/vtt(Nginx/Apache 需显式配置)
默认不显示,得手动开启或设 default
浏览器不会自动显示任何 track。要让它一打开就显示,加 default 属性:
<track kind="subtitles" src="zh.vtt" srclang="zh" label="中文" default></track>
但注意:default 只能在一个 track 上用;如果用户手动关掉字幕,default 就不再起作用;多语言场景下,建议靠 JS 检测 navigator.language 动态设置 track.mode = "showing",而不是依赖 default。
字幕是否显示,不取决于你写了多少行 track,而取决于这四个条件是否全部满足:位置对、属性全、vtt 格式严、mode 可见。漏掉任意一个,页面就静悄悄——连控制台都不会提醒你。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











