我正在阅读this stackoverflow post标题为“#34;你能让iFrame响应吗?"”,其中一条评论/回答让我this jfiddle.
但是当我尝试实现HTML和CSS以满足我的需求时,我没有取得相同的结果/成功。我创建了my own JS fiddle,所以我可以告诉你它对我来说是如何运作的。我确定它与我使用的iFrame类型有关(例如,产品图片可能也需要响应或其他什么?)
我主要担心的是,当我的博客读者在iPhone上访问我的博客时,我不希望所有内容都是x宽度(我的所有内容都是100%),然后iFrame行为不端,是唯一的元素更广泛(因此超出所有其他内容 - 如果这是有道理的?)
无论如何,有谁知道它为什么不起作用?谢谢。
这是HTML&我的JSFIDDLE的CSS(如果你不想点击链接):
<div class="wrapper">
<div class="h_iframe">
<!-- a transparent image is preferable -->
<img class="ratio" src="http://www.brightontheday.com/wp-content/uploads/2013/07/placeholder300.png" />
<iframe frameborder='0' height='465px' width='470px' scrolling='no' src='http://currentlyobsessed.me/api/v1/get_widget?wid=30&blog=Brighton+The+Day&widgetid=38585'
frameborder="0" allowfullscreen></iframe>
</div>
</div>
以下是随附的CSS:
.wrapper {
width: 100%;
height: 100%;
margin: 0 auto;
background: #ffffff;
}
.h_iframe {
position: relative;
}
.h_iframe .ratio {
display: block;
width: 100%;
height: auto;
}
.h_iframe iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
答案 0 :(得分:85)
我向你呈现令人难以置信的歌唱解决方案=)
.wrapper {
position: relative;
padding-bottom: 56.25%; /* 16:9 */
padding-top: 25px;
height: 0;
}
.wrapper iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
jsFiddle:http://jsfiddle.net/omarjuvera/8zkunqxy/2/
当您移动窗口栏时,您将看到iframe响应调整大小
或者,您也可以使用 内在比率技术 - 这只是上述相同解决方案的另一种选择(番茄,番茄)
.iframe-container {
overflow: hidden;
padding-top: 56.25%;
position: relative;
}
.iframe-container iframe {
position: absolute;
top: 0;
left: 0;
border: 0;
width: 100%;
height: 100%;
}
答案 1 :(得分:68)
尝试使用此代码使其响应
iframe, object, embed {
max-width: 100%;
}
答案 2 :(得分:43)
我找到了来自Dave Rupert / Chris Coyier的解决方案。但是,我想让卷轴可用,所以我提出了这个:
// HTML
<div class="myIframe">
<iframe> </iframe>
</div>
// CSS
.myIframe {
position: relative;
padding-bottom: 65.25%;
padding-top: 30px;
height: 0;
overflow: auto;
-webkit-overflow-scrolling:touch; //<<--- THIS IS THE KEY
border: solid black 1px;
}
.myIframe iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
答案 3 :(得分:16)
您可以使用此网站http://css-tricks.com/NetMag/FluidWidthVideo/Article-FluidWidthVideo.php上提到的此技巧。
它非常有用且易于理解。您需要创建的所有内容
<div class="videoWrapper">
<!-- Copy & Pasted from YouTube -->
<iframe width="560" height="349" src="http://www.youtube.com/embed/n_dZNLr2cME?rel=0&hd=1" frameborder="0" allowfullscreen></iframe>
</div>
.videoWrapper {
position: relative;
padding-bottom: 56.25%; /* 16:9 */
padding-top: 25px;
height: 0;
}
.videoWrapper iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
以下是您编辑的js fiddle用于演示。
答案 4 :(得分:10)
iframe{
max-width: 100% !important;
}
答案 5 :(得分:9)
查看此解决方案...适用于我&gt;&gt; https://jsfiddle.net/y49jpdns/
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<style>
html body {width: 100%;height: 100%;padding: 0px;margin: 0px;overflow: hidden;font-family: arial;font-size: 10px;color: #6e6e6e;background-color: #000;} #preview-frame {width: 100%;background-color: #fff;}</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
var calcHeight = function() {
$('#preview-frame').height($(window).height());
}
$(document).ready(function() {
calcHeight();
});
$(window).resize(function() {
calcHeight();
}).load(function() {
calcHeight();
});
</script>
</head>
<body>
<iframe id="preview-frame" src="http://leowebguy.com/" name="preview-frame" frameborder="0" noresize="noresize">
</iframe>
</body>
</html>
答案 6 :(得分:6)
div#products-post-wrapper
的宽度为8800px。
答案 7 :(得分:3)
iFrames可以完全响应,同时使用一种名为Intrinsic Ratio Technique的CSS技术保持其宽高比。我写了一篇专门针对这个问题的博客文章:https://benmarshall.me/responsive-iframes/
这个要点是:
.intrinsic-container {
position: relative;
height: 0;
overflow: hidden;
}
/* 16x9 Aspect Ratio */
.intrinsic-container-16x9 {
padding-bottom: 56.25%;
}
/* 4x3 Aspect Ratio */
.intrinsic-container-4x3 {
padding-bottom: 75%;
}
.intrinsic-container iframe {
position: absolute;
top:0;
left: 0;
width: 100%;
height: 100%;
}
<div class="intrinsic-container intrinsic-container-16x9">
<iframe src="//www.youtube.com/embed/KMYrIi_Mt8A" allowfullscreen></iframe>
</div>
BOOM,完全响应!
答案 8 :(得分:2)
我注意到leowebdev的帖子确实似乎在我的结尾,但是,它确实击败了我想要制作的网站的两个元素:滚动和页脚。
滚动我通过添加一个回来了
scrolling="yes"
到iframe嵌入代码。
我不确定页脚会因为响应性而自动被淘汰,但希望其他人知道答案。
答案 9 :(得分:2)
删除以像素为单位指定的iframe高度和宽度,并使用百分比
iframe{ max-width: 100%;}
答案 10 :(得分:2)
简单,使用CSS:
iframe{
width: 100%;
max-width: 800px /*this can be anyting you wish, to show, as default size*/
}
请注意:但它不会使其中的内容响应!
答案 11 :(得分:1)
通过调整来自@Connor Cushion Mulhall的代码来解决我的问题
iframe, object, embed {
width: 100%;
display: block !important;
}
答案 12 :(得分:1)
this.parent.method_that_updates(); //you can check if method exists before invoking, just to be safe; or wrap this in a try catch block
答案 13 :(得分:0)
iframe无法响应。您可以使iframe容器响应,但不能显示它显示的内容,因为它是一个具有自己的设置高度和宽度的网页。
示例小提琴链接有效,因为它显示的是未声明大小的嵌入式YouTube视频链接。
答案 14 :(得分:0)
使“iframe”响应并适合所有设备屏幕的最佳解决方案,只需应用此代码(与游戏网站配合使用):
iframe::-webkit-scrollbar{display:none}
.iframe{background:#fff;overflow:hidden}
.iframe iframe{width:100%;height:540px;border:0;display:block}
.iframe-content{position:absolute;width:100%;height:540px;overflow:auto;top:0;bottom:0;-webkit-overflow-scrolling:touch}
@media screen and (max-width:992px){.iframe iframe{height:720px}}
@media screen and (max-width:768px){.iframe iframe{height:720px}}
@media screen and (max-width:720px){.iframe iframe{height:720px}}
@media screen and (max-width:479px){.iframe iframe{height:480px}}
@media screen and (max-height:400px){.iframe iframe{height:360px}}
如果您正在寻找适合所有设备的响应式游戏容器,请使用此代码,该代码使用高级CSS @media查询。
答案 15 :(得分:0)
由于浏览器安全限制,您必须在“父”页面以及通过iframe(“子”)嵌入的页面中包含Javascript文件。
在当前版本中,父页面必须包含最新版本的jQuery。子页面功能不依赖于jQuery。在将来的版本中,我们也希望删除对父级的jQuery依赖。
注意:makeResponsive()函数调用中的“xdomain”参数是可选的。
代码示例<!-- Activate responsiveness in the "child" page -->
<script src="/js/jquery.responsiveiframe.js"></script>
<script>
var ri = responsiveIframe();
ri.allowResponsiveEmbedding();
</script>
<!-- Corresponding code in the "parent" page -->
<script src="/js/jquery.js"></script>
<script src="/js/jquery.responsiveiframe.js"></script>
<script>
;(function($){
$(function(){
$('#myIframeID').responsiveIframe({ xdomain: '*'});
});
})(jQuery);
</script>
答案 16 :(得分:0)
完全响应iFrame,适用于宽高比未知且iFrame中的内容完全响应的情况。
上述解决方案均无法满足我的需求,即创建一个完全响应的iFrame,其内部具有完全响应的动态内容。保持任何类型的宽高比都不是一种选择。
代码:
function getWindowHeight() {
console.log('Get Window Height Called')
var currentWindowHeight = $(window).height()
var iFrame = document.getElementById("myframe")
var frameHeight = currentWindowHeight - 95
iFrame.height = frameHeight;
}
//Timeout to prevent function from repeatedly firing
var doit;
window.onresize = function(){
clearTimeout(doit);
doit = setTimeout(resizedw, 100);
};
我还创建了一个超时,因此在调整大小时,该函数不会被调用一百万次。
答案 17 :(得分:0)
For Example :
<div class="intrinsic-container">
<iframe src="//www.youtube.com/embed/KMYrIi_Mt8A" allowfullscreen></iframe>
</div>
CSS
.intrinsic-container {
position: relative;
height: 0;
overflow: hidden;
}
/* 16x9 Aspect Ratio */
.intrinsic-container-16x9 {
padding-bottom: 56.25%;
}
/* 4x3 Aspect Ratio */
.intrinsic-container-4x3 {
padding-bottom: 75%;
}
.intrinsic-container iframe {
position: absolute;
top:0;
left: 0;
width: 100%;
height: 100%;
}
答案 18 :(得分:0)
我正在更多地搜索这个主题,最后得到一个很好的答案。 您可以尝试this:
.wrapper {
width: 50%;
}
.container {
height: 0;
width: 100%;
padding-bottom: 50%;
overflow: hidden;
position: relative;
}
.container iframe {
top: 0;
left: 0;
width: 100%;
height: 100%;
position: absolute;
}
<div class="wrapper">
<div class="container">
<iframe src="there is path of your iframe"></iframe>
</div>
</div>
答案 19 :(得分:0)
使用以下标记:
<div class="video"><iframe src="https://www.youtube.com/embed/StTqXEQ2l-Y"></iframe></div>
以下CSS使视频成为全宽和16:9:
.video {
position: relative;
padding-bottom: 56.25%; /* 16:9 */
}
.video > .video__iframe {
position: absolute;
width: 100%;
height: 100%;
border: none;
}
}
答案 20 :(得分:0)
查看此完整代码。你可以使用百分比的容器,如下面的代码:
<html>
<head>
<title>How to make Iframe Responsive</title>
<style>
html,body {height:100%;}
.wrapper {width:80%;height:100%;margin:0 auto;background:#CCC}
.h_iframe {position:relative;}
.h_iframe .ratio {display:block;width:100%;height:auto;}
.h_iframe iframe {position:absolute;top:0;left:0;width:100%; height:100%;}
</style>
</head>
<body>
<div class="wrapper">
<div class="h_iframe">
<img class="ratio" src=""/>
<iframe src="http://www.sanwebcorner.com" frameborder="0" allowfullscreen></iframe>
</div>
<p>Please scale the "result" window to notice the effect.</p>
</div>
</body>
</html>
查看此demo Page.
答案 21 :(得分:0)
此解决方案对我有用。而且我发现它更容易。 https://jameshfisher.com/2017/08/30/how-do-i-make-a-full-width-iframe/
答案 22 :(得分:0)
以下代码将使iframe中无响应的网站的固定宽度内容调整为视口宽度,但前提是其宽度大于视口宽度。出于演示目的,网站为800像素宽的单个图像。您可以通过调整浏览器窗口的大小或在手机中加载页面来进行测试:
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body, html {width: 100%; height: 100%; margin: 0; padding: 0}
iframe {width: 100%; transform-origin: left top;}
.imgbox{text-align:center;display:block;}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
jQuery(document).ready(function($){
nsZoomZoom();
$(window).resize(function(){
nsZoomZoom();
});
function nsZoomZoom(){
htmlWidth = $('html').innerWidth();
iframeWidth = 800;
if (htmlWidth > iframeWidth)
scale = 1;
else {
scale = htmlWidth / (iframeWidth);
}
$("iframe").css('transform', 'scale(' + scale + ')');
$("iframe").css('width', '800');
}
});
</script>
</head>
<body>
<div class=imgbox>
<iframe src="http://placekitten.com/g/800/600" scrolling=no width=800 height=600 frameborder=no></iframe>
</div>
</body>
答案 23 :(得分:0)
如果碰巧正在使用Bootstrap CSS库,则可以使用它提供的响应式嵌入类:
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="https://www.youtube.com/embed/zpOULjyy-n8?rel=0" allowfullscreen></iframe>
</div>
支持多种不同的宽高比see the documentation。
答案 24 :(得分:0)
如果您使用的是 bootstrap 4,那么只需使用实用程序类进行嵌入
https://getbootstrap.com/docs/4.5/utilities/embed/
示例:
iris %>%
select(-any_of("X")) %>%
select(-matches(c("Width", "Spec"))) # use c for multiple matches
答案 25 :(得分:0)
我必须以正方形显示 iframe,所以这就是我使用的
.video-wrapper {
position: relative;
padding-bottom: 100%;
}
.video-wrapper iframe {
position: absolute;
width: 100%;
height: 100%;
border: none;
}