没有。video 元素默认无 margin,但因 display: inline 和 baseline 对齐,在行内布局中受 line-height、font-size 及换行符影响而“看似”有上下空隙。

video 元素默认有 margin 吗?
没有。HTML5 的 是替换元素(replaced element),本身不带默认 margin,但浏览器会为它应用默认的 display 值(通常是 inline)和相关排版行为——这会导致它像文字一样参与行内布局,受 line-height、vertical-align 和父容器字体大小影响,从而在上下“看起来”有空隙。
常见现象:视频上方紧贴标题,下方却多出 4–6px 空白;或多个 垂直堆叠时间距忽大忽小。
为什么 margin: 0 不总能解决问题?
因为问题往往不在 margin,而在:
-
默认是display: inline,底部对齐基线(baseline),下方留出“字母 g、j 下延部分”的空间 - 父容器若设置了
font-size或line-height,会放大这个间隙 - 视频后紧跟换行符或空白字符,也会被渲染为一个空格,参与行内流
解决建议:
立即学习“前端免费学习笔记(深入)”;
- 强制设为
display: block(最常用、最直接) - 或设
vertical-align: top/middle/bottom(适合仍需行内布局的场景) - 避免在
标签前后写换行或空格(即写成而非分多行)
统一控制上下间距的可靠写法
目标是让每个 上下留白一致、可预测,且不依赖父级字体设置:
- 统一重置显示模式:
video { display: block; } - 显式定义外边距:
video { margin-top: 1rem; margin-bottom: 1rem; }(避免用margin: 1rem 0,防止左右意外缩进) - 若需响应式,优先用
rem或em,慎用px(尤其移动端字体缩放时) - 如嵌套在 Flex/Grid 容器中,
display: block仍建议保留,避免旧版 Safari 对替换元素的 flex 行为异常
示例最小重置:
video {
display: block;
margin-top: 1.25rem;
margin-bottom: 1.25rem;
}遇到 object-fit + 间距错乱怎么办?
当用了 object-fit: cover 或 contain,视频内容缩放了,但元素框尺寸没变,此时若还保持 inline,vertical-align 依然按原始盒模型计算基线——容易加剧上下空隙不均。
关键点:
-
object-fit不改变元素的 layout box,只裁剪/缩放内容 - 所以仍需先确保
display: block - 若必须保 inline(比如和文字混排),则配合
vertical-align: middle并给父容器设font-size: 0(再单独给文字恢复字号)
真正省心的做法:别混排,用 block + 明确 margin,把控制权拿回来。
实际项目里,最常被忽略的是换行符和 inline 的隐式基线对齐——哪怕写了 margin: 0,空隙还在。











