track元素不参与响应式布局,仅负责为音视频提供文本轨道;真正需响应式处理的是video容器尺寸、点击区域及::cue字幕样式。

track 元素本身不匹配屏幕尺寸,也不参与响应式布局。
它只用于为 video 或 audio 提供字幕、描述、章节等文本轨道(text tracks),浏览器根据用户系统偏好(如语言、是否启用字幕)和 kind、srclang、default 属性决定加载哪条轨道——和视口宽度、DPR、设备类型完全无关。
如果你看到“track 适配不同屏幕”的提法,基本是混淆了概念。真正需要响应式处理的是:
video 容器的尺寸与点击区域
video 标签本身可被点击、拖拽、全屏,但它的可交互区域必须满足触摸最小尺寸要求(48×48px)。常见问题包括:
- 小屏上仅用
width: 100%; height: 200px,导致控制栏按钮被压缩到 24px 高 - 用
transform: scale(0.8)缩小整个video区域,视觉变小但点击热区没扩大 - 未设
min-width/min-height,在窄屏 Flex 容器中被压扁
解决方式:
- 给
video的父容器加min-width: 48px; min-height: 48px - 控制栏内按钮用
padding扩展点击区,而不是靠图标本身撑开 - 避免对
video或其 wrapper 使用transform缩放;改用width/height+aspect-ratio维持比例
字幕样式(::cue)需适配高 DPR 和小屏文字可读性
track 加载后,浏览器用 ::cue 伪元素渲染字幕。这时才涉及屏幕适配:
- 默认字体可能在 2x 屏上发虚或过小,需显式设置:
video::cue { font-size: 1.2rem; line-height: 1.4; background-color: rgba(0, 0, 0, 0.7); } - 不要用
px写死字号,否则在小屏上字幕可能遮挡画面主体 - 若需多语言字幕动态切换,靠 JS 修改
track.mode("disabled"/"hidden"/"showing"),而非媒体查询
真正该用 matchMedia 做响应式判断的地方
比如:横屏时显示完整控制栏,竖屏时隐藏部分按钮节省空间:
const mediaQuery = window.matchMedia("(orientation: landscape)");
function updateVideoControls(e) {
const video = document.querySelector("video");
if (e.matches) {
video.classList.remove("compact-controls");
} else {
video.classList.add("compact-controls");
}
}
updateVideoControls(mediaQuery);
mediaQuery.addEventListener("change", updateVideoControls);
注意:这里监听的是设备方向,不是 track;track 依然只管文本内容加载,不参与布局决策。
track 是纯语义层组件,它的“适配”只发生在字幕渲染阶段,靠 CSS ::cue 和 JS mode 控制——别试图用媒体查询给 track 标签加 class 或切 src,那不会生效。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











