iframe/frameset/frame的区别

iframe

iframe属性的用法

<iframe>标签规定一个内联框架。内联框架可以在当前的HTML文档中插入框架,框架内可以链接另一个页面

它是 一个围堵标记,但围着的字句只有在浏览器不支援 iframe 标记时才会显示。

<body>
<iframe src="https://www.baidu.com"></iframe>
</body>

注意:所有的浏览器都支持iframe属性,可以把需要的文本放置在<iframe></iframe> 之间,这样就可以应对无法理解 <iframe> 的浏览器。

要使用css来为<iframe>定义样式

iframe属性的取值

  • frameborder 规定是否显示框架周围的边框,取值为1或0。(取值为1有边框,取值为0没有边框)也可以是yes或no。
  • height / width 规定框架的高度和宽度(取值px或%)
  • src 规定在框架中所显示的文档的URL
  • scrolling 规定是否在框架中显示滚动条(取值yes显示,no不显示,auto自动判断)
  • align 规定框架的对齐方式(取值left、right、top、middle、bottom)
  • name 规定内联框架的名称
  • marginheight 框架顶部和底部的外边距(取值pixel像素)
  • marginwidth 框架左侧和右侧的外边距(取值pixel像素)

iframe的书写格式

里面的内容只有在浏览器不支持iframe标记时才会显示出来

<iframe src="iframe.html" height="100px" width="300px" marginheight=1px marginwidth=1px name="ibox" align="middle" frameborder=1>哈哈啊</iframe>

iframe支持HTML全局属性,也支持事件属性

frameset

frameset的用法(框架模板)

frameset可以定义一个框架集。被用来组织多个框架,每一个框架都有着独立的文档。在frameset的简单应用中,frameset使用cols或rows属性来规定在框架中存在多少行多少列。

<html>
<head></head>
<frameset>
<frame src="">
<frame src="">
</frameset>
</html>

!注意:利用frameset和frame可以把网页制作成所需要的不同大小的框架,可以用来布局。

不能与 <frameset></frameset> 标签一起使用 <body></body> 标签。当需要为不支持框架的浏览器添加一个<noframes>标签时,则必须在<noframes>中嵌套<body>标签,那样<noframes>标签中的内容才会被显示出来。

frameset属性的属性值

cols 定义框架集中的列的数目和尺寸(取值px、% 和 *)

rows 定义框架集中的行的数目和尺寸(取值px、% 和 *)

注意:这两个属性都接受用引号括起来并用逗号分开的值列表,这些数值指定了框架的绝对(像素点)或相对(百分比或其余空间)宽度(对列而言),或者绝对或相对高度(对行而言)。这些属性值的数目决定了浏览器将会在文档窗口中显示多少行或列的框架。

实例:

1、构建三行框架(因为rows有三个值),三行的高度分别为150px,300px,150px(三行高度为1:2:1)

<frameset rows="150,300,150">

除非浏览器窗口正好为600px,否则浏览器就会自动按照(三行高度比例1:2:1)延伸或压缩第一个和最后一个框架,上下两个框架占据1/4的窗口空间;中间的框架会占据剩下1/2的空间。

<frameset rows="25%,50%,25%">

如果设置的百分比加起来不是100%(如20%,40%,20%),浏览器也会按照之间的比例进行重新给出尺寸以消除差异。

2、在<frameset>标签的cols和rows值中加入星号 * 的用法。*指示浏览器要在相邻的框架放入框架集之后,剩下的空间分配给各自的行或列。

会生成有固定宽度100px的框架列,和另一个框架列,这个框架列会占据框架集中剩下的所有空间。

<frameset cols="100,*,*">

3、对多个列或行属性值使用星号。在这样的情况下,相应的行或列将对可用空间进行等分。

<frameset cols="*,100,*">

生成三列,中间一列固定宽度100px,左右两侧分别生成尺寸相同的两列。等分剩下的空间。

4.如果在星号前放置一个整数值,相应的行或列就会相对地获得更多的可用空间

<frameset rows="100,3*,*,*">

生成四行框架,第一行框架集的10%。浏览器把框架集剩下的空间3/5分配给第二个框架,剩下两行各分1/5.

补充noframes标签

当浏览器完全显示不出这个框架时,页面就会显示出<noframes></noframes>内的内容。<noframes> 元素位于 <frameset> 元素内部。

<frameset>如果浏览器有能力处理框架,就不会显示出 frameset 元素中的文本。</frameset>

如果希望在<frameset>标签中使用<noframes>标签,就必须要把<noframes>的内容包含在<body></body>中;

<frameset cols = "25%, 25%,*">
  <noframes>
  <body>Your browser does not handle frames!</body>
  </noframes>
  
  <frame src ="venus.htm" />
  <frame src   ="sun.htm" />
  <frame src ="mercur.htm"   />
</frameset>

frame

frame的作用

<frame>定义frameset中的一个特定的窗口。只设定某一个框架窗口的特定属性。

注意:<frame>标签一定要和<frameset>标签一起合用。frame是自闭合标签没有结束标签。

<html>
<frameset cols="25%,50%,25%">
  <frame src="  " />
  <frame src="  " />
  <frame src="  " />
</frameset>
</html>

frame标签的属性

  • frameborder 规定是否显示框架周围的边框,取值为1或0。(取值为1有边框,取值为0没有边框)也可以是yes或no。
  • noresize 规定用户无法调整框架的大小(noresize="noresize")
  • src 规定在框架中所显示的文档的URL
  • scrolling 规定是否在框架中显示滚动条(取值yes显示,no不显示,auto自动判断)
  • name 规定内联框架的名称
  • marginheight 框架顶部和底部的外边距(取值pixel像素)
  • marginwidth 框架左侧和右侧的外边距(取值pixel像素)

三、实例

1、不能调整框架的大小

设置了noresize属性的框架不可以调整大小,当把鼠标移动到框架的表上时会发现边框不可以移动。

<html>
<frameset>
	<frame src="nav.html" noresize="noresize"/>
	<frame src="main.html"/>
	<frame src="content.html"/>
</frameset>
</html>

总结

经过上面的分析,总结iframe、frame、frameset三者之间的区别和联系。

1、frame不能脱离frameset单独使用,而iframe可以单独使用

2、frameset不能放在body标签中,frame嵌套在frameset中如果放在body中不能正常显示。(frameset和frame只规定了框架如何划分,不会显示任何内容,所以不需要放在body中)

3、iframe嵌套在frameset标签中,则必须放在body标签中,否则无法显示。(iframe用来显示引用的其他页面的内容,需要被显示,放在body中)

4、frame不能调整框架的宽高,只能通过frameset间接设置;iframe可以通过width和height属性来调整宽高,不能通过frameset控制

5、frameset不能被浏览器解读的时候,如果里面设置了noframes就会显示出来noframes标签内的内容。

6、iframe 可以放到表格里面。frame 则不行。

<table>
    <tr>
        <td><iframe id="" src=""></iframe></td>
    </tr>
</table>

补充

<iframe>的优缺点

<iframe>优点:

  • 解决加载缓慢的第三方内容如图标和广告等的加载问题
  • Security sandbox
  • 并行加载脚本

<iframe>的缺点:

  • iframe会阻塞主页面的Onload事件;

  • 即使内容为空,加载也需要时间

  • 没有语意

  • iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载

    使用iframe之前需要考虑缺点。如果需要使用iframe,最好是通过javascript动态给iframe添加src属性值,这样可以绕开以上问题

<iframe>frameset的相同点和不同点

相同点:
iframe 和frameset都是html布局的框架布局
不同点:
iframe是一个内联框架,是在页面里生成内部框架
frameset定义一个框架集,包含多个子框架,每个框架都是独立的文档

 

posted @ 2019-12-09 15:15  JIAYIYAN  阅读(904)  评论(0编辑  收藏  举报