You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Video.js实现视频填满Div无黑边,控制栏匹配视频宽度

解决Video.js fill模式下黑边与控制栏宽度不匹配问题

问题现象

使用vjs-fill模式时出现两个问题:

  • 视频左右两侧出现黑边,无法填满容器可用区域
  • 控制栏宽度拉满容器100%,没有和视频实际宽度对齐

需求目标

视频按原始比例填满容器可用区域,但不超过自身原始尺寸;同时避免垂直滚动,因此不使用fluid选项。

解决方案

1. 移除vjs-fill类,改用自定义样式控制缩放

vjs-fill会强制播放器填满容器,忽略视频原始比例导致黑边。我们需要让视频按比例自适应,同时限制最大尺寸为原始分辨率。

2. 容器与播放器样式调整

通过CSS设置容器的溢出隐藏和居中布局,同时给播放器设置最大宽高限制,确保视频缩放不超限。

3. 控制栏宽度对齐

调整控制栏样式,让它自动跟随视频的实际宽度,避免超出视频范围。

修改后的完整代码

<script src="https://unpkg.com/video.js/dist/video.js"></script>
<link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet"/>

<style>
  .video-container {
    width: 100%;
    height: 300px;
    overflow: hidden;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .video-js {
    max-width: 1280px; /* 替换为你的视频原始宽度 */
    max-height: 720px; /* 替换为你的视频原始高度 */
    width: auto !important;
    height: auto !important;
  }
  .video-js .vjs-control-bar {
    width: 100% !important;
    left: 0 !important;
  }
</style>

<div class="video-container">
  <video id="my_video" class="video-js" controls muted preload="auto" data-setup='{"fluid": false}'>
    <source src="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" type="video/mp4">
  </video>
</div>

动态获取视频原始尺寸(可选)

如果不清楚视频的原始宽高,可以用JS动态获取后设置给播放器:

document.addEventListener('DOMContentLoaded', function() {
  const videoElement = document.querySelector('#my_video');
  const player = videojs('my_video');
  
  videoElement.addEventListener('loadedmetadata', function() {
    const naturalWidth = videoElement.videoWidth;
    const naturalHeight = videoElement.videoHeight;
    player.el().style.maxWidth = `${naturalWidth}px`;
    player.el().style.maxHeight = `${naturalHeight}px`;
  });
});

内容的提问来源于stack exchange,提问作者Toniq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:47:17