video 视频
HTML5 的 <video> 元素让在网页中嵌入视频变得简单直接。本节将介绍 <video> 标签的语法、属性、多格式兼容、poster 封面图以及各种控制方式。
前置知识
阅读本节前,建议先了解:audio 音频
基础概念
<video> 是 HTML5 引入的原生视频元素,用于在网页中播放视频内容。与 <audio> 类似,<video> 提供了统一的 API 来控制视频播放,无需 Flash 等第三方插件。
<video> 元素支持多种视频格式,可以通过 <source> 子元素提供多种格式实现浏览器兼容,还可以通过 poster 属性设置视频封面图。
语法
基本语法
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>video 视频</title>
</head>
<body>
<h1>video 标签</h1>
<!-- 最简单的用法 -->
<video src="movie.mp4" controls width="640" height="360"></video>
<hr>
<!-- 带多格式回退和封面图 -->
<video controls poster="cover.jpg" width="640" height="360">
<source src="movie.webm" type="video/webm">
<source src="movie.mp4" type="video/mp4">
您的浏览器不支持 video 元素。
</video>
</body>
</html>video 的常用属性
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>video 属性</title>
</head>
<body>
<h1>video 属性</h1>
<!-- controls:显示播放控件 -->
<video src="movie.mp4" controls width="640" height="360"></video>
<hr>
<!-- poster:视频封面图(加载前或用户未播放时显示) -->
<video src="movie.mp4" controls
poster="movie-cover.jpg"
width="640" height="360"></video>
<hr>
<!-- autoplay muted loop:静音自动循环播放 -->
<video src="promo.mp4" autoplay muted loop
width="640" height="360"></video>
<hr>
<!-- preload="none":不预加载视频数据 -->
<video src="movie.mp4" controls preload="none"
width="640" height="360"></video>
</body>
</html>详细说明
video 属性详解
| 属性 | 值 | 说明 |
|---|---|---|
src | URL | 视频文件路径 |
controls | 布尔 | 显示播放控件 |
autoplay | 布尔 | 自动播放 |
loop | 布尔 | 循环播放 |
muted | 布尔 | 静音 |
poster | URL | 视频封面图 URL |
width | 像素 | 显示宽度 |
height | 像素 | 显示高度 |
preload | auto/metadata/none | 预加载策略 |
playsinline | 布尔 | 在 iOS Safari 中内联播放(不全屏) |
poster 封面图
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>poster 封面图</title>
</head>
<body>
<h1>poster 封面图</h1>
<!-- poster 在视频加载前或未播放时显示 -->
<video controls
poster="https://example.com/thumbnails/video-cover.jpg"
width="640" height="360">
<source src="movie.webm" type="video/webm">
<source src="movie.mp4" type="video/mp4">
</video>
<p>
poster 的作用:
</p>
<ul>
<li>提升视觉体验:视频未播放时显示有意义的图片</li>
<li>减少空白:大视频加载时不会显示黑色区域</li>
<li>引导用户:通过封面图吸引注意力</li>
</ul>
</body>
</html>playsinline 属性(iOS 重要)
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>playsinline</title>
</head>
<body>
<h1>playsinline 属性</h1>
<!--
iOS Safari 默认全屏播放视频
添加 playsinline 属性可以在页面内内联播放
这对于自动播放的背景视频特别重要
-->
<!-- 推荐:添加 playsinline 避免 iOS 全屏 -->
<video src="promo.mp4"
autoplay muted loop playsinline
width="100%"
style="max-width: 640px;"></video>
<!-- 不推荐:iOS 上会强制全屏 -->
<!-- <video src="promo.mp4" autoplay muted loop></video> -->
</body>
</html>playsinline 的重要性
在 iOS 10+ 的 Safari 中,不添加 playsinline 属性的视频会自动全屏播放。如果你需要在页面中内联播放视频(如背景视频、产品展示),务必添加此属性。
多 source 格式回退
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>多格式回退</title>
</head>
<body>
<h1>视频格式回退</h1>
<video controls poster="cover.jpg" width="640" height="360">
<!-- 浏览器按顺序检查,使用第一个支持的格式 -->
<source src="movie.webm" type="video/webm; codecs=vp9">
<source src="movie.mp4" type="video/mp4; codecs=avc1.42E01E">
<!-- 降级内容 -->
<p>您的浏览器不支持 HTML5 视频。请
<a href="movie.mp4">下载视频文件</a>。
</p>
</video>
</body>
</html>实战示例
响应式视频播放器
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>响应式视频</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.video-wrapper {
position: relative;
width: 100%;
padding-bottom: 56.25%; /* 16:9 宽高比 */
background: #000;
border-radius: 12px;
overflow: hidden;
}
.video-wrapper video {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
</head>
<body>
<h1>响应式视频播放器</h1>
<div class="video-wrapper">
<video controls playsinline preload="metadata"
poster="video-cover.jpg">
<source src="movie.webm" type="video/webm">
<source src="movie.mp4" type="video/mp4">
<p>您的浏览器不支持 HTML5 视频。</p>
</video>
</div>
</body>
</html>注意事项
- 始终设置
width和height或使用 CSS 保持宽高比 - iOS Safari 需要
playsinline属性来内联播放视频 autoplay需要配合muted才能在大多数浏览器中工作poster图片应使用与视频相同的宽高比- 大视频文件应使用
preload="none"避免浪费带宽 <video>标签内的文本仅在浏览器不支持时显示
最佳实践
- 始终添加
controls属性(除非是纯背景视频) - 设置
poster封面图提升首屏体验 - iOS 端添加
playsinline避免强制全屏 - 提供 WebM + MP4 两种格式确保兼容性
- 使用
preload="metadata"平衡加载速度和带宽 - 使用 CSS
aspect-ratio或 padding-bottom 实现响应式视频容器
下一节
继续学习:source 媒体源