poster 属性是尽力而为的视觉占位符,不报错不提示,失效主因是路径无效或 file:// 协议限制;验证需直接在地址栏访问路径,兜底推荐 CSS 背景图+JS 事件控制。
poster 属性到底有没有生效?多数时候封面不显示,根本不是属性写错了,而是浏览器压根没加载到那张图——poster 是一个“尽力而为”的视觉占位符,它不触发网络错误提示,也不抛异常,图挂了就静默留白。
poster 值必须是有效 URL,相对路径以 HTML 文件所在目录为基准,不是以 JS 或 CSS 文件位置算404 或 403
%E4%B8%AD%E6%96%87)会导致请求失败,尤其在本地 file:// 协议下更敏感poster 加载失败的典型场景用双击打开 HTML、或 VS Code Live Server 以外的方式本地运行,file:// 协议会禁止跨目录读取资源,哪怕路径语法完全正确。
,但 HTML 在 /project/index.html,而图片实际在 /assets/images/cover.jpg
file:// 下的 poster 有额外限制,Safari 更宽松——别靠本地双击测试兼容性poster 路径是否真实可达?别猜,直接复用路径在浏览器地址栏访问。这是最快最准的验证方式。
poster 属性值(比如 ./img/thumb.png)http://localhost:5500/page.html 拼成 http://localhost:5500/img/thumb.png
SS 背景图兜底更可控当 poster 不稳定或需支持加载失败降级时,CSS 方式反而更可靠,还能加 loading 动画。
注意::is(:playing, :not([paused])) 并非所有浏览器都支持,生产环境建议用 JS 监听 play 和 pause 事件来 toggle 类名。
真正麻烦的不是写错路径,而是误以为 poster 是个强保障机制——它只是个轻量提示,一旦涉及路径动态生成、CDN 域名切换、或构建后路径重写,就必须走 Network 验证+ fallback 双保险。