我通过JQM创建一个site / html5应用程序。
每个页面都有一个固定的页眉和页脚,中央内容可滚动。在一个页面上,我有一个基于url动态填充的iframe - 用于通过本地存储传递的外部站点。
目前,iframe似乎有一些任意高度远小于固定页眉和页脚之间的固定差异。
我需要iframe来填充页眉和页脚之间的空白,以便中间部分(主要)只填充iframe。我需要这是一个完美的契合,这样当外部链接的页面大于页眉和页脚之间的高度时(例如在移动设备上查看时),我不会在滚动内滚动。
目前我的HTML看起来像这样:
<body>
<div data-role="page" id="step3" class="mainpage" data-theme="a">
<div data-role="header" data-position="fixed" data-tap-toggle="false">
<a href="#left-panel" data-role="button" data-icon="bars" data-prefetch data-dom-cache="true" data-tap-toggle="false">Menu</a>
<h1>Title</h1>
<a data-icon="back" data-rel="back" title="Go back">Back</a>
</div><!-- /header -->
<div role="main" class="ui-content step3" width="100%" height="100%" >
<div id="iframe" width="100%" height="100%" style="padding:0px;margin:0px;height:100%"></div>
</div><!-- /content -->
<div id="footing" data-role="footer" data-position="fixed" data-tap-toggle="false">
<div id="ad"> </div>
</div>
<script>
document.getElementById("iframe").innerHTML="<iframe src='" + localStorage.ExternalListing + "' width=\"100%\" height=\"100%\" style=\"padding:0px\;margin:0px\;min-height:500px\;height:100%\;\"></iframe>";
</script>
<style>
.ui-content.step3 {
padding: 0;
height:100%;
}</style>
</div><!-- /page -->
</body>
正如您将看到我尝试添加&#39;身高:100%&#39;到相关部分,我已经为iframe添加了一个最小高度(纯粹用于测试目的)。不幸的是,我不能使用固定的高度,因为移动设备的屏幕大小和分辨率有很多变化。
任何想法如何让iframe填充页眉和页脚之间的差距?
答案 0 :(得分:1)
仅在特定页面中使用以下内容,否则会阻止正文/页面滚动。
下面的CSS使用高度继承以及box-sizing
根据视口的高度设置.ui-content
的高度。它响应任何屏幕分辨率。
请注意,带有固定工具栏的网页div会添加padding-top
和padding-bottom
以容纳工具栏。内容div继承页面高度减去填充(88px)。
对于浮动工具栏(非固定),解决方案是不同的。如果你有兴趣,我会发布它。
html, body,
.mainpage {
height:100%;
margin: 0;
padding: 0;
}
.mainpage,
.mainpage * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.mainpage .ui-content {
padding: 0; /* remove default padding */
height: inherit; /* full height of viewport - padding of page due to fixed toolbars */
}
.mainpage .ui-content #iframe,
.mainpage .ui-content #iframe iframe {
height: 100%;
width: 100%;
display: block;
}
<强> Demo 强>
答案 1 :(得分:1)
Here's an updated version of your demo
仅将容器div和iframe的宽度和高度设置为&#39; 100%&#39;不管用。 您需要专门计算高度和宽度并将其应用于您的iframe。
document.getElementById("iframe").innerHTML = "<iframe src='" + localStorage.ExternalListing + "'
width='" + (window.innerWidth - 20) + "'
height='" + (window.innerHeight - document.getElementById("header").offsetHeight - document.getElementById("footing").offsetHeight - 20) + "'
style='padding:0px;margin:0px'></iframe>";
查看如何计算iframe的高度。
注意:20px偏移量确保不会触发滚动条。
答案 2 :(得分:1)
我使用了奥马尔和奥玛的组合。维克拉姆的解决方案既不能完全满足我的需求。
首先,我使用Vikrams js来检测高度;
function loadIFrame(){
$(document).on("pagecontainershow", function () {
var page3 = $.mobile.pageContainer.pagecontainer("getActivePage");
if(page3[0].id == "step3")
{
$.mobile.loading('show');//show ajax loder image
}
});
//set iFrame height and width to available window
document.getElementById("iframe").innerHTML = "<iframe src='" + localStorage.ExternalListing + "' width='" + (window.innerWidth) + "' height='" + (window.innerHeight - document.getElementById("header").offsetHeight - document.getElementById("footing").offsetHeight) + "' style='padding:0px;margin:0px;border:0px;'></iframe>";
//hide ajax loder image
//setTimeout(function() { $.mobile.loading('hide'); }, 300);
$('iframe').load(function() {
$.mobile.loading('hide');
});
}
然后我使用了Omar建议的后续内容来重新计算方向变化时的iframe维度。
$(document).on("pagecontainertransition", loadIFrame);
$(window).on("throttledresize orientationchange", loadIFrame);