iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >网页设计中如何解决iframe自适应高度的问题
  • 939
分享到

网页设计中如何解决iframe自适应高度的问题

2023-06-08 04:06:15 939人浏览 安东尼
摘要

小编给大家分享一下网页设计中如何解决iframe自适应高度的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!可能有人还没接触到这个问题过,先说明一下,什么是自适

小编给大家分享一下网页设计中如何解决iframe自适应高度的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

可能有人还没接触到这个问题过,先说明一下,什么是自适应高度吧。所谓iframe自适应高度,就是,基于界面美观和交互的考虑,隐藏了iframe的border和scrollbar,让人看不出它是个iframe。如果iframe始终调用同一个固定高度的页面,我们直接写死iframe高度就可以了。而如果iframe要切换页面,或者被包含页面要做DOM动态操作,这时候,就需要程序去同步iframe高度和被包含页的实际高度了。
顺便说下,iframe在迫不得已的时候才去用,它会给前端开发带来太多的麻烦。
传统做法大致有两个:
方法一,在每个被包含页在本身内容加载完毕之后,执行js取得本页面的高度,然后去同步父页面的iframe高度。
方法二,在主页面iframe的onload事件中执行JS,去取得被包含页的高度内容,然后去同步高度。
在代码维护角度考虑,方法二是优于方法一的,因为方法一,每个被包含页都要去引入一段相同的代码来做这个事情,创建了好多副本。
两个方法都只处理了静的东西,就是只在内容加载的时候执行,如果JS去操作DOM引起的高度变化,都不太方便。
如果在主窗口做一个Interval,不停的来获取被包含页的高度,然后做同步,是不是即方便,又解决了JS操作DOM的问题了呢?答案是肯定的。
Demo页面:主页面 iframe_a.html ,被包含页面 iframe_b.htm 和 iframe_c.html
主页面代码示例:

代码如下:


<iframe id="frame_content" src="iframe_b.html" scrolling="no" frameborder="0"></iframe><script type="text/javascript">
function reinitIframe(){
var iframe = document.getElementById("frame_content");
try{
iframe.height = iframe.contentWindow.document.documentElement.scrollHeight;
}catch (ex){}
}
window.setInterval("reinitIframe()", 200);
< /script>


一直执行,效率会不会有问题?
我做了测试,同时开5个窗口(IE6、IE7、FF、Opera、Safari)执行这个代码,不会对CPU有什么影响,甚至调整到2ms,也没影响(基本维持在0%占用率)。
下面谈谈各浏览器的兼容性问题,如何获取到正确的高度,主要是对body.scrollHeight和documentElement.scrollHeight两个值得比较。注意本文用的是这个doctype,不同的doctype应该不会影响结果,但是假如你的页面没有申明doctype,那还是先去加一个吧。

代码如下:


< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<a href="Http://www.w3.org/TR/html4/strict.dtd">http://www.w3.org/TR/html4/strict.dtd</a>">在主页面追加以下测试代码,以输出这两个值,代码示例:
<div><button>Check Height</button></div><script type="text/javascript">
function checkHeight() {
var iframe = document.getElementById("frame_content");
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
alert("bHeight:" + bHeight + ", dHeight:" + dHeight);
}
< /script>被加载页面,可以切换一个绝对定位的层,来使页面高度动态改变。如果层展开,则会撑高页面高度。代码示例:
<div><button>Toggle Overlay</button>
< /div>
< div >
< div id="overlay" ></div>
< /div>
< script type="text/javascript">
function toggleOverlay() {
var overlay = document.getElementById('overlay');
overlay.style.display = (overlay.style.display == 'none') ? 'block' : 'none';
}
< /script>


下面列出以上代码在各浏览器的测试值:

代码如下:


(bHeight = body.scrollHeight, dHeight = documentElement.scrollHeight, 红色 = 错误值, 绿色 = 正确值)
/ 层隐藏时 层展开时
bHeight dHeight bHeight dHeight
IE6 184 184 184 303
IE7 184 184 184 303
FF 184 184 184 303
Opera 181 181 300 300
Safari 184 184 303 184


暂且无视Opera比别人少3像素的问题&hellip;可以看出,如果没有绝对定位的东西,两个值是相等的,取哪个都无所谓。
但是如果有,那么各个浏览器的表现不太相同,单取哪个值都不对。但可以找到了一条规律,那就是取两个值得最大值可以兼容各浏览器。所以我们的主页面代码就要改造成这样了:

代码如下:


function reinitIframe(){var iframe = document.getElementById("frame_content");
try{
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
var height = Math.max(bHeight, dHeight);
iframe.height = height;
}catch (ex){}
}
window.setInterval("reinitIframe()", 200);


这样子,基本解决了兼容性问题。顺便说下,不光绝对定位的层会影响到值,float也会导致两个值的差异。
如果你演示Demo后,会发现,除了IE,其他浏览器中,当层展开后再隐藏,取到的高度值还是维持在展开的高度303,而非隐藏回去的真正值184,就是说长高了之后缩不回去了。这个现象在不同被包含页面之间做切换也会发生,当从高的页面切换到矮页面的时候,取到的高度还是那个高的值。
可以归纳为,当iframe窗体高度高于文档实际高度的时候,高度取的是窗体高度,而当窗体高度低于实际文档高度时,取的是文档实际高度。因此,要想办法在同步高度之前把高度设置到一个比实际文档低的值。所以,在iframe的添加 onload=”this.height=100&Prime;,让页面加载的时候先缩到足够矮,然后再同步到一样的高度。
这个值,在实际应用中决定,足够矮但又不能太矮,否则在FF等浏览器里会有很明显的闪烁。DOM操作的时候主页面无法监听到,只能DOM操作完了之后把高度变小了。
在我的一个实际项目中,在成本和收益之间权衡,我并没有做这个事情,因为每个DOM函数中都要插入这个代码,代价太高,其实层缩回去不缩掉也不是那么致命。包括Demo里,也没有去做这个事情。如果读者有更好的方法,请告诉我。
这是最终的主页面的代码:
[/code]
<iframe id="frame_content" src="iframe_b.html" scrolling="no" frameborder="0"></iframe>
< script type="text/javascript">
function reinitIframe(){
var iframe = document.getElementById("frame_content");
try{
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
var height = Math.max(bHeight, dHeight);
iframe.height = height;
}catch (ex){}
}
window.setInterval("reinitIframe()", 200);
< /script>
[/code]

以上是“网页设计中如何解决iframe自适应高度的问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 网页设计中如何解决iframe自适应高度的问题

本文链接: https://www.lsjlt.com/news/251737.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 网页设计中如何解决iframe自适应高度的问题
    小编给大家分享一下网页设计中如何解决iframe自适应高度的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!可能有人还没接触到这个问题过,先说明一下,什么是自适...
    99+
    2023-06-08
  • 如何解决location.hash跨域iframe自适应问题
    本篇内容主要讲解“如何解决location.hash跨域iframe自适应问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决location.hash跨域iframe自适应问题”吧!页面...
    99+
    2023-06-27
  • 如何解决Layui表格自适应高度的问题
    这篇文章将为大家详细讲解有关如何解决Layui表格自适应高度的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在写一个项目,发现成功将数据在页面显示后, 高度没有自适应...
    99+
    2024-04-02
  • vue中使用iframe嵌入网页,页面可自适应问题
    目录使用iframe嵌入网页,页面可自适应vue iframe高度自适应 实用实时刷新iframe高度变化iframe高度有变的时候通知父级iframe高度有变的时候直接修改ifra...
    99+
    2024-04-02
  • CSS中textarea高度自适应问题怎么解决
    这篇文章主要介绍“CSS中textarea高度自适应问题怎么解决”,在日常操作中,相信很多人在CSS中textarea高度自适应问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • 网页设计中如何解决网页中英文混排行高问题
    这篇文章主要介绍了网页设计中如何解决网页中英文混排行高问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。基本上快被这个问题搞疯了,症状如下症状描述:在ie下(6或7,8没有试...
    99+
    2023-06-08
  • 如何实现自适应网页设计
    本篇内容主要讲解“如何实现自适应网页设计”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现自适应网页设计”吧!在HTML头部增加viewport标签。   在网站HTML文件的开头,增加vi...
    99+
    2023-06-08
  • 如何解决layui轮播图满屏是高度自适应的问题
    小编给大家分享一下如何解决layui轮播图满屏是高度自适应的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在做官网时,遇到轮...
    99+
    2024-04-02
  • 如何解决div不能自适应高度不能随图片的高度变化问题
    本篇内容主要讲解“如何解决div不能自适应高度不能随图片的高度变化问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决div不能自适应高度不能随图片的高度...
    99+
    2024-04-02
  • CSS中如何解决父div对象自适应高度
    本篇内容介绍了“CSS中如何解决父div对象自适应高度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!解决子...
    99+
    2024-04-02
  • 如何解决layer弹出层自适应页面大小的问题
    这篇文章主要介绍了如何解决layer弹出层自适应页面大小的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。网上的解决方案大都是以下几种:1...
    99+
    2024-04-02
  • css如何设置单元格的高度宽度自适应
    这篇文章给大家分享的是有关css如何设置单元格的高度宽度自适应的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 设置单元格的高度宽度自适应的方法:1、给...
    99+
    2024-04-02
  • 如何解决echarts之图表自适应问题
    小编给大家分享一下如何解决echarts之图表自适应问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言为了直观查看公司服务器各个进程占用的内存动态情况,我使用echarts进行数据可视...
    99+
    2024-04-02
  • vue项目中echarts自适应问题的高级解决过程
    目录一、问题描述1.1 页面布局1.2 问题复现 二、解决过程2.1 增加图表resize2.2 解决canvas画布大小和容器大小不一致的问题2.3 动手添加延时2.4 ...
    99+
    2023-05-20
    vue echarts自适应 vue和echart结合 vue中echarts怎么用
  • 怎么解决css DIV嵌套时外层无法自适应高度问题
    本篇内容介绍了“怎么解决css DIV嵌套时外层无法自适应高度问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • 如何解决css中高度塌陷的问题
    本文将为大家详细介绍“如何解决css中高度塌陷的问题”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“如何解决css中高度塌陷的问题”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获...
    99+
    2023-06-06
  • 小程序 image标签 默认宽高问题,如何实现高度自适应
    微信小程序的图片image有默认的宽高:width: 320px和height: 240px, 我遇到的业务场景是宽度100%高度自适应 所以 1.宽度设置成100%,.img{width: 100%;}2.设置mode属性 mode="w...
    99+
    2023-09-29
    小程序 微信小程序
  • CSS中如何解决高度塌陷问题
    这篇文章将为大家详细讲解有关CSS中如何解决高度塌陷问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。HTML:<div class="first">...
    99+
    2023-06-08
  • 如何解决PC端和移动端自适应问题
    这篇文章主要介绍了如何解决PC端和移动端自适应问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。做网页时,我们通常需要考虑到不同电脑屏幕尺寸,以及不同手机屏幕大小等问题,解决...
    99+
    2023-06-08
  • web前端响应式网页中的高度设计实例分析
    这篇“web前端响应式网页中的高度设计实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作