【问题标题】:Container's width not wrapping around width:auto <video>容器的宽度不环绕 width:auto <video>
【发布时间】:2015-09-29 00:40:39
【问题描述】:

如标题所述,如果我将&lt;video&gt; 包装在&lt;div&gt; 容器中(以进一步添加覆盖),该容器设置为relative; inline-block; height:100%;&lt;video&gt; 的大小为height:100%; width:auto 这就是全部初始页面渲染不错,但一旦您调整页面大小,视频就会缩小/增长,但容器的宽度保持不变。

这里有一个代码笔:http://codepen.io/MaxYari/pen/PqeOQY
试着改变窗口的高度,看看我的意思。

换句话说 - 我想制作一个包裹&lt;video&gt;标签的容器,它本质上保持其纵横比。
这个 div-video 结构必须适合更大的容器列表。
根据container-list 的方向,适合较大的一侧。即height: 100% 水平。
单独的CSS肯定可以针对不同的方向进行,因此我只想解决一种情况,假设它会解决两种情况。

编辑:更新了 Pen 并为视频包装器添加了一个边框,以更好地说明它的非包装性。

【问题讨论】:

  • 除非宽度被指定为百分比值,否则当您调整文档/窗口大小时它不会改变,我说的当然是您的容器。
  • @slash197 但它包裹在正在调整窗口大小的元素周围。看起来像一个意外的行为,不是吗?无论如何,解决方法?在&lt;video&gt; 周围有一个warapper,适合容器(在宽度或高度上,容器可以垂直定向)并保持纵横比(我不确定纵横比,这些视频来自网络摄像头)
  • 这是一个百分比示例,按预期工作jsfiddle.net/slash197/p9Lm2hde。这一点都不意外,当 dom 加载/渲染时,所有元素都具有固定值大小,并且它们不会调整窗口大小(与其子元素具有什么属性无关),除非它是一个百分比。
  • @slash197 肯定可以,但我不能将其设置为宽度百分比。我改为锚定高度百分比(在我的小提琴中为 30%),并希望在里面有一个水平视频列表以适应它并正确调整大小
  • 哇,我虽然这个问题会死,但会检查答案......

标签: html css responsive-design html5-video


【解决方案1】:

在 Firefox 中,您似乎可以像这样将 display: inline-block; 更改为 display: inline-flex;

Example - 不适用于 Google Chrome;对于带有一些 JavaScript 的多浏览器解决方案,请往下看

body,
html {
  height: 100%;
}
#videos {
  position: relative;
  height: 30%;
  background-color: rgba(0, 0, 0, 0.8);
}
.video_wrapper {
  height: 100%;
  display: inline-flex; /* see change here */
}
.video {
  height: 100%;
  width: auto;
}
<div id="videos">
  <div class="video_wrapper">
    <video class="video" autoplay src="http://techslides.com/demos/sample-videos/small.mp4"></video>
  </div>
  <div class="video_wrapper">
    <video class="video" autoplay src="http://techslides.com/demos/sample-videos/small.mp4"></video>
  </div>
</div>

MDN Documentation

Can I use compatibility table


看起来让它在 Chrome 中工作的唯一方法是在调整窗口大小时force a repaint

Working Example

$(window).resize(function () {
    $('.video_wrapper').hide().show(0);
});

Chrome 似乎有流畅视频的问题,看起来和object-fit property 有关系,幸运的是你可以用上面的方法解决它。

【讨论】:

  • 调整高度 - 相同的行为,视频被缩小,但红色边框没有环绕它们,而是保持以前的宽度
  • @MaxYari 你用什么浏览器测试?
  • 最新的谷歌浏览器。我正在缩小window 的高度,video 的高度随着水平容器而变小,但它们周围的包装保持相同的宽度,视频居中。
  • @MaxYari 我想我现在可能拥有它。
  • 等等我说对了吗,你只是通过在元素 onresize 上使用 hide-show 来强制 css 重新计算,我没有遗漏任何东西吗?我想过通过影响 js 的样式来触发重新计算,但从未尝试过。刚刚注意到问题的更新部分......无论如何,这只是美丽,骇人听闻,是的,但美丽。感谢您的时间和努力,很好的回答;)我建议您以这种方式编辑您的帖子,这样顶级小提琴链接不会引起读者的注意(因为它不是)。
【解决方案2】:

实际上只是设置 .video 包装器不会保留在它的容器中。

你将不得不为 body 和 html 选择器设置一个最小宽度。使用流体宽度是导致其容器逃逸的原因。

所以新的 CSS 看起来像

body,html {
  height: 100%;
  min-width: 1024px;
}
#videos {
  position: relative;
  height: 30%;
  background-color: rgba(0,0,0,0.8);  
}
.video_wrapper {
  height: 100%;
  display: inline-block;
}
.video {
  height: 100%;
  width: auto;
}

【讨论】:

  • 也许它背后有一些魔力,但似乎,您正试图通过设置min-width 来修复#videos 容器的溢出问题(该问题也可以是固定宽度不换行和水平滚动)。这不是这里问题的主题,我说的是这样一个事实,当你缩小窗口的高度时.video_wrappers 保持相同的宽度,但video 本身会缩小;而我需要.video_wrappervideo 一起缩小。
【解决方案3】:

您没有在视频包装器中指定任何宽度

.video_wrapper {
  height: 100%;
  display: inline-block;
}

像这样添加百分比宽度:

.video_wrapper {
  width: 100%;
  height: 100%;
  display: inline-block;
}

【讨论】:

  • 我不想,让我们假设,这些视频可以是任何宽高比,因此宽度是未知的,但高度必须适合具有高度:100% 的容器
猜你喜欢
  • 2011-08-04
  • 2021-01-03
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2019-02-04
相关资源
最近更新 更多