缩放HTML5视频和中断宽高比以填充整个站点

Rol*_*and 20 css html5 html5-video

我想在网站上使用4:3视频作为背景,但将宽度和高度设置为100%不起作用,因为纵横比保持不变,因此视频不会填满网站的整个宽度.

谢谢你的帮助!

这是我的html和css代码

HTML:

<!DOCTYPE HTML>
<html land="en">

<head>

<link rel="stylesheet" type="text/css" href="html5video.css" />


<title>html 5 video test</title>


</head>

<body id="index">

<video id="vidtest" autoplay>
<source src="data/comp.ogv" type="video/ogg" width="auto" >
</video>

<div class="cv">

<p>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>

</div>


</body>
</html>
Run Code Online (Sandbox Code Playgroud)

CSS:

body
{
background-color:#000000;
}



#vidtest {
position: fixed;
top: 0px;
left: 0px;
right: 0px;
bottom: 0px;
width: 200%;
height: 100%;
z-index: -1000;
}

.cv
{
width: 800px;
position:relative;
text-align:center;
margin-top: 100px;
color:#FFFFFF;
font-family:"Arial";
font-size: 10px;
line-height: 2em;
text-shadow: 3px 3px 2px #383838;
margin-left: auto;
margin-right: auto;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ias 56

这是一个非常古老的主题,我知道,我提议的并不一定是你正在寻找的解决方案,但对于所有因为搜索我搜索的内容而来到这里的人:缩放视频以填充视频容器元素,保持比例完好

如果您希望视频填充<video>元素的大小,但视频已正确缩放以填充容器,同时保持宽高比,您可以使用CSS执行此操作object-fit.与background-size背景图像非常相似,您可以使用以下内容:

video {
    width: 230px;
    height: 300px;
    object-fit: cover;
}
Run Code Online (Sandbox Code Playgroud)

我希望这对某些人有帮助.

编辑:适用于大多数浏览器,但IE

  • 物体贴合:覆盖; 天哪,我爱你 (8认同)
  • 令人遗憾的是,尽管 Google、Mozilla 和 Otello 共同做出了人道主义努力,但仍有许多人受到 IE 的困扰。 (3认同)
  • 同意@Nathan,“object-fit:fill;”是OP和我正在寻找的,但非常感谢您指明了正确的方向!;) (2认同)

Oua*_*die 14


您可以使用:

min-width: 100%;
min-height: 100%;
Run Code Online (Sandbox Code Playgroud)

http://www.codesynthesis.co.uk/tutorials/html-5-full-screen-and-responsive-videos

  • 当然这将是 max-width: 100%; 最大高度:100%;宽度和高度属性分别设置为 100vw 和 100vh 以及 object-fit 和可能的 margin auto ? (2认同)

dru*_*dge 10

http://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/

[...]与img元素的方式相同 - 如果您只设置宽度和高度之一,则会自动调整另一个尺寸,以便视频保留其宽高比.但是 - 与img元素不同 - 如果将宽度和高度设置为与视频宽高比不匹配的内容,则视频不会拉伸以填充框.相反,视频保留正确的宽高比,并在视频元素内使用letterbox.视频将在视频元素内尽可能大地呈现,同时保持纵横比.


Jim*_*ers 8

我通过比较元素与源视频的比率然后应用CSS转换来解决这个问题:https://gist.github.com/1219207


小智 8

对我有用的是

video {
object-fit: fill;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你。这实际上打破了纵横比,这正是 OP 所要求的。 (2认同)

Sha*_*ane 6

昨天选了这个,并一直在争取答案.这有点类似于Jim Jeffers的建议,但它适用于x和y缩放,是javascript语法,只依赖于jQuery.它似乎工作得很好:

function scaleToFill(videoTag) {
    var $video = $(videoTag),
        videoRatio = videoTag.videoWidth / videoTag.videoHeight,
        tagRatio = $video.width() / $video.height();
    if (videoRatio < tagRatio) {
        $video.css('-webkit-transform','scaleX(' + tagRatio / videoRatio  + ')')
    } else if (tagRatio < videoRatio) {
        $video.css('-webkit-transform','scaleY(' + videoRatio / tagRatio  + ')')
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你正在使用本机控件,你会遇到一些问题,你可以在这个小提琴中看到:http: //jsfiddle.net/MxxAv/

由于我当前项目中的所有抽象层,我有一些不寻常的要求.因为我在示例中使用了包装器div,并且在包装器内将视频缩放到100%以防止在我遇到的一些极端情况中出现问题.


Dmi*_*nko 5

如果该object-fit属性不适合您(WebView、Android 等),您可以自己计算视频的高度。

例如,对于视频,16:9高度为calc(100vw * 9 / 16)

.video-wrapper {
    width: 100%;
    height: calc(100vw * 9 / 16);
    position: relative;
}

video {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
}
Run Code Online (Sandbox Code Playgroud)