是的, 已被html5彻底移除,现代浏览器不支持且语法无效;因其破坏语义结构、损害可访问性与seo、违背响应式设计,应改用css grid/flexbox布局+语义化标签(如、)或配合postmessage等现代方案。

HTML <frameset></frameset> 已被现代浏览器弃用,且无法通过 HTML5 验证 —— 如果你正在新项目中考虑用它做布局,直接放弃。
为什么 <frameset></frameset> 会触发“document.write is not defined”或空白页
主流浏览器(Chrome、Firefox、Edge)在 <frameset></frameset> 页面中禁用 document.write(),且不支持 与 <frameset></frameset> 共存。一旦页面同时包含两者,解析器会静默丢弃 内容,或报错 DOMException: Failed to execute 'write' on 'Document'。
- 浏览器认为
<frameset></frameset>是独立的文档结构替代方案,强制要求页面以<frameset></frameset>为根,不能混用 - 任何 JS 脚本里调用
document.write()(比如旧版统计代码、广告 SDK)都会立即失败 - 即使页面能加载,
<frame>加载的子页面若含<script></script>且依赖父级window.parent,也常因跨域或上下文隔离而中断
rows 和 cols 的数值行为差异很实际
它们看似只是“分块”,但单位类型直接影响布局稳定性:
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
-
rows="100,*,200":第一行固定 100px,第三行固定 200px,中间*吃掉所有剩余高度 —— 这是唯一能自适应窗口缩放的方式 -
rows="30%,40%,30%":三行严格按比例分配,但若内容溢出,不会自动滚动,而是截断或撑破框架(取决于scrolling属性) -
rows="100px,200px":只定义两行,总高仅 300px,剩余空间默认留白,且无法响应窗口变小 —— 常见于老后台顶部菜单 + 主内容区,但移动端完全失效
注意:cols 行为一致,但列宽对文本流影响更敏感;混合使用 rows 和嵌套 <frameset></frameset> 时,内层 cols 会相对于外层某一行的宽度计算,极易失控。
替代方案不是“选一个”,而是按场景切分
别试图用 Flexbox 或 Grid “模拟 frameset 的切换效果”。真实需求其实就三类:
- 需要左侧菜单 + 右侧内容动态加载?用
<aside></aside>+<main></main>+fetch()替换<frame src="...">,配合history.pushState()管理 URL - 需保持顶部导航/底部版权始终可见,中间区域滚动?CSS
position: sticky或 Grid 的grid-template-rows: auto 1fr auto更可靠 - 必须嵌入第三方页面(如报表系统、监控看板),且无法改源码?用
<iframe src="..." sandbox="allow-scripts"></iframe>,它比<frame>更安全、可样式控制、支持 postMessage 通信
真正麻烦的不是语法,而是旧系统里那些隐式依赖 window.frames[0] 或 parent.location.href 的 JS 逻辑 —— 它们藏在几十个 .js 文件里,不运行到那一步根本不会暴露问题。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










