模拟背景大小:在<video>或<img>上显示


154

如何background-size:cover在html元素(例如<video>或)上模拟的功能<img>

我希望它像

background-size: cover;
background-position: center center;

1
好的,我从未使用过background-size:cover; 但我在网上看过它,那么您想要的是一种在窗口调整大小时调整全屏图像/视频大小的方法吗?
Lennart

是的,但是带有一些细微之处cover。请参阅link的背景大小101 。
seron

可以,以便简化图像/视频的100%宽度,如果出现溢出,它会被剪切吗?如果您愿意,可以查看是否可以编写代码,但是对于视频,请记住您需要自定义播放器,因为在大多数浏览器中,控件位于播放器的底部,如果存在,控件将被删除。是一个溢出...
Lennart

是的,在两侧均等地溢出。我知道视频控件的问题。
seron

1
我认为,如果窗口比图像高,它将在垂直轴的某处留下空白。在这种情况下,图像应该在侧面溢出,并且其高度与窗口相同。当窗口比图像宽时,应该发生相反的情况。
seron

Answers:


142

这是我花了一段时间的努力,但我遇到了一个不使用任何脚本的出色解决方案,并且可以使用5行CSS(如果算上选择器和括号,则为9行)可以对视频进行完美的封面模拟)。缺少CSS3-compatibility,它有0个无法完美工作的边缘情况

你可以在这里看到一个例子

Timothy解决方案的问题在于,它无法正确处理缩放比例。如果周围的元素小于视频文件,则不会按比例缩小。即使您为视频标签指定了一个很小的初始大小(如16px x 9px),auto最终也将其强制为最小的本机文件大小。使用此页面上当前投票最多的解决方案,对于我来说,缩小视频文件的大小以导致急剧的缩放效果是不可能的。

但是,如果知道视频的宽高比,例如16:9,则可以执行以下操作:

.parent-element-to-video {
    overflow: hidden;
}
video {
    height: 100%;
    width: 177.77777778vh; /* 100 * 16 / 9 */
    min-width: 100%;
    min-height: 56.25vw; /* 100 * 9 / 16 */
}

如果视频的父元素设置为覆盖整个页面(例如position: fixed; width: 100%; height: 100vh;),那么视频也将覆盖。

如果您还希望视频居中,则可以使用surefire居中方法:

/* merge with above css */
.parent-element-to-video {
    position: relative; /* or absolute or fixed */
}
video {
    position: absolute;
    left: 50%; /* % of surrounding element */
    top: 50%;
    transform: translate(-50%, -50%); /* % of current element */
}

当然vwvhtransform是CSS3,所以如果你需要用多少旧的浏览器兼容,你需要使用脚本。


3
这是最好的答案。没有javascript,纯CSS可以正确缩放并居中。
mark.monteiro'Mar 31'16

6
嗯,是的 这是2016年的答案。忽略其他所有内容。
乔什·伯森

您是否愿意解释为什么这样做?我不能把头缠住它。什么vhvw有什么关系呢?
commonpike

1
@insidesin:发表小提琴?
M-Pixel

1
在2020年,最好的解决方案是对象拟合:如Daniëlde Wit
Brett Donald

128

jsFiddle

使用背景封面适合图像,宽度100%也适用。这些不是的最佳选择<video>,而且这些答案过于复杂。您不需要jQuery或JavaScript即可完成全宽视频背景。

请记住,我的代码不会像视频封面那样完全覆盖背景,但是它将使视频达到保持纵横比并仍覆盖整个背景所需的大小。任何多余的视频都会从页面边缘流血,这取决于您锚定视频的位置。

答案很简单。

只需使用此HTML5视频代码或类似的代码:(在整页中测试)

html, body {
  width: 100%; 
  height:100%; 
  overflow:hidden;
}

#vid{
  position: absolute;
  top: 50%; 
  left: 50%;
  -webkit-transform: translateX(-50%) translateY(-50%);
  transform: translateX(-50%) translateY(-50%);
  min-width: 100%; 
  min-height: 100%; 
  width: auto; 
  height: auto;
  z-index: -1000; 
  overflow: hidden;
}
<video id="vid" video autobuffer autoplay>
  <source id="mp4" src="http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4" type="video/mp4">
</video>

最小高度和最小宽度将使视频保持视频的长宽比,通常是任何普通浏览器在正常分辨率下的长宽比。任何多余的视频都会从页面侧面渗出。


2
这比其他答案要简单得多,对我来说很好。只是设置min-widthmin-height完成技巧。
瑞恩·伯尼

31
此解决方案不会像封面那样使视频居中。
weotch

1
只是为了防止新手拔头发而发表的评论:#video_background {应该是#videobackground {。
carrabino

21
这根本不会按比例缩小视频(我没有尝试按比例放大视频),如果浏览器窗口较小且视频较大,则会导致许多问题。因此,基本上,它只处理背景大小的出血部分:覆盖,而不是缩放部分。
凯文·纽曼

4
对于当前的技术,这应该是公认的答案:CSS解决方案比Javascript解决方案更可取。即使它要求您正确设置parentNode。要使视频居中,请使用:position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%);
Sjeiti 2014年

100

对于某些浏览器,您可以使用

object-fit: cover;

http://caniuse.com/object-fit


15
这是一个非常有力的声明,如果浏览器采用了它,则将消除在网站上扩展内容的许多麻烦。
Mike Kormendy 2014年

1
这正是我想要的!
Peter_Fretter

3
对于那些不支持它的浏览器,还有一个polyfill
creimers 2014年

7
也必须申请height: 100%; width: 100%;。感谢您提供现代答案
Jossef Harush

我根据这个例子给出了答案和示例。感谢您指出此功能!
aloisdg移至codidact.com,2016年

43

这是我的方法。一个有效的示例在此jsFiddle中

var min_w = 300; // minimum video width allowed
var vid_w_orig;  // original video dimensions
var vid_h_orig;

jQuery(function() { // runs after DOM has loaded

  vid_w_orig = parseInt(jQuery('video').attr('width'));
  vid_h_orig = parseInt(jQuery('video').attr('height'));
  $('#debug').append("<p>DOM loaded</p>");

  jQuery(window).resize(function () { resizeToCover(); });
  jQuery(window).trigger('resize');
});

function resizeToCover() {
  // set the video viewport to the window size
  jQuery('#video-viewport').width(jQuery(window).width());
  jQuery('#video-viewport').height(jQuery(window).height());

  // use largest scale factor of horizontal/vertical
  var scale_h = jQuery(window).width() / vid_w_orig;
  var scale_v = jQuery(window).height() / vid_h_orig;
  var scale = scale_h > scale_v ? scale_h : scale_v;

  // don't allow scaled width < minimum video width
  if (scale * vid_w_orig < min_w) {scale = min_w / vid_w_orig;};

  // now scale the video
  jQuery('video').width(scale * vid_w_orig);
  jQuery('video').height(scale * vid_h_orig);
  // and center it by scrolling the video viewport
  jQuery('#video-viewport').scrollLeft((jQuery('video').width() - jQuery(window).width()) / 2);
  jQuery('#video-viewport').scrollTop((jQuery('video').height() - jQuery(window).height()) / 2);

  // debug output
  jQuery('#debug').html("<p>win_w: " + jQuery(window).width() + "</p>");
  jQuery('#debug').append("<p>win_h: " + jQuery(window).height() + "</p>");
  jQuery('#debug').append("<p>viewport_w: " + jQuery('#video-viewport').width() + "</p>");
  jQuery('#debug').append("<p>viewport_h: " + jQuery('#video-viewport').height() + "</p>");
  jQuery('#debug').append("<p>video_w: " + jQuery('video').width() + "</p>");
  jQuery('#debug').append("<p>video_h: " + jQuery('video').height() + "</p>");
  jQuery('#debug').append("<p>vid_w_orig: " + vid_w_orig + "</p>");
  jQuery('#debug').append("<p>vid_h_orig: " + vid_h_orig + "</p>");
  jQuery('#debug').append("<p>scale: " + scale + "</p>");
};
#video-viewport {
  position: absolute;
  top: 0;
  overflow: hidden;
  z-index: -1; /* for accessing the video by click */
}

#debug {
  position: absolute;
  top: 0;
  z-index: 100;
  color: #fff;
  font-size: 12pt;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="video-viewport">
  <video autoplay controls preload width="640" height="360">
    <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4"type="video/mp4" />
    <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.webm"type="video/webm" />
    <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.ogv"type="video/webm" />
  </video>
</div>

<div id="debug"></div>


为什么此解决方案被否决?出于所有目的和目的,似乎可以解决问题。
1

2
这是我找到的最佳解决方案。谢谢!
Chaser324

1
如果视频较大而窗口较小,则此方法效果很好,但如果窗口大于视频且需要放大视频,则对我而言将不起作用。我将@ Timothy-Ryan-Carpenter的最小技巧(在此处回答)添加为:video { min-width: 100%; min-height: 100%; },它就像一个魅力一样工作。
Alexandre DuBreuil 2014年

我发现这种方法也很有用,并将其打包为任何感兴趣的简单jQuery插件:github.com/aMoniker/jquery.videocover
Jim Greenleaf

尽管@AlexandreDuBreuil说了什么,但它可以将视频按比例放大(请自己看:fiddle.jshell.net/GCtMm/show)。这绝对是最好的解决方案。与此处的其他答案相比,JS太沉重了,但这是您想要background-size: cover视频的需求。
Chuck Le Butt 2015年

14

其他答案很好,但是它们涉及到JavaScript,或者没有使视频水平和垂直居中。

您可以使用此完整的CSS解决方案来制作一个模拟background-size:cover属性的视频:

  video {
    position: fixed;           // Make it full screen (fixed)
    right: 0;
    bottom: 0;
    z-index: -1;               // Put on background

    min-width: 100%;           // Expand video
    min-height: 100%;
    width: auto;               // Keep aspect ratio
    height: auto;

    top: 50%;                  // Vertical center offset
    left: 50%;                 // Horizontal center offset

    -webkit-transform: translate(-50%,-50%);
    -moz-transform: translate(-50%,-50%);
    -ms-transform: translate(-50%,-50%);
    transform: translate(-50%,-50%);         // Cover effect: compensate the offset

    background: url(bkg.jpg) no-repeat;      // Background placeholder, not always needed
    background-size: cover;
  }

这对我不起作用。该视频无法按比例放大到全屏。我可以在这个示例中看到您的html吗?它只是体内的视频标签吗?
马特2014年

真的很好的解决方案。一开始它对我不起作用,但是当我复制并粘贴您的css时,可能是我错过的原因,它起作用了!谢谢;)
rafaelbiten

2
对我来说很棒。我只是更改了位置:已固定为绝对值
阿萨夫·卡茨

14

根据Daniel de Wit的回答和评论,我搜索了更多内容。感谢他的解决方案。

解决方案是使用object-fit: cover;它具有强大的支持(每个现代的浏览器都支持它)。如果您确实想支持IE,则可以使用诸如object-fit-imagesobject-fit之类的polyfill 。

演示:

img {
  float: left;
  width: 100px;
  height: 80px;
  border: 1px solid black;
  margin-right: 1em;
}
.fill {
  object-fit: fill;
}
.contain {
  object-fit: contain;
}
.cover {
  object-fit: cover;
}
.none {
  object-fit: none;
}
.scale-down {
  object-fit: scale-down;
}
<img class="fill" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
<img class="contain" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
<img class="cover" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
<img class="none" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
<img class="scale-down" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>

和父母一起:

div {
  float: left;
  width: 100px;
  height: 80px;
  border: 1px solid black;
  margin-right: 1em;
}
img {
  width: 100%;
  height: 100%;
}
.fill {
  object-fit: fill;
}
.contain {
  object-fit: contain;
}
.cover {
  object-fit: cover;
}
.none {
  object-fit: none;
}
.scale-down {
  object-fit: scale-down;
}
<div>
<img class="fill" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div><div>
<img class="contain" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div><div>
<img class="cover" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div><div>
<img class="none" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div><div>
<img class="scale-down" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div>


1
最佳现代答案。
Routhinator '16

1
这是任何针对现代浏览器的人的答案。使用object-fit: coverwidthheight设置为100%,你会得到一个按比例缩放imgvideo没有任何大惊小怪的中心缩放。
phip

13

M-Pixel的解决方案很棒,因为它解决了Timothy的答案的缩放问题(视频将放大但不会缩小,因此,如果您的视频确实很大,则很有可能只看到其中一部分被放大)。但是,该解决方案基于与视频容器的大小有关的错误假设,即它必须是视口的宽度和高度的100%。我发现了一些不适用于我的情况,所以我决定自己解决问题,并且我相信我想出了最终的解决方案

的HTML

<div class="parent-container">
    <div class="video-container">
        <video width="1920" height="1080" preload="auto" autoplay loop>
            <source src="video.mp4" type="video/mp4">
        </video>
    </div>
</div>

的CSS

.parent-container {
  /* any width or height */
  position: relative;
  overflow: hidden;
}
.video-container {
  width: 100%;
  min-height: 100%;
  position: absolute;
  left: 0px;
  /* center vertically */
  top: 50%;
  -moz-transform: translate(0%, -50%);
  -ms-transform: translate(0%, -50%);
  -webkit-transform: translate(0%, -50%);
  transform: translate(0%, -50%);
}
.video-container::before {
  content: "";
  display: block;
  height: 0px;
  padding-bottom: 56.25%; /* 100% * 9 / 16 */
}
.video-container video {
  width: auto;
  height: 100%;
  position: absolute;
  top: 0px;
  /* center horizontally */
  left: 50%;
  -moz-transform: translate(-50%, 0%);
  -ms-transform: translate(-50%, 0%);
  -webkit-transform: translate(-50%, 0%);
  transform: translate(-50%, 0%);
}

它也是基于视频的比率,因此,如果视频的比率不是16/9,则需要更改底部填充百分比。除此之外,它开箱即用。在IE9 +,Safari 9.0.1,Chrome 46和Firefox 41中进行了测试。

编辑(2016年3月17日)

由于我张贴了这个答案我写了一个小的CSS模块来模拟background-size: coverbackground-size: contain<video>元素:http://codepen.io/benface/pen/NNdBMj

它支持视频的不同对齐方式(类似于background-position)。还要注意,contain实现并不完美。与不同的是background-size: contain,如果容器的宽度和高度较大,它不会将视频缩放到超出其实际大小,但是我认为在某些情况下它仍然有用。我还添加了特殊类fill-widthfill-height类,您可以将其与一起使用contain以获得特殊的组合,contain然后cover尝试一下,并随时进行改进!


无论如何,这都不会将视频缩放到正常分辨率以上以使其适合100%的宽度/高度。因此,它不是在复制“封面”功能。
jetlej

@jetlej它在这里。您正在测试哪种浏览器?你看我的codepen了吗?
benface '16

1
对于我来说,它可以很好地作为Edge的后备。欢呼声
MrThunder

@MrThunder如果将其用作备用,您将使用什么作为主要解决方案?
benface

1
@ benoitr007我用于object-fit: coverFF和chrome,以及用于
Modernie的


4

CSS和小js可以使视频覆盖背景并水平居中。

CSS:

video#bgvid {
    position: absolute;
    bottom: 0px; 
    left: 50%; 
    min-width: 100%; 
    min-height: 100%; 
    width: auto; 
    height: auto; 
    z-index: -1; 
    overflow: hidden;
}

JS :(将其与窗口调整大小绑定并分别调用一次)

$('#bgvid').css({
    marginLeft : '-' + ($('#bgvid').width()/2) + 'px'
})

3

在我们的长评论部分之后,我想这就是您要寻找的,它基于jQuery:

HTML:

<img width="100%" id="img" src="http://uploads8.wikipaintings.org/images/william-adolphe-bouguereau/self-portrait-presented-to-m-sage-1886.jpg">

JS:

<script type="text/javascript">
window.onload = function(){
       var img = document.getElementById('img')
       if(img.clientHeight<$(window).height()){
            img.style.height=$(window).height()+"px";
       }
       if(img.clientWidth<$(window).width()){
            img.style.width=$(window).width()+"px";
       } 
}
​</script>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

CSS:

body{
    overflow: hidden;
}

``如果您在div中执行此操作,则上面的代码将使用浏览器的宽度和高度,您必须将其更改为如下所示:

对于Div:

HTML:

<div style="width:100px; max-height: 100px;" id="div">
     <img width="100%" id="img" src="http://uploads8.wikipaintings.org/images/william-adolphe-bouguereau/self-portrait-presented-to-m-sage-1886.jpg">
</div>

JS:

<script type="text/javascript">
window.onload = function(){
       var img = document.getElementById('img')
       if(img.clientHeight<$('#div').height()){
            img.style.height=$('#div').height()+"px";
       }
       if(img.clientWidth<$('#div').width()){
            img.style.width=$('#div').width()+"px";
       } 
}
​</script>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

CSS:

div{
   overflow: hidden;
}

我还应该指出,我只测试了这是Google Chrome浏览器...这是一个jsfiddle:http : //jsfiddle.net/ADCKk/


当我更改Result框架的大小或浏览器大小时,jsfiddle似乎不执行任何操作。我在Chrome浏览器中尝试过。
seron

我已经更新了它,但是我仍然有一个小问题,如果您将宽度减小到很多,它会突然跳... jsfiddle.net/ADCKk/1
Lennart

好的,抱歉,但我一无所知,我已经尝试了很多事情,我觉得自己很困惑,我不确定是否有可能...上面的脚本仅在刷新页面时起作用,以使其正常工作当您调整窗口大小时,您需要在js中使用window.resize事件,但我无法使其正常运行,也许您可​​以使用该信息:)祝您好运
Lennart 2012年

3

当浏览器的宽度小于视频宽度时,最重要的答案不会按比例缩小视频。尝试使用此CSS(以#bgvid作为您的视频ID):

#bgvid {
     position: fixed;
     top: 50%;
     left: 50%;
     min-width: 100%;
     min-height: 100%;
     width: auto;
     height: auto;
     transform: translateX(-50%) translateY(-50%);
     -webkit-transform: translateX(-50%) translateY(-50%);
}

为什么z-index需要消极?
aleclarson

它不是-只是在设计多层元素时很有用。我已经删除了
Ramzi Dreessen

1

我也是gunna发布此解决方案的,因为我遇到了这个问题,但其他解决方案对我的情况不起作用...

我认为要正确模拟background-size:cover;元素的css属性而不是元素的background-image属性,您必须将图像的长宽比与当前的Windows长宽比进行比较,因此无论大小如何(以及图片是否为高而不是宽)窗口是元素正在填充窗口(并居中,尽管我不知道这是否是必需的)...。

使用图像,只是为了简单起见,我确定视频元素也可以正常工作。

首先获取元素的宽高比(一旦加载),然后附加窗口大小调整处理程序,触发一次以进行初始大小调整:

var img = document.getElementById( "background-picture" ),
    imgAspectRatio;

img.onload = function() {
    // get images aspect ratio
    imgAspectRatio = this.height / this.width;
    // attach resize event and fire it once
    window.onresize = resizeBackground;
    window.onresize();
}

然后在尺寸调整处理程序中,您应该首先通过将窗口的当前纵横比与图像的原始纵横比进行比较来确定是填充宽度还是填充高度。

function resizeBackground( evt ) {

// get window size and aspect ratio
var windowWidth = window.innerWidth,
    windowHeight = window.innerHeight;
    windowAspectRatio = windowHeight / windowWidth;

//compare window ratio to image ratio so you know which way the image should fill
if ( windowAspectRatio < imgAspectRatio ) {
    // we are fill width
    img.style.width = windowWidth + "px";
    // and applying the correct aspect to the height now
    img.style.height = (windowWidth * imgAspectRatio) + "px";
    // this can be margin if your element is not positioned relatively, absolutely or fixed
    // make sure image is always centered
    img.style.left = "0px";
    img.style.top = (windowHeight - (windowWidth * imgAspectRatio)) / 2 + "px";
} else { // same thing as above but filling height instead
    img.style.height = windowHeight + "px";
    img.style.width = (windowHeight / imgAspectRatio) + "px";
    img.style.left = (windowWidth - (windowHeight / imgAspectRatio)) / 2 + "px";
    img.style.top = "0px";
}

}


1

这种方法仅使用css和html。实际上,您可以轻松地在视频下方堆叠div。调整大小时,它是有盖的,但没有居中。

HTML:

<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css"> 
</script>
</head>
<body>
<div id = "contain">
<div id="vid">
    <video autoplay>
        <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4" type="video/mp4" />
    </video>
</div>
</div>
</body>
</html>

CCS:

/*
filename:style.css
*/
body {
    margin:0;
}

#vid video{
position: absolute; 
right: 0; 
top: 0;
min-width: 100%; 
min-height: 100%;
width: auto; 
height: auto; 
}

#contain {
width:100%;
height:100%;
zoom:1%;/*Without this the video will be stretched and skewed*/ 
}

1

隐藏的霍布斯

这个问题有悬赏悬赏,其隐藏的霍布斯的身分得到+100的声望,并在6天内结束。创造性地使用视口单元以获得仅CSS的灵活解决方案。

您为这个仅CSS解决方案的问题悬赏了,所以我将尝试一下。我对此类问题的解决方案是使用固定比例确定视频的高度和宽度。我通常使用Bootstrap,但是我从那里提取了必要的CSS,以使其无法工作。这是我之前使用的代码,主要用于使嵌入视频具有正确的比率。它也应该适用于<video><img>元素这是最相关的一个,但是我也给了你另外两个,因为我已经把它们放在一起了。祝你好运!:)

jsfiddle全屏示例

.embeddedContent.centeredContent {
    margin: 0px auto;
}
.embeddedContent.rightAlignedContent {
    margin: auto 0px auto auto;
}
.embeddedContent > .embeddedInnerWrapper {
    position:relative;
    display: block;
    padding: 0;
    padding-top: 42.8571%; /* 21:9 ratio */
}
.embeddedContent > .embeddedInnerWrapper > iframe {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    height: 100%;
    width: 100%;
    border: 0;
}
.embeddedContent {
    max-width: 300px;
}
.box1text {
    background-color: red;
}
/* snippet from Bootstrap */
.container {
    margin-right: auto;
    margin-left: auto;
}
.col-md-12 {
    width: 100%;
}
<div class="container">
    <div class="row">
        <div class="col-md-12">
            Testing ratio AND left/right/center align:<br />
            <div class="box1text">
                <div class="embeddedContent centeredContent">
                    <div class="embeddedInnerWrapper">
                        <iframe allowfullscreen="true" allowscriptaccess="always" frameborder="0" height="349" scrolling="no" src="//www.youtube.com/embed/u6XAPnuFjJc?wmode=transparent&amp;jqoemcache=eE9xf" width="425"></iframe>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="container">
    <div class="row">
        <div class="col-md-12">
            Testing ratio AND left/right/center align:<br />
            <div class="box1text">
                <div class="embeddedContent rightAlignedContent">
                    <div class="embeddedInnerWrapper">
                        <iframe allowfullscreen="true" allowscriptaccess="always" frameborder="0" height="349" scrolling="no" src="//www.youtube.com/embed/u6XAPnuFjJc?wmode=transparent&amp;jqoemcache=eE9xf" width="425"></iframe>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="container">
    <div class="row">
        <div class="col-md-12">
            Testing ratio AND left/right/center align:<br />
            <div class="box1text">
                <div class="embeddedContent">
                    <div class="embeddedInnerWrapper">
                        <iframe allowfullscreen="true" allowscriptaccess="always" frameborder="0" height="349" scrolling="no" src="//www.youtube.com/embed/u6XAPnuFjJc?wmode=transparent&amp;jqoemcache=eE9xf" width="425"></iframe>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


1
感谢您的回答@turbopipp,尽管恐怕您误解了我获得赏金的原因。我已经提出来,所以我可以将其授予现有答案,直到赏金活动持续24小时后,我才允许这样做。不过,为您的努力而+1,百分比填充技巧是确保元素保留正确长宽比的有用方法。
隐藏的霍布斯,2015年

啊哈,嗯,真的很麻烦,对您已经存在的答案给予赏金真的很高兴。我想我应该阅读赏金制度。:)谢谢
turbopipp 2015年

0

为了回答weotch的评论,蒂莫西·赖安·卡彭特Timothy Ryan Carpenter)的回答没有考虑cover到背景的居中,我提供了此CSS快速修复程序:

CSS:

margin-left: 50%;
transform: translateX(-50%);

将这两行相加将使任何元素居中。更好的是,所有可以处理HTML5视频的浏览器也都支持CSS3转换,因此这将始终有效。

完整的CSS如下所示。

#video-background { 
    position: absolute;
    bottom: 0px; 
    right: 0px; 
    min-width: 100%; 
    min-height: 100%; 
    width: auto; 
    height: auto; 
    z-index: -1000; 
    overflow: hidden;
    margin-left: 50%;
    transform: translateX(-50%);
}

我会直接对蒂莫西的回答发表评论,但我没有足够的声誉来评论。


0

伙计们,我有一个更好的解决方案,它对我的​​工作很完美。我用它来录像。并且它完美地模拟了CSS中的Cover选项。

Java脚本

    $(window).resize(function(){
            //use the aspect ration of your video or image instead 16/9
            if($(window).width()/$(window).height()>16/9){
                $("video").css("width","100%");
                $("video").css("height","auto");
            }
            else{
                $("video").css("width","auto");
                $("video").css("height","100%");
            }
    });

如果翻转if,否则将被包含。

这是CSS。(如果您不希望居中定位,则不需要使用它,父div必须为“ position:relative ”)

的CSS

video {
position: absolute;
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
top: 50%;
left: 50%;}

0

我刚刚解决了这个问题,想分享。该功能适用​​于Bootstrap4。适用于Bootstrap 4,img但我并未对其进行测试video。这是HAML和SCSS

HAML
.container
  .detail-img.d-flex.align-items-center
    %img{src: 'http://placehold.it/1000x700'}
SCSS
.detail-img { // simulate background: center/cover
  max-height: 400px;
  overflow: hidden;

  img {
    width: 100%;
  }
}

/* simulate background: center/cover */
.center-cover { 
  max-height: 400px;
  overflow: hidden;
  
}

.center-cover img {
    width: 100%;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
  <div class="center-cover d-flex align-items-center">
    <img src="http://placehold.it/1000x700">
  </div>
</div>


0

这是个老问题,但是如果有人看到了,我认为最好的答案是将视频转换为GIF动画。这给了您更多的控制权,您可以将其像图像一样对待。这也是在移动设备上运行的唯一方法,因为您无法自动播放视频。我知道问题是要在<img>标签中执行,但是我并没有真正看到使用a <div>background-size: cover


这是一个好主意,在某些情况下值得一试。唯一的缺点是(在我的情况下)*。gif文件大小更大。我将2.5MB * .mpeg转换为16MB * .gif。
Henning Fischer

我同意,而且通常情况下.gif,图片的大小要大得多,但也很模糊。自从我写了这个答案以来,我的观点已经改变。不能同时兼顾两者的优点真是可惜。
D-Marc '18

我最终得到了一个(缩短的)移动* .gif和一个桌面的* .mp4。
Henning Fischer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.