是的,在HTML5中被彻底移除,因其破坏语义结构、损害可访问性与SEO、违背响应式设计原则;应改用CSS Grid/Flexbox布局+带ARIA属性的,或采用服务端包含、SPA组件化路由等现代方案。
是的, 在 HTML5 中被彻底移除,不再被
任何现代浏览器支持——不是“不推荐”,而是语法无效,解析时会被忽略或触发 quirks mode。
为什么 被砍掉?
它破坏了基本的文档语义结构、阻碍可访问性(屏幕阅读器难以导航)、干扰 SEO(搜索引擎无法合理判断 frame 内容归属)、且与现代响应式设计完全冲突。HTML5 的设计原则是“内容优先、语义清晰、单页可控”,而 让页面变成多个独立文档上下文,违背这一前提。
替代方案:用 + CSS 布局模拟 frameset 行为
本身没被废弃,仍是 HTML5 标准元素,但用法和定位完全不同:它是嵌入式内容容器,必须放在常规流式文档中,由父页面统一控制样式与交互。
-
→ 改用 CSS Grid 或 Flexbox 划分区域,再在每个区域放 - 每个
→ 替换为,并手动加title和 ARIA 属性提升可访问性 - 跨 frame 脚本通信(如
parent.frames[1].location.href)→ 改用postMessage(),且必须校验event.origin
更现代的替代思路:服务端整合 or 单页应用(SPA)
如果原 frameset 是为了“固定导航+动态内容”,现在主流做法是:
- 服务端:用 include / template partial(如 PHP
include 'header.php';、Jinja2{% include 'nav.html' %})生成完整 HTML,避免客户端拆分 -
前端:用 React/Vue 的组件化路由(如
+或)复用布局组件,内容按需加载 - 纯静态场景:用
fetch()加载 HTML 片段后注入,比 iframe 更轻量、无跨域/cookie 隔离问题真正难迁移的不是技术实现,而是旧系统里隐含的 frame 间全局变量共享、document.write 覆盖、以及 onload 顺序依赖——这些在 iframe 或 SPA 下都得重写逻辑,不能只换标签。








