要求:
width
和height
视口单元 ANY 有效vw
和vh
。 Se代码如下。width
和height
HAS
位于vw
和vh
。调整浏览器或视口大小时,应满足上述所有要求。
HTML :
<div class="container">
<iframe></iframe>
</div>
CSS :
.container {
width:90vw;
height:50vh;
}
答案 0 :(得分:5)
相同的解决方案,但没有额外的标记来保持比率。
JsFiddle完全不需要相同的评论。
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8">
<title>Fully Container Centred Iframe</title>
<meta name="generator" content="PSPad editor, www.pspad.com">
<style>
.container {
display:table-cell; /* (specs: omitted table parts, the browser will insert mandatory elements in the dom tree) */
position:relative;
padding:; /* optional, margins ignored */
width:100vw; /* any value */
height:1vh; /* will expand by the :before element */
overflow:hidden; /* hide eventual black bars */
background:tan; /* bg-colors just for demo testing */
vertical-align:middle;
text-align:center;
}
.container:before {
display:block;
padding-top:56%; /* keeps the 16/9 ratio for the AP */
height:0;
background:red;
content:"\a0";
}
.container iframe {
position:absolute; /* to be ratio consistent */
top:-.5%;
left:-.5%; /* overflow eventual black bars */
border:0;
width:101%; /* grow some to avoid thinner black bars */
height:101%;
overflow:hidden; /* for html5 browsers the html attribute is depreciated */
background:gold;
}
</style>
</head><body>
<div class="container">
<iframe scrolling="no" src=""></iframe>
</div>
</body></html>
答案 1 :(得分:3)
如果您想要响应使用
.container, iframe {
width:100%;
height:auto;
}
答案 2 :(得分:3)
.container {
width:90vw;
height:50vh;
}
.container iframe {
width: 100%;
height: 100%;
}
似乎在这个小提琴中工作得非常好https://jsfiddle.net/1q10L7hj/
答案 3 :(得分:3)
为什么不使用calc方法来获得您想要的宽高比宽度?
<强> HTML 强>
<div class="container">
<iframe src="" frameborder="0"></iframe>
</div>
<强> SCSS 强>
<style>
$width = 80vw;
.container {
width: $width;
height: calc(($width/16) * 9);
position: relative;
}
iframe {
position: absolute;
width: 100%;
height: 100%;
top: 50%;
left: 50%;
-webkit-transform: translate(+50%, -50%);
transform: translate(+50%, -50%);
}
</style>
然后你可以在任何地方改变它的宽度,并在容器div和iframe上应用你想要的任何位置
答案 4 :(得分:3)
使用JavaScript,您可以收听resize
事件,只要浏览器的窗口发生变化就会触发该事件。然后,通过一些简单的代数,您可以根据容器的尺寸计算iframe的尺寸。这是一个显示所有要求的演示。
"use strict";
var container = document.querySelector('.container');
var frame = container.querySelector('iframe');
function resizeVideo() {
frame.width = frame.height = 0;
var width = container.offsetWidth;
var height = container.offsetHeight;
if (height * (16 / 9) <= width) {
frame.height = height;
frame.width = height * (16 / 9);
} else {
frame.width = width;
frame.height = width * (9 / 16);
}
}
window.addEventListener('load', resizeVideo);
window.addEventListener('resize', resizeVideo);
&#13;
.container {
width: 90vw;
height: 50vh;
display: table-cell;
text-align: center;
vertical-align: middle;
}
&#13;
<div class="container">
<iframe src="https://www.youtube.com/embed/BKhZvubRYy8" frameborder="0" allowfullscreen></iframe>
</div>
&#13;
答案 5 :(得分:2)
我已经获得了您想要的结果,但我必须添加额外的div
作为.container
类的父级。这个JSFiddle应该适用于Chrome上的用户( Windows桌面版)但是当我尝试在Edge和IE11上使用相同的小提琴时,我发现它会产生不希望的信箱效果到期到图像覆盖太远了。
<强> HTML 强>
<div id="wrapper">
<div class="container">
<iframe scrolling="no" src="https://www.youtube.com/embed/YL9RetC0ook" frameborder="0" allowfullscreen>
</iframe>
</div>
</div>
<强> CSS 强>
body {
margin: 0;
}
#wrapper {
width: 90vw;
height: 50vh;
}
.container,iframe {
width: 100%;
height: 100%;
}
我不确定这是否适用于Firefox,所以如果你有Firefox,你可以在JSFiddle上试试。但是对于Chrome(至少),这应该是您所寻找的解决方案,如您列出的要求所述。
答案 6 :(得分:2)
我认为表格单元显示可以解决这个问题。只需将其应用于容器,以便iframe是内容
根据规范,浏览器将插入虚拟元素,它需要正确渲染单元格并完全居中并包含其内容,如果需要,可以随之增长。
要求:我认为其中一些超出了您的问题的范围,它们还将取决于iframe中加载的内容,不受此容器文档的控制。我建议的代码很简单,但我相信它符合iframe父级的所有要求,并且仍然是对浏览器友好的。
禁用的黑条和强制宽高比在加载的文档中仍然有问题。如果您无法控制最新加载的内容,那么最后一个选项可能是&#34; srcdoc&#34;和&#34;无缝&#34;属性,但这将排除例如所有IE版本。
JsFiddle完全不需要一些评论。希望下面的编辑能够解决这个问题。
无论如何,我玩得开心!谢谢! :)
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8">
<title>Fully Container Centred Iframe</title>
<meta name="generator" content="PSPad editor, www.pspad.com">
<style>
.container {
display:table-cell;
padding:;
width:100vw;
height:20vh;
background:tan;
vertical-align:middle;
text-align:center;
}
.container .ratio{
display:inline-block;
position:relative;
padding-bottom:56%;
width:100%;
height:0;
overflow:hidden;
vertical-align:middle;
}
.container iframe {
position:absolute;
top:-1%;
left:-1%;
border:0;
width:102%;
height:102%;
overflow:hidden;
vertical-align:middle;
}
</style>
</head><body>
<div class="container">
<div class="ratio">
<iframe scrolling="no" src=""></iframe>
</div>
</div>
</body></html>
答案 7 :(得分:2)
我建议使用JavaScript window.resize侦听器来解决这类问题。今天无法编写代码导致我的日程安排非常紧张,但我会尝试编写一个算法:
这是概念 - 您可以根据自己的需要即兴创作。我希望它有所帮助。