我的网站上嵌入了全屏YouTube视频。
当浏览器的大小与视频的宽度和高度成比例时,它看起来很不错。但是,当我将浏览器调整为不同比例时,我会在视频周围出现黑条。
我想要的是让视频始终填满整个窗口,但没有任何拉伸。当浏览器大小与视频不成比例时,我希望隐藏“多余”。
我想要实现的目标是您可以在这两个网站的背景中看到的内容:http://ginlane.com/和http://www.variousways.com/。
是否可以使用YouTube视频执行此操作?
答案 0 :(得分:9)
这已经很老了,但人们可能仍然需要帮助。我也需要这个,所以创建了一个我的解决方案的笔,应该有所帮助 - http://codepen.io/MikeMooreDev/pen/QEEPMv
该示例显示了同一视频的两个版本,一个是标准的,第二个是裁剪的,并且居中对齐以适应完整父元素的大小而不显示可怕的黑条。
您需要使用一些javascript来计算视频的新宽度,但如果您知道宽高比,则非常简单。
HTML
<div id="videoWithNoJs" class="videoWrapper">
<iframe src="https://www.youtube.com/embed/ja8pA2B0RR4" frameborder="0" allowfullscreen></iframe>
</div>
CSS - videoWrapper的高度和宽度可以是任何东西,如果你愿意,它们可以是百分比
.videoWrapper {
height:600px;
width:600px;
position:relative;
overflow:hidden;
}
.videoWrapper iframe {
height:100%;
width:100%;
position:absolute;
top:0;
bottom:0;
}
的jQuery
$(document).ready(function(){
// - 1.78 is the aspect ratio of the video
// - This will work if your video is 1920 x 1080
// - To find this value divide the video's native width by the height eg 1920/1080 = 1.78
var aspectRatio = 1.78;
var video = $('#videoWithJs iframe');
var videoHeight = video.outerHeight();
var newWidth = videoHeight*aspectRatio;
var halfNewWidth = newWidth/2;
video.css({"width":newWidth+"px","left":"50%","margin-left":"-"+halfNewWidth+"px"});
});
这也可以在调整大小时触发,以确保其保持响应。最简单(可能不是最有效)的方法是使用以下方法。
$(window).on('resize', function() {
// Same code as on load
var aspectRatio = 1.78;
var video = $('#videoWithJs iframe');
var videoHeight = video.outerHeight();
var newWidth = videoHeight*aspectRatio;
var halfNewWidth = newWidth/2;
video.css({"width":newWidth+"px","left":"50%","margin-left":"-"+halfNewWidth+"px"});
});
答案 1 :(得分:8)
围绕iframe代码创建一个容器div,并为其提供一个类,例如:
<div class="video-container"><iframe.......></iframe></div>
添加CSS:
.video-container {
position:relative;
padding-bottom:56.25%;
padding-top:30px;
height:0;
overflow:hidden;
}
.video-container iframe, .video-container object, .video-container embed {
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
}
此coolestguidesontheplanet.com是此答案的来源网址。
答案 2 :(得分:4)
答案 3 :(得分:4)
要模拟相同的效果,重要的是保持纵横比为16:9。
HTML
<div class="banner-video">
<iframe src="https://www.youtube.com/embed/XXlJXRXJhow?rel=0&controls=0&showinfo=0&autoplay=1&mute=1&loop=1&playlist=XXlJXRXJhow" frameborder="0" allow="autoplay; encrypted-media" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
</div>
CSS
iframe{
width: 100%;
height: calc((100vw*9) /16);
}
这将删除黑条。
现在,我们可以将外部容器的宽度设置为100%,高度设置为100%,并隐藏溢出。
.banner-video{
height: 100vh;
overflow: hidden;
}
现在上面的代码将起作用,直到视口宽高比大于16/9。因此,我们必须根据长宽比添加媒体查询。
@media (max-aspect-ratio: 16/9) {
.banner-video{
width: 100%;
overflow: hidden;
}
iframe{
width: calc((100vh*16)/9);
height: 100vh;
}
}
此youtube视频在所有情况下将保持完整的视口大小,并隐藏视频的其余部分。 所有其他浏览器均支持歌剧之外的其他功能。
答案 4 :(得分:1)
我发布这个是因为上面的答案适用于顶部和底部有黑条的情况。如果两侧(左侧和右侧)有条形,该怎么办?该脚本将处理这两种情况。
var vidRatio = vidWidth/vidHeight;
var wrapperHeight = $('#videoIFrameContainer').height();
var wrapperWidth = $('#videoIFrameContainer').width();
var wrapperRatio = wrapperWidth / wrapperHeight;
if(wrapperRatio < vidRatio){
var newWidth = wrapperWidth * (vidRatio/wrapperRatio);
$('#videoIFrame').css({'min-height':wrapperHeight+'px', 'min-width':newWidth+'px', 'position':'absolute', 'left':'50%','margin-left':'-'+(newWidth/2)+'px'});
}
else{
var newHeight = wrapperHeight * (wrapperRatio / vidRatio);
$('#videoIFrame').css({'min-height':newHeight+'px', 'min-width':wrapperWidth+'px', 'position':'absolute', 'top':'50%','margin-top':'-'+(newHeight/2)+'px'});
}
答案 5 :(得分:1)
我花了很多时间试图解决这个问题,但这是一个简单的CSS解决方案,适用于我使用Flexbox。基本上,将视频放在一个绝对位置,宽度和高度均为100%的容器中,并使其显示:弹性和居中内容!
答案 6 :(得分:0)
可悲的是,这似乎并没有起作用......除非我遗漏了一些东西: http://codepen.io/Archie22is/pen/EWWoEM
jQuery(document).ready(function($){
// - 1.78 is the aspect ratio of the video
// - This will work if your video is 1920 x 1080
// - To find this value divide the video's native width by the height eg 1920/1080 = 1.78
var aspectRatio = 1.78;
var video = $('#videoWithJs iframe');
var videoHeight = video.outerHeight();
var newWidth = videoHeight*aspectRatio;
var halfNewWidth = newWidth/2;
video.css({"width":newWidth+"px","left":"50%","margin-left":"-"+halfNewWidth+"px"});
});
答案 7 :(得分:0)
您也可以使用以下方法: -
<iframe class="" style="background:url(ImageName.jpg) center; background-size: 100% 140%; " allowfullscreen="" width="300" height="200"></iframe>
答案 8 :(得分:0)
如果您只是在寻找CSS(而不是JS)。
比例为16:9的视频,例如1920x1080或1280x720 ...
这是我的代码(在我的情况下有效):
.video {
position: relative;
height: 0;
padding-bottom: 56.25%; /*16:9*/
padding-top: 0; /* Use ZERO, not 25px or 30px and so on */
overflow: hidden;
}
.video > iframe {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
}