我想设计一个带有横幅和iframe的网页。我希望iframe可以填充所有剩余的页面高度,并在浏览器调整大小时自动调整大小。是否有可能不编写JavaScript代码,只使用CSS来完成?
我尝试在iframe上设置高度:100%,结果非常接近,但iframe试图填充整个页面高度,包括横幅div元素的30px高度,所以我得到了不必要的垂直滚动条。它并不完美。
我尝试了CSS的margin, padding属性在DIV上成功地占据了网页的整个剩余高度,但这个技巧在iframe上不起作用。
<身体>
< div风格= "宽度:100%;高度:30 px;background - color: # cccccc;" > < / div >旗帜
<iframe src="http: //www.google.com.tw" style="width:100%;高度:100%;" > < / iframe >
身体< / >
在尝试了一段时间的css路由后,我最终用jQuery写了一些相当基本的东西,为我做了这项工作:
function iframeHeight() {
var newHeight = $j(window).height();
var buffer = 180; // space required for any other elements on the page
var newIframeHeight = newHeight - buffer;
$j('iframe').css('height',newIframeHeight); //this will aply to all iframes on the page, so you may want to make your jquery selector more specific.
}
// When DOM ready
$(function() {
window.onresize = iframeHeight;
}
在IE8, Chrome, Firefox 3.6测试
我认为你有一个概念上的问题。要说“我尝试在iframe上设置高度:100%,结果非常接近,但iframe试图填充整个页面”,好吧,什么时候“100%”不等于“整个”?
你已经要求iframe填充它的容器(也就是body)的整个高度,但不幸的是,它在<div>上面有一个块级别的兄弟,你要求它的大小为30px。所以父容器的总大小现在被要求为100% + 30px > 100%!因此滚动条。
我认为你的意思是你想让iframe像帧和表单元一样消耗剩下的东西,即height="*"。IIRC,这个不存在。
不幸的是,据我所知,也没有办法有效地混合/计算/减去绝对和相对单位,所以我认为你只有两个选择:
绝对定位你的div
会把它从容器里拿出来吗
单独的iframe将消耗它的
容器的高度。这就剩下你
还有各种各样的问题
虽然,但也许是为了你
做不透明或对齐将
好的。
或者,您需要指定
%高度的div和减少
iframe的高度减去那么多。
如果绝对高度是
这很重要,你需要申请
这是div的子元素
代替。
也许这个问题已经有了答案(上面的一些答案是“正确的”方法),但我想我只是补充我的解决方案。
我们的iFrame是在一个div中加载的,因此我需要一些其他的窗口。看到我们的项目已经严重依赖jQuery,我发现这是最优雅的解决方案:
$("iframe").height($("#middle").height());
当然,“#middle”是div的id。你需要做的唯一额外的事情是,每当用户调整窗口大小时,召回这个大小变化。
$(window).resize(function() {
$("iframe").height($("#middle").height());
});
虽然我同意JS似乎是一个更好的选择,我有一个有点CSS只工作的解决方案。它的缺点是,如果您必须频繁地向iframe html文档添加内容,您将不得不调整一个百分比的时间。
解决方案:
试着不要为你的html文档指定任何高度,
html, body, section, main-div {}
然后只编写如下代码:
#main-div {height:100%;}
#iframe {height:300%;}
注意:div应该是你的主要部分。
这应该是相对有效的。iframe精确地计算可见窗口高度的300%。如果第二个文档的html内容(在iframe中)的高度小于浏览器高度的3倍,它就可以工作。如果你不需要频繁地向文档添加内容,这是一个永久的解决方案,你可以根据你的内容高度找到你自己需要的百分比。
这是因为它可以防止第二个html文档(一个嵌入)从父html文档继承它的高度。它阻止了它,因为我们没有为它们都指定高度。当我们给子对象一个%时,它会寻找它的父对象,如果没有,它会取它的内容高度。前提是其他容器没有给定高度。