HTML系列教程:17_HTML 框架(frameset、frame、iframe)零基础详解

⚠重要提醒: <frameset><frame> HTML5 已经废弃,不再推荐使用 ,仅做历史了解; 现在唯一还在使用的框架标签是 <iframe> 内联框架

HTML 框架作用:把浏览器窗口切分成多个独立页面区域,每个区域加载一个单独的 html 文件。 简单理解:一个浏览器窗口,同时嵌入好几个网页。

分为两类:

  1. 老式框架:frameset + frame(HTML5 废弃,不要写新项目)
  2. 内联框架:iframe(现在还在用,把另一个网页嵌入当前页面里面)

一、老式框架 frameset + frame(了解即可,禁止实际开发使用)

HTML4 时代使用,HTML5 已经完全删除。 ❗注意:使用<frameset>的时候,不能有 body 标签!frameset 直接替代 body。

1、frameset 属性

  • rows:按 切割窗口,上下分割。格式:高度1,高度2,...
  • cols:按 切割窗口,左右分割。格式:宽度1,宽度2,... 数值可以写像素 px,也可以写百分比%*代表剩余全部空间。

frame 属性

  • src:要加载的 html 文件地址
  • name:框架名字,可以给 a 标签 target 用来指定在哪个框架打开链接
  • noresize:禁止拖动分割条改变大小
  • scrolling="no":取消滚动条

示例 1:上下分割 rows

把页面分成上下两部分:上面 100 像素,剩下全部给下面

html 复制代码
<!-- 注意:这里没有<body>标签!! -->
<frameset rows="100,*">
    <frame src="top.html" name="topFrame" noresize>
    <frame src="main.html" name="mainFrame">
</frameset>

效果:浏览器窗口切成上下两块,上块显示 top.html,下块显示 main.html。

示例 2:左右分割 cols

左边 200px,右边占剩下全部宽度

html 复制代码
<frameset cols="200,*">
    <frame src="left.html" name="left">
    <frame src="right.html" name="right">
</frameset>

示例 3:框架嵌套(经典后台布局:上,左,右)

顶部一行,下面再左右分栏

html 复制代码
<!-- 先切上下,高度100,剩下* -->
<frameset rows="100,*">
    <frame src="top.html">
    <!-- 下面部分继续左右切分 -->
    <frameset cols="220,*">
        <frame src="menu.html">
        <frame src="content.html">
    </frameset>
</frameset>

target 跳转到指定框架

left 页面里面的 a 链接,点击在 main 框架打开页面:

html 复制代码
<a href="news.html" target="mainFrame">打开新闻</a>

target="框架name值",链接在指定框架窗口加载。

frameset 为什么被 HTML5 废弃(缺点)

  1. 不能放 body,页面结构怪异;
  2. 不利于搜索引擎抓取;
  3. 打印、移动端兼容性很差;
  4. 用户体验不好,后退按钮混乱。

✅结论:写作业可以了解,实际项目绝对不要用 frameset/frame


二、iframe 内联框架(现在唯一在用的框架标签,重点学习)

<iframe>在当前 HTML 页面里面,挖一块区域,嵌入另外一个网页。 不需要去掉 body,直接写在 body 里面。

基础语法

html 复制代码
<iframe src="目标网页地址" width="宽度" height="高度"></iframe>

常用属性

属性 说明
src 嵌入网页的 url 地址,可以是本地 html,也可以是外部网址
width iframe 盒子宽度,可以 px 或者百分比
height iframe 盒子高度
frameborder="0" 去掉 iframe 默认边框(常用)
scrolling="no" 是否显示滚动条;no = 不显示,yes 显示,auto 自动
name iframe 名字,a 标签 target 可以在此窗口打开页面

示例 1:嵌入本地另一个 html 页面

假设同一个文件夹有 news.html,把它嵌入当前页面一块区域

html 复制代码
<!DOCTYPE html>
<html lang="zh‑CN">
<head>
    <meta charset="UTF‑8">
    <title>iframe演示</title>
</head>
<body>
    <h2>当前主页面</h2>
    <p>下面嵌入另外一个网页:</p>
    <!-- 嵌入news.html,宽600,高350,去掉边框 -->
    <iframe src="news.html" width="600" height="350" frameborder="0"></iframe>
</body>
</html>

示例 2:a 链接 target 指向 iframe,点击链接在 iframe 里面打开页面

给 iframe 设置 name,a 标签 target 等于这个 name。

html 复制代码
<body>
    <p>点击下面链接,内容会在下方框内打开</p>
    <a href="page1.html" target="myIframe">打开页面1</a>
    <a href="page2.html" target="myIframe">打开页面2</a>

    <!-- iframe命名为 myIframe -->
    <iframe name="myIframe" width="700" height="400" frameborder="0"></iframe>
</body>

效果:点击超链接,不新开浏览器标签页,在这个小方框内加载新网页

示例 3:嵌入外部网站(注意很多网站禁止被 iframe 嵌套,会报错)

html 复制代码
<iframe src="https://www.bilibili.com" width="800" height="500" frameborder="0" scrolling="auto"></iframe>

⚠很多大型网站设置防盗链,拒绝被别人 iframe 嵌入,页面会空白或者报错,属于正常现象。

iframe 实际开发常见用途

  1. 嵌入视频播放器(视频网站的分享代码就是 iframe)
  2. 嵌入地图
  3. 后台管理系统局部页面刷新
  4. 嵌入第三方组件、表单

iframe 的缺点

  1. 搜索引擎不容易抓取 iframe 里面的内容;
  2. 页面加载变多,性能有损耗;
  3. 跨域限制:JS 很难操作 iframe 内外页面。

frameset 和 iframe 对比

标签 是否 HTML5 支持 原理 使用场景
frameset+frame ❌废弃 分割整个浏览器窗口,替代 body 老项目历史代码,新项目禁用
iframe ✅支持 在当前页面中嵌入一块子网页 嵌入视频、地图、第三方页面

新手高频坑

  1. 使用 frameset 写代码还写了<body>,页面直接乱掉。

frameset 不能和 body 共存,HTML5 直接不要学这个,了解即可。

  1. iframe 没有写frameborder="0",四周有难看默认黑色边框。

  2. 想嵌入外部网站,页面空白。

对方网站设置 X‑Frame‑Options,禁止被 iframe 嵌套,这是网站安全设置,无法解决,换别的地址测试。

  1. target 名字写错,链接没有在 iframe 打开,而是新开窗口。

target 的值必须和 iframe 的name属性完全一模一样,区分大小写。

完整可直接复制运行的 iframe 示例

html 复制代码
<!DOCTYPE html>
<html lang="zh‑CN">
<head>
    <meta charset="UTF‑8">
    <title>iframe完整例子</title>
    <style>
        iframe{
            border:1px solid #ccc;
        }
    </style>
</head>
<body>
    <h1>主页面标题</h1>
    <p>下面方框是嵌入的子页面区域</p>

    <div>
        <a href="https://example.com" target="box">加载示例页面</a>
    </div>
    <br>

    <iframe
        name="box"
        src="https://example.com"
        width="750"
        height="420"
        frameborder="0"
    >
        您的浏览器不支持iframe
    </iframe>

</body>
</html>

iframe 标签中间写文字,浏览器不支持 iframe 的时候会显示这段提示。

本篇知识点总结

  1. <frameset> + <frame> HTML5 已废弃,把整个浏览器分割多个页面,仅作历史了解,新项目不要写。
  2. <iframe>内联框架仍然可用,在当前页面里面嵌入一小块子网页。
  3. iframe 核心属性:src地址、width/height尺寸、frameborder="0"去除边框,name配合 a 标签target在框内跳转页面。
  4. 用途:嵌入视频、地图、第三方页面;缺点:不利于 SEO,存在跨域限制。
相关推荐
IT_陈寒1 小时前
React的useEffect依赖项居然骗了我三年
前端·人工智能·后端
一个金牛座的前端1 小时前
AI 写前端,优化的是演示,不是交付
前端·ai·cursor
球球不吃虾1 小时前
Nuxt在使用过程中的一些小总结(二)
前端·vue·nuxt
2601_958352905 小时前
A-59U 仅 37mm 却集成 USB + 双波束?
前端·回声消除·语音模块·降噪处理·降噪消回音
泯泷10 小时前
那段文字是谁删的?Yjs 14 正式版之前,一套删除归属方案的实现与边界
前端·javascript·算法
野槐13 小时前
前端项目优化(有了我,会发生...)
前端
aa小小14 小时前
【无标题】
前端
计算机魔术师14 小时前
还在单线程跟 AI 聊天?Claude Code 并行多会话让你一个人干三个人的活
前端
志尊宝15 小时前
Vue3 零基础每日笔记(038):亲手封装 useDebounceFn 与 useThrottleFn——高频事件的流量阀
前端·javascript·vue·html·vue3