【问题标题】:How can I make video size responsive with CSS Bootstrap grid?如何使用 CSS Bootstrap 网格使视频大小响应?
【发布时间】:2021-10-04 05:14:00
【问题描述】:

我有一个三行的 Bootstrap 网格,中间的网格有两列。在第一列中,我想显示视频的字幕列表,在另一列中显示视频。我正在尝试为左列(标题)设置固定宽度,在右列(视频)中设置响应宽度,但无法做到。我现在拥有的是这样的:

整个窗口大小:

这里整个页面中唯一的内容是视频,我这样做是为了简单并隔离这个问题中的问题。我为一些元素添加了彩色边框,以更好地显示我得到的行为。

我正在寻找的是在有空间的情况下让视频最大扩展至其宽度的 120%,并且当窗口缩小时,也随之缩小,但直到它达到其宽度的 80%宽度。发生这种情况时,我希望它保持在该宽度,并让整个div.containerscroll 溢出页面。我会尽力用图片来说明这一点,并确保我给出了一个很好的解释。

完整的窗口大小(不是真实的,尚未完成):

窗口缩小(不真实,尚未完成)

这将是整个内容应该开始溢出scroll 的最小宽度。

我不需要任何东西垂​​直收缩,它总是可以溢出。

HTML:

<body>
    <div class="container displayer-container">

      <div class="row top-row">
        <!-- Some content in the top row. -->
      </div>
      <!-- https://stackoverflow.com/questions/41943463/prevent-wrapping-stacking-of-columns-in-bootstrap-when-shrinking-the-size/41943639 -->
      <div class="row flex-nowrap mid-row">
        <div class="caps-container">
          <div class="cap-list">

          </div>
        </div>

        <div class="col player-container">
          <div class="video">
            <video controls>
              <source src="some_video.mp4" type="video/mp4">
            </video>
          </div>
        </div>
      </div>

      <div class="row bottom-row">
        <!-- Some content in the bottom row.-->
      </div>

    </div>
  </body>

CSS:

html {
  width: 100%;
  height: 100%;
}

body {
  /* background-color: rgb(30, 30, 30); */
  background-color: white;
  min-width: 100%;
  min-height: 100%;
  padding: 0% 1%;
}

.container {
  width: 100%;
  height: 100%;
  margin: 0;
  min-width: 100%;
  border: 1px solid yellow;
  overflow-y: scroll;
}



.mid-row {
 border: 1px solid green;
}

.caps-container {
  width: 550px;
  height: 550px;
  overflow-y: scroll;
}






.player-container {
  border: 1px solid red;
  width: 100%;
}

.video {
  border: 1px solid blue;
  width: 100%;
  height: auto;
}

video {
  min-width: 80%;
  max-width: 120%;
}

但是,在完整尺寸下,视频的大小不是120%,而是100%。当我缩小窗口时,当所有周围的 div 到达它时,视频就会缩小,并且缩小到 80% 以上,并且它也会溢出所有 div,如下所示:

简而言之,我有两个问题。一个是让视频有min-widthmax-width 我给它,另一个是它溢出了它的容器和所有祖先容器。导致它缩小的不是其父容器缺少可用空间,而是整个页面缺少可用空间。

前段时间我第一次尝试并成功地将视频定位到我想要的位置,将position: absolute 用于其容器,position: relative 用于其本身。但是我遇到了同样的响应问题,我正在从头开始尝试。

【问题讨论】:

    标签: html css


    【解决方案1】:

    您可以vh 测量单位相对于视口的高度和引导网格缩放容器以在浏览器窗口的宽度上显示列。您可以在这里了解更多信息:
    https://css-tricks.com/fun-viewport-units/

    .caps-container 的固定宽度可以通过覆盖 Bootstrap .col 的 flex 值来完成。在最终样式上,您不必添加!important,只需保留Bootstrap 后的自定义样式即可。在这里,情况正好相反。

    看看这个演示:
    CSS 保持在最低限度,您可以更轻松地进行调试。

    .top-row {
      height: 10vh;
    }
    .bottom-row {
      height: 10vh;
    }
    .caps-container,
    .player-container {
      height: 80vh;
    }
    .caps-container {
      flex: 0 0 300px !important; /* fixed width */
      overflow-y: auto;
    }
    .cap-list {
      height: 300vh; /* scroll test */
    }
    .video {
      max-width: 150vh;
      margin: 0 auto;
    }
    video {
      width: 100%;
      display: block;
    }
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet"/>
    
    <div class="container-fluid displayer-container">
    
      <div class="row bg-dark bg-opacity-10 text-center p-3 top-row">
        <!-- Some content in the top row. -->
      </div>
      <div class="row mid-row">
        <div class="col bg-dark bg-opacity-25 caps-container">
          <div class="cap-list py-3">
            <h5>Scrollable Cap List</h5> 
            <p>Vestibulum lacinia ligula tincidunt leo vehicula vulputate. Nullam maximus vestibulum felis. Ut nec egestas est. Cras vestibulum, lorem nec consectetur molestie, augue magna mollis metus, sed varius elit orci a mauris. Vestibulum at risus at magna malesuada ornare id et elit.</p>
          </div>
        </div>
    
        <div class="col py-3 player-container">
          <div class="video">
            <video controls>
              <source src="some_video.mp4" type="video/mp4">
            </video>
          </div>
        </div>
      </div>
    
      <div class="row bg-dark bg-opacity-10 text-center p-3 bottom-row">
        <!-- Some content in the bottom row.-->
      </div>
    
    </div>

    【讨论】:

    • 这可以很好地避免&lt;video&gt; 的溢出。我没有在&lt;video&gt; 上使用width: 100%,因为它可能太小而且可用空间太大而无法拉伸那么多。我再次尝试使用它,但没有溢出,但我仍然无法将min-width 应用于它。为什么min-widthmax-width 不适用于这里?我怎样才能做到这一点?我希望它在到达80% 时停止收缩,并使整个页面溢出scroll
    • 为什么需要最小和最大宽度?只需使用父容器。这就是我添加width: 100%;的原因。
    • 对。您的意思是控制父容器的max-widthmin-width 而不是&lt;video&gt; 的那些?我需要控制视频的大小,这样如果它很小,它就不会拉伸太多,所以当它缩小很多时它不会变得太小。实际上,我一直在考虑使用 .ajax 将视频的固有大小发送到浏览器,然后使用 JavaScript 将 min-widthmax-width 应用到父级。这听起来有道理吗?
    • 对于max-width,我认为没关系,因为你不希望视频变得太大而底部没有足够的空间。您应该以像素或其他度量单位给出这些值。但不是百分比,因为它不会如你所愿。
    • 如果视口高度较小,则有助于视频不会超过.bottom-row
    猜你喜欢
    • 2023-01-16
    • 2020-08-17
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多