【发布时间】:2014-03-19 02:13:52
【问题描述】:
情况: 我正在研究一种涉及典型 HTML/CSS 组合的响应式设计。除了在 div 内有 iframe 的情况下,一切都运行良好。 iframe 应自动调整为父 div 的大小。纯粹的 css 解决方案尚未出现,因此我将使用 JQuery 方法。它工作得很好,除了在一种情况下,从较小的宽度调整到较大宽度的屏幕。
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");
}
}
问题:
随着窗口的尺寸变小,它会不断检查窗口宽度,一旦达到 iframe-class-resize 的类并将宽度和高度设置为该类。随着窗口的大小调整较大,一旦大小达到 480 像素,它就会删除该类。问题是设置宽度和高度属性将它们直接添加到元素而不是类本身。因此,删除类不会删除新的宽度和高度。我尝试使用removeAttr()(上面已注释掉)强制删除属性,但这没有用。
有人看到上面的代码哪里出错了吗?或者关于如何更有效地完成响应式 iframe 的任何建议?所需的主要内容是 iframe 必须在 <div></div> 内,并且 div 不一定要定义宽度或高度。理想情况下,父 div 应明确定义宽度和高度,但此站点当前的设置方式并不总是可行的。
补充: 如果以上内容不够清楚,请尝试以下方法重现问题:
- 在台式机上打开浏览器。我在 Windows 机器上使用 Chrome。不要最大化浏览器。
- 打开上面的 jsfiddle (http://jsfiddle.net/TBJ83/)。您会注意到 iframe 内容跨越了预览面板的整个宽度。
- 手动向下调整宽度,直到整个窗口小于 480 像素。此时,iframe 内容将非常小。
- 手动调整宽度,直到整个窗口为 >> 480 像素。目标是让 iframe 内容重新获得预览面板的整个宽度。相反,由于
.css()函数将 css 更改直接应用于元素而不是类,因此内容会保留调整后的宽度和高度。
提前致谢!
【问题讨论】:
标签: javascript jquery html css iframe