风云作弊: 我正在处理一个包含典型HTML/CSS组合的响应式设计。除了div内有iframe的情况之外,一切都很好。 iframe应自动调整为父div的大小。一个纯CSS的解决方案没有出现,所以我要用JQuery方法。除了在一种情况下,从较小宽度调整为较大宽度的屏幕时,它可以很好地工作。动态调整iframe的大小
HTML:
<div class="container">
<iframe class="iframe-class" src="http://www.cnn.com/"></iframe>
</div>
CSS:
.container {
width: 100%;
height: 250px;
}
.iframe-class {
width: 100%;
height: 100%;
border: 1px solid red;
overflow: auto;
}
的Javascript:
$(function() {
setIFrameSize();
$(window).resize(function() {
setIFrameSize();
});
});
function setIFrameSize() {
var ogWidth = 700;
var ogHeight = 600;
var ogRatio = ogWidth/ogHeight;
var windowWidth = $(window).width();
if (windowWidth < 480) {
var parentDivWidth = $(".iframe-class").parent().width();
var newHeight = (parentDivWidth/ogRatio);
$(".iframe-class").addClass("iframe-class-resize");
$(".iframe-class-resize").css("width", parentDivWidth);
$(".iframe-class-resize").css("height", newHeight);
} else {
// $(".iframe-class-resize").removeAttr("width");
// $(".iframe-class-resize").removeAttr("height");
$(".iframe-class").removeClass("iframe-class-resize");
}
}
问题: 由于窗口被调整大小时,它持续的检查窗口宽度,并且一旦它击中< 480像素,所述代码添加一个名为iframe-class-resize
类,并且设置的宽度和高度,以该类。由于窗口的大小调整得较大,一旦尺寸达到480像素,它就会删除该类。问题是设置宽度和高度属性直接将它们添加到元素而不是类本身。因此,删除类不会删除新的宽度和高度。我试图强制使用removeAttr()
(上面注释)去除这些属性,但那不起作用。
任何人都可以看到上面的代码出错了吗?或者有关如何更有效地完成响应式iframe的建议?需要的主要事情是iframe必须在<div></div>
之内,并且div可能不一定具有定义的宽度或高度。理想情况下,父div应该明确定义宽度和高度,但是该网站目前的设置方式并不总是可行。
附加: 如果上面是不够清楚,请尝试以下操作重现该问题:
- 打开一个桌面计算机上的浏览器。我在Windows机器上使用Chrome。不要最大化浏览器。
- 打开上面的jsfiddle(http://jsfiddle.net/TBJ83/)。您会注意到,iframe内容跨越了“预览”面板的整个宽度。
- 手动调整宽度的大小,直到整个窗口为< 480px。此时,iframe内容将会非常小。
- 手动调整宽度的大小,直到整个窗口为>> 480px。目标是让该iframe内容重新获得“预览”面板的整个宽度。相反,内容保留了调整后的宽度和高度,因为
.css()
函数直接将css更改应用于元素而不是类。
在此先感谢!
这对我的情况最有效。谢谢! – jiminy
@jiminy很高兴帮助。老实说,你的代码很好。你可以链接一些调用,并通过传入一个对象来组合'.css()'调用。您也可以计算一次比率,而不是每次调整大小,以及调整您的调整大小事件处理程序。除此之外,它看起来不错。您可以简化操作,但需要花费更改整个方法,而且节省的费用很小。 – Jasper
我不知道,看看那个代码中有多少个jQuery选择器,比如5个。这是通过DOM解析5次以找到这些项目。我更新了我的,它只有1个选择器,然后重新使用该对象。 – gfrobenius