HTML+CSS之iframe
碎碎:这两天在实践中,用到了 iframe,之前对其不甚了解,了解之中遇到好多奇葩问题,今天记录下这两天遇到的相关的内容。
- 嵌入的 iframe 页面的边框
- 嵌入的 iframe 页面的背景
- 嵌入的 iframe 页面居中
- 嵌入的 iframe 页面的滚动条
- iframe 父页面调用子页面
- iframe 子页面调用父页面
1. iframe 嵌入页面的边框
//HTML 元素:主要有 src: 要嵌入的页面
<iframe id="framePage" src="iframe/inner_page.jsp"></iframe>
// 默认有边框: 新建测试文件,命名:test_iframe01.html,内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
//为了方便区别,对应设置了样式
<style>
.iframe_page{
width: 400px;
height: 260px;
background-color: #dfdfdf; //为了方便区别,设置背景样式
}
.iframe_page #framePage{
width: 300px;
height: 200px;
background-color: #adb9cd; //为了方便区别,设置背景样式
}
</style> <body>
<!-- 嵌入 iframe 模块 -->
<div class="iframe_page">
<iframe id="framePage" src="inner_page.html"></iframe>
</div>
</body>
</html>
运行显示如下:

可以看到 iframe 嵌入页面,类似层级摞在上面(即 iframe层 压在原来页面上层),且外面有白色边框显示,这就是 iframe 默认显示样式。
- 取消边框:只需在 iframe 标签中设置 frameborder 属性即可
frameborder 有两种属性值:
. frameborder=""; //无边框显示
. frameborder=""; //有边框显示 (默认状态,且边框为白色)eg: 只需将上面文件中的 iframe 标签内容添加上 frameborder="" 即可,此时全部代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head> <style>
.iframe_page{
width: 400px;
height: 260px;
background-color: #dfdfdf;
}
.iframe_page #framePage{
width: 300px;
height: 200px;
background-color: #adb9cd;
}
</style> <body>
<!-- 嵌入 iframe 模块 -->
<div class="iframe_page">
<iframe id="framePage" src="inner_page.html" frameborder=""></iframe>
</div>
</body>
</html>更改后的 test_iframe01.html
执行后就会看到上面的白色边框消失,如下:

- 边框样式设置:
当然,若想层级显示,但不想要默认的边框时,我们可以自行设置边框,只需给对应 iframe 页面设置样式时,添加上边框设置
如下:给 id="framePage" 的 iframe 设置 border 属性,添加后样式如下:
.iframe_page #framePage{
width: 300px;
height: 200px;
background-color: #adb9cd;
border: 3px dashed #cc9797; //设置 iframe边框样式
} 更改后的完整代码如下:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head> <style>
.iframe_page{
width: 400px;
height: 260px;
background-color: #dfdfdf;
}
.iframe_page #framePage{
width: 300px;
height: 200px;
background-color: #adb9cd;
border: 3px dashed #cc9797; //更改iframe边框样式
}
</style> <body>
<!-- 嵌入 iframe 模块 -->
<div class="iframe_page">
<iframe id="framePage" src="inner_page.html"></iframe>
</div>
</body>
</html>更改后的 test_iframe01.html
运行后效果如下:

2. 嵌入的 iframe 页面的背景
- 背景透明:需在 iframe 标签中添加 allowtransparency 属性设置
网上说背景透明
. 需对<iframe>标签设置 allowtransparency 属性:
allowtransparency="true" //背景透明, 前提不能设置 iframe 的背景样式
. 并对 <iframe>标签引用的 src="***.html" 文件中设置:
<body style="background-color:transparent"> 或 <body bgcolor="transparent">但我测试 iframe 标签 设置allowtransparency=true 与
iframe 背景样式不设置效果一样, 都是没有背景(即,默认父元素背景样式) !!综合来说:没找到使背景透明的方法,如果有人知道麻烦告知,谢谢~~ - 背景样式设置:需在 iframe 样式设置时添加背景样式设置
如下: 需在 iframe 样式设置时,添加背景设置,具体代码如下:
.iframe_page #framePage{
width: 300px;
height: 200px;
background-color: #adb9cd; //设置嵌入的iframe背景
border: 3px dashed #cc9797;
}整体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head> <style>
.iframe_page{
width: 400px;
height: 260px;
background-color: #dfdfdf;
}
.iframe_page #framePage{
width: 300px;
height: 200px;
background-color: #adb9cd; //更改嵌入的 iframe 背景颜色
border: 3px dashed #cc9797;
}
</style> <body>
<!-- 嵌入 iframe 模块 -->
<div class="iframe_page">
<iframe id="framePage" src="inner_page.html"></iframe>
</div>
</body>
</html>更改后的 test_iframe01.html
3. 嵌入的 iframe 页面位置
查到资料显示,有两种方式:
- 使用 iframe 元素的 属性 align 进行设置(由于兼容性,align设置法不推荐)
如下: <iframe id="framePage" align="right" allowtransparency="true" src="inner_page.html" frameborder=""></iframe>
- 使用 float 进行样式设置(推荐)
如下:
.iframe_page #framePage{
width: 600px;
height: 300px;
background-color: #adb9cd;
border: 3px dashed #cc9797;
float: right
上述两者效果一样,但其常用属性值只有: left, right, 并没有达到我们想要的居中效果
解决办法: 可让 iframe 外层的 div 元素居中,并可设置 iframe 与 外层div大小完全相同,即可实现居中
如下:
.iframe_page{
margin: auto;
width: 400px;
height: 260px;
background-color: #dfdfdf;
}
.iframe_page #framePage{
width: 400px;
height: 260px;
background-color: #adb9cd;
border: 3px dashed #cc9797;
}
完整代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head> <style>
.iframe_page{
margin: auto;
width: 400px;
height: 260px;
background-color: #dfdfdf;
}
.iframe_page #framePage{
width: 400px;
height: 260px;
background-color: #adb9cd;
border: 3px dashed #cc9797;
}
</style> <body>
<!-- 嵌入 iframe 模块 -->
<div class="iframe_page">
<iframe id="framePage" src="inner_page.html"></iframe>
</div>
</body>
</html>
更改后的 test_iframe01.html
4. 嵌入的 iframe 页面的滚动条
- 使用 iframe 的 scrolling 属性(横/纵向一起控制)
. 显示滚动条:scrolling="yes" 或 scrolling="auto" (超出边框自动显示滚动条,且可滚动)
. 不显示滚动条: scrolling="no" (始终不显示滚动条,且超出部分不能滚动) - 使用 overflow 进行样式设置
overflow 样式(横/纵)选项有:
. 显示滚动条,内容剪切,可滚动:overflow: scroll; //等价于 overflow: auto;
. 不显示滚动条,内容不可见,不可滚动:overflow: hidden;
. 不显示滚动条,内容超出框,不可滚动:overflow: visible;
. inherit: 继承父元素 overflow 属性 横向/纵向 单项设置:overflow-x 或 overflow-y 属性值同 overflow
总结以上样式:
. 滚动条显示 且 可滚动查看内容
. 滚动条不显示 且 不可滚动查看内容
这不是我们想要的 滚动条不显示 但 可滚动查看内容,即可以自定义滚动条样式
查询资料显示可设置
. 父页面标准<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 要改为 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> . 设置iframe页面:
body, html{
scrollbar-3dlight-color:#D4D0C8; /*- 最外左 -*/
scrollbar-highlight-color:#fff; /*- 左二 -*/
scrollbar-face-color:#E4E4E4; /*- 面子 -*/
scrollbar-arrow-color:#; /*- 箭头 -*/
scrollbar-shadow-color:#; /*- 右二 -*/
scrollbar-darkshadow-color:#D7DCE0; /*- 右一 -*/
scrollbar-base-color:#D7DCE0; /*- 基色 -*/
scrollbar-track-color:#;/*- 滑道 -*/
}
我测试之后完全不行,卡壳了几天,最终采用插件完成,在此推荐 jquery.nicescroll.min.js 插件
jquery.nicescroll v3.7.6
1. 支持div,iframe,html 等
2. 兼容IE7-8,safari,firefox,webkit内核浏览器(chrome,safari)以及智能终端设备浏览器的滚动条
3. jq插件,jq 版本要高于 1.8
cursorcolor - 设置滚动条颜色,默认值是“#”
cursoropacitymin - 滚动条透明度最小值
cursoropacitymax - 滚动条透明度最大值
cursorwidth - 滚动条的宽度像素,默认为5(你可以写“5PX”)
cursorborder - CSS定义边框,默认为“1px solid #FFF”
cursorborderradius - 滚动条的边框圆角
ZIndex的 - 改变滚动条的DIV的z-index值,默认值是9999
scrollspeed - 滚动速度,默认值是60
mousescrollstep - 滚动鼠标滚轮的速度,默认值是40(像素)
touchbehavior - 让滚动条能拖动滚动触摸设备默认为false
hwacceleration - 使用硬件加速滚动支持时,默认为true
boxzoom - 使变焦框的内容,默认为false
dblclickzoom - (仅当boxzoom = TRUE)变焦启动时,双点击框,默认为true
gesturezoom - boxzoom = true并使用触摸设备)变焦(仅当激活时,间距/盒,默认为true
grabcursorenabled“抢”图标,显示div的touchbehavior = true时,默认值是true
autohidemode,如何隐藏滚动条的作品,真正的默认/“光标”=只光标隐藏/ FALSE =不隐藏的背景下,改变铁路背景的CSS,默认值为“”
iframeautoresize中,AUTORESIZE iframe上的load事件(默认:true)
cursorminheight,设置最低滚动条高度(默认值:)
preservenativescrolling,您可以用鼠标滚动本地滚动的区域,鼓泡鼠标滚轮事件(默认:true)
railoffset,您可以添加抵消顶部/左轨位置(默认:false)
bouncescroll,使滚动反弹结束时的内容移动(仅硬件ACCELL)(默认:FALSE)
spacebarenabled,允许使用空格键滚动(默认:true)
railpadding,设置间距(默认:顶:,右:,左:,底部:})
disableoutline,Chrome浏览器,禁用纲要(橙色hightlight)时,选择一个div nicescroll(默认:true)
nicescroll详细参数配置:
使用 jquery.nicescroll.min.js 插件设置的 iframe 滚动条样式,举例:
<!--<!DOCTYPE html>-->
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
<p>岁月</p>
</body>
</html>
子页面 inner_page.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="jquery.nicescroll.min.js"></script>
</head> <style>
.iframe_page{
width: 300px;
height: 260px;
background-color: #dfdfdf;
}
.iframe_page #myFrameId{
width: 280px;
height: 240px;
background-color: #adb9cd;
border: 3px dashed #cc9797;
} </style> <body style="scrollbar-base-color:red">
<!-- 嵌入 iframe 模块 -->
<div class="iframe_page">
<iframe id="myFrameId" src="inner_page.html"></iframe>
</div>
<script>
$("#myFrameId").niceScroll({
cursorcolor: "#E62020", //滚动条颜色
cursoropacitymax: 0.5, //滚动条透明度
touchbehavior: false,
cursorwidth:"5px",
cursorborder:"",
cursorborderradius:"5px" });
</script>
</body>
</html>
父页面 test.html
运行结果如下:

5. iframe 父页面调用子页面
方法1: iframe标签定义了 id 属性,eg: <iframe id="myIframeId"></iframe> , 则 iframe 页面 调用子页面方法,可使用document.getElementById('myIframeId').contentWindow.***();
/* 1. myIframeId: 为 属性 id 的值
* 2. ***()方法 写在 子页面(即 src 链接的文件)中
*/
方法2: iframe标签定义了 name 属性,eg:<iframe name="myIframeName"></iframe> ,则 iframe 页面调用子页面方法,可使用 myIframeName.window.***()
/* 1. myIframeName: 为 属性 name 的值
* 2. ***()方法 写在 子页面(即 src 链接的文件)中
*/
举例: 主页面(test.html -- 同时定义了 id 和 name)和子页面(inner_page.html )具体内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head> <style>
.iframe_page{
width: 400px;
height: 260px;
background-color: #dfdfdf;
}
.iframe_page #framePage{
width: 300px;
height: 200px;
background-color: #adb9cd;
border: 3px dashed #cc9797;
}
</style> <body>
<!-- 嵌入 iframe 模块 -->
<div class="iframe_page">
<iframe name="myFrameName" id="myFrameId" src="inner_page.html" onload="callChildPage()"></iframe>
</div>
<script>
/**
* 父页面方法:调用子页面的方法
*/
function callChildPage() {
myFrameName.window.childSayHello(); //效果等价于 document.getElementById("framePage").contentWindow.childSayHello();
}
</script>
</body>
</html>
主页面 test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/**
* 子页面方法: 父页面要调用的方法
*/
function childSayHello() {
alert('welcome: function in child');
}
</script>
</body>
</html>
子页面 inner_page.html
6. iframe 子页面调用父页面
iframe src链接的子页面 调用 iframe父页面 方法,使用 window.parent.***();
/* 1. window.parent.***() 等价于 parent.***() //即 window 可以省略
* 2. ***()方法 写在 父页面(即 iframe标签所在的文件)中
*/
举例: 主页面(test.html)和子页面(inner_page.html)具体内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head> <style>
.iframe_page{
width: 400px;
height: 260px;
background-color: #dfdfdf;
}
.iframe_page #framePage{
width: 300px;
height: 200px;
background-color: #adb9cd;
border: 3px dashed #cc9797;
}
</style> <body>
<!-- 嵌入 iframe 模块 -->
<div class="iframe_page">
<iframe id="framePage" src="inner_page.html"></iframe>
</div>
<script>
/**
* 父页面方法: 子页面要调用的方法
*/
function parentSayHello() {
alert('welcome: function in parent.');
}
</script>
</body>
</html>
主页面 test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body onload="callParentFunc()">
<script>
/**
* 子页面方法:用于调用父页面方法
*/
function callParentFunc() {
window.parent.parentSayHello(); //等价于 parent.parentSayHello();
}
</script>
</body>
</html>
子页面 inner_page.html
总结 5-6,父窗口与子窗口方法调用
方法1:id 属性法
. HTML语法:<iframe id="myFrameId" src="child.html"></html>
. 父窗口调用子窗口:
JS:document.getElementById("myFrameId").contentWindow.childMethod()
JQuery: $('#myFrameId')[0].contentWindow.childMethod();
. 子窗口调用父窗口:window.parent.parentMethod() 或 parent.parentMethod()
方法2:name 属性法
. HTML语法:<iframe name="myFrameName" src="child.html"></html>
. 父窗口调用子窗口: myFrameName.window.childMethod()
. 子窗口调用父窗口:window.parent.parentMethod() 或 parent.parentMethod()
注:
父页面要改变子页面某个标签中的值,eg:改变id="button"的文字时,可用:
id 属性法:document.getElementById("test").value = "调用结束";
name 属性法:myFrameName.window.document.getElementById("button").value="调用结束";
子页面要改变父页面某个标签中的值,eg:改变id="test"的文字时,可用:
id 属性法:
JS:window.parent.document.getElementById("test").value = "调用结束";
JQuery:$(window.parent.document).contents().find("#test").val("调用结束");
name 属性法:
parent.window.document.getElementById("button").value="调用结束";
有问题或有其他的欢迎大家指导哈~~
后续继续努力~~
HTML+CSS之iframe的更多相关文章
- 判断脚本,图片,CSS,iframe等是否加载完成
1.图片 <img id="MyImg" src="src"/>jquery实现:$("#MyImg").load(functi ...
- JavaScript/HTML/CSS 之 iframe自适应高度
最高效简介的手段是利用CSS的内置calc函数: iframe{ height:calc(100vh - 50px) auto;//假令:html顶部有高度为50px的导航条 //min-height ...
- [css]解决iframe在ios设备上无法滚动
原因: safari的webkit内核特性 解决方案: 在iframe外包裹一层div并另外设置其css属性为如下: -webkit-overflow-scrolling:touch; overflo ...
- 用css解决iframe的自适应问题(跨域下同样有用)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- IE下 CSS hover iframe失效
预期:某个div下存在iframe子元素,当鼠标移动到该div下,该iframe出现,移出则iframe消失,移入iframe不会引起iframe消失. 问题:在火狐下结果满足预期,在IE下,鼠标移入 ...
- HTML+CSS 滚动条样式自定义 - 适用于 div,iframe, html 等
友言:这两天被滚动条整的无与伦比,在此做下总结: 首先自定义浏览器滚动条的实现原理:计算浏览器滚动条的高度,层级1的高度与滚动条的总高度是一样的,通过相似比例计算: 浏览器滚动条总高度 :滚动条高度 ...
- iframe 问题集合
1. 历史记录问题 Firefox: 如果iframe是静态存在在HTML中时,iframe的任何src或者location改变都会被记录到浏览器history中. 如果iframe是在页面加载完成后 ...
- iframe中的历史记录问题汇总及解决方案[转]
在做页面统计的时候遇到了两个问题: 1.包含iframe的页面,在IE下按后退按钮不能刷新主页面.隐藏Iframe的src是统计程序的url,每点一次后退,就会发出一次页面加载时间请求. 2.由js动 ...
- 如何改变iframe滚动条的样式?
如何改变iframe滚动条的样式? web前端开发 css javascript iframe html RayLiao 2014年11月19日提问 · 2014年11月20日更新 关注 关注 收藏 ...
随机推荐
- C#继承机制 多级继承
一些面向对象语言允许一个类从多个基类中继承,而另一些面向对象语言只允许从一个类继承,但可以随意从几个接口或纯抽象类中继承. 只有C++支持多级继承,许多程序员对此褒贬不一.多级继承常会引起继承来的类之 ...
- mac利用套件管理工具homebrew正确地同时安装python2.7和python3
MAC OSX 正確地同時安裝 PYTHON 2.7 和 PYTHON3 Python3 出來了(其實已經出來很久了,暈)!但是還是有很多 library 還是使用 Python2.7,所以要 ...
- 火狐IE event和target的兼容
一.event对象 IE 中可以直接使用 window.event 对象,而 FF 中则不可以,解决方法之一如下: var theEvent = window.event || arguments.c ...
- linux正则表达式扩展部分
扩展的正则表达式(Extended Regular Expressions): 使用的命令为:grep -E以及egrep [了解即可] 1)+ 表示重复“一个或一个以上”前面的字符(*是0或多 ...
- vue.js devtools安装
在调试的时候chrome会提示安装vue devtools,我以为是要在chrome的程序商店直接安装,但是国内对谷歌的和谐,无法访问谷歌商店内容 官方有源代码,可以下载下来自行编译安装 官方地址:h ...
- JavaScript算数
常数 Math.E 圆周率 Math.PI 2的平方根 ...
- 26.VUE学习之--提交表单不刷新页面,事件修饰符之使用$event与prevent修复符操作表单
提交表单不刷新页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Flask初学者:Python虚拟环境,Flask安装,helloworld,run方法
一.Python虚拟环境: 作用:使Python框架的不同版本可以在同一台电脑上运行.如果在电脑上全局(C盘或者其他目录)安装Flask(或其他Python框架),当你使用其他版本的Flask(比如有 ...
- Python入门基础--变量与基本数据类型
变量 什么是变量 变量就是变化的量,变就是变化,量用于衡量描述对象的状态 为什么要有变量 程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序 ...
- 权限组件(11):基于formset实现批量增加
效果图: 增加页面: 编辑页面: 因为后面要对权限进行批量操作,所以先用这个示例演示下如何实现批量操作 数据库 from django.db import models class Menu(mode ...