设置marginheight="0"无效,因html5已废弃该属性;真正导致iframe内部留白的是被加载页面body的margin/padding,需在源页面中重置body{margin:0;padding:0}或同源时用js注入清除。

marginheight 在现代开发中基本失效,它既不被 HTML5 标准支持,也不影响 <iframe></iframe> 渲染行为 —— 你看到的“内部留白”,99% 是 iframe 加载页面自身 的 margin 或 padding。
为什么设置 marginheight="0" 没用
浏览器(Chrome/Firefox/Edge)早已忽略该属性;DevTools 的 computed styles 里根本查不到对应样式项;HTML5 规范明确废弃了 marginheight 和 marginwidth。即使写上 <iframe src="a.html" marginheight="0"></iframe>,a.html 里的 body { margin: 8px; } 依然会照常渲染出顶部/底部空白。
真正起作用的三个地方
控制 iframe “内部看起来有没有白边”,要分三层处理:
- iframe 元素自身的外边距:用 CSS
margin控制它和周围元素的距离(比如iframe { margin: 12px; }) - iframe 内容页的 body 边距:在被加载的 HTML 文件中加
body { margin: 0; padding: 0; } - 同源时可 JS 注入:若 iframe 同源,可用
iframe.contentDocument.body.style.margin = '0'动态清除
跨域 iframe 怎么办
无法访问 contentDocument,所以只能靠源头控制:
- 确保被嵌入页面(如
https://example.com/widget.html)本身已重置body样式 - 如果无法修改源页面,可在 iframe 外层套一层
<div style="overflow: hidden;"> 并设固定高度,视觉上裁掉多余空白 <li>不要依赖 <code>scrollHeight计算高度——跨域时读不到,会抛SecurityError
最易被忽略的一点:很多人反复检查 iframe 标签属性,却忘了打开 src 指向的 HTML 文件,把里面的 默认边距清掉 —— 这才是白边的真正来源。











