label属性必须显式填写且非空,否则轨道不会出现在字幕菜单中;同一srclang下label需唯一,长度建议≤24字符,不自动翻译,仅用于UI显示。

label属性必须显式填写且不可为空
浏览器字幕菜单(右键「字幕」或控件栏 CC 按钮)是否显示某条轨道,完全取决于 label 是否存在且非空。不写 label、写成 label="" 或仅用空格,都会导致该 <track></track> 在菜单中彻底消失——不是隐藏,是根本注册失败。
常见错误现象包括:添加了三条中文轨道但菜单只出现一项;Safari 字幕开关灰掉无法点击;控制台无报错,Network 面板也看不到 .vtt 请求。
-
label是唯一影响 UI 展示的属性,srclang只用于语言匹配逻辑,不参与显示 - 即使
srclang="zh"正确,label缺失时,Chrome 和 Firefox 仍会显示(no label),而 Safari 直接跳过该轨道 - 移动端 Safari 对空
label更敏感,部分版本会连整个字幕菜单都不渲染
label值必须在同语言轨道间保持唯一
同一 srclang 下的多条轨道(比如两条简体中文字幕),如果 label 相同或重复,浏览器会合并为一个菜单项——用户无法区分、无法切换。这不是 bug,是规范行为。
例如:<track kind="subtitles" srclang="zh" label="中文"></track> 和 <track kind="subtitles" srclang="zh" label="中文"></track>,无论文件内容差异多大,菜单里只有一项「中文」。
立即学习“前端免费学习笔记(深入)”;
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 正确做法是用括号注明来源、生成方式或用途,如
label="中文(官方校对)"、label="中文(AI生成,v2.3)" - 避免纯技术命名:
label="zh-Hans"、label="track_01"对用户无意义,也起不到区分作用 - label 长度建议 ≤24 字符,iOS Safari 会截断超长文本,影响可读性
label内容不会随系统语言自动翻译
label 的值就是最终显示在菜单里的原文,浏览器不做任何本地化处理。哪怕用户系统设为日语,label="English" 依然显示为 English,不会变成「英語」。
这意味着:多语言站点不能靠动态改写 label 值来适配访客语言,而应确保每个 label 本身对目标用户清晰可辨。
- 推荐写法是「语言名 + 括号补充」,如
label="日本語(字幕付き)"、label="Español(Latinoamérica)" - 不要依赖
srclang推导显示名,它只用于匹配和过滤(比如系统设为ja时优先启用srclang="ja"的轨道) - 若需完全隐藏某条轨道(如仅供 JS 控制),可用
label=" "(单空格),比空字符串更稳妥,旧版 Edge 也能加载
label与srclang配合决定菜单可见性与默认行为
浏览器先按 srclang 过滤可用轨道(如系统语言为 en-US,则 srclang="en" 或 "en-US" 的轨道进入候选),再用 label 生成菜单项。两者必须协同,不能矛盾。
典型错误:写 srclang="zxx"(非语言内容)却配 label="中文解说",多数浏览器直接忽略该 <track></track>,因为 kind="subtitles" 要求有效语言标识。
- 不同
srclang下,label可以相似,如都含"(Official)";但相同srclang下,label必须不同 -
default属性只影响首次加载时的启用状态,不影响label显示逻辑;用户手动切换后,label就是唯一识别依据 - 移动端 Safari 要求
<video></video>必须带controls属性,否则即使label正确,字幕菜单也不会出现在控件栏


















