html - 嵌入 iframe 时,CSS 高度 100% 的行为有所不同

标签 html css iframe

JSFiddle:https://jsfiddle.net/570qvk2p/1/

我有一个嵌入到 iframe 中的第三方 html 文档。 在本文档中,有一个元素的 css 规则指定高度:100%; parent 在树上爬了一些台阶,高度是固定的。

当以原始形式呈现第三方 HTMLDocument 时,具有 100% 高度的元素假定大小为 18px(适合内容)。在 iframe 内呈现时,元素采用固定高度父级 (200px) 的大小。

为什么在 iframe 中调整大小会有所不同,我该如何抵消这种情况?

以下是您可以从 fiddle 中看到的 html,当插入 iframe 时与插入顶级文档时样式不同:

<div style="height: 200px;">
  <ul style="display:block;">
    <li>
      <div style="height: 100%;">1</div>
    </li>
    <li>
      <div style="height: 100%;">2</div>
    </li>
    <li>
      <div style="height: 100%;">3</div>
    </li>
  </ul>
</div>

这个问题: Element in iframe with height: 100% strech 描述了相同的现象,但我可以通过在推迟到 iframe 大小之前在 html 标签上设置一个大小来解决这种特殊情况。我在上面展示的似乎是那个人描述的同一问题的更一般情况。

最佳答案

您的 iframe 没有 doctype,这似乎是导致呈现问题的原因。

使用定义的文档类型构建您的 iframe 可以在您的页面和 iframe 之间提供一致的呈现:

var doc = window.frames[0].document;

var a = doc.createElement("div");
var b = document.createElement("div");
var content = "<div style=\"height: 200px;\"><ul style=\"display:block;\"><li><div style=\"height: 100%;\">1</div></li><li><div style=\"height: 100%;\">2</div></li><li><div style=\"height: 100%;\">3</div></li></ul></div>";

doc.open();
doc.write("<!DOCTYPE html>");
doc.write("<html>");
doc.write("<head></head>");
doc.write("<body>" + content + "</body>");
doc.write("</html>");
doc.close();

b.innerHTML = content;
document.body.appendChild(b);

Updated jsfiddle

我的印象是 iframe 继承了父页面的文档类型,但事实并非如此。也许其他人可以详细说明?

关于html - 嵌入 iframe 时,CSS 高度 100% 的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40888566/

相关文章:

html - 如何实现横向卡片样式

javascript - jQuery:类似 Accordion 的格式。如果选中其中一个复选框,如何防止 div 折叠

javascript - 如何使用 Angular2 从控制台输出获取名称到 HTML 页面

css - Adobe Brackets 0.41 - 在实时预览中出现 CSS 自动完成错误

node.js - 使用 devtool 协议(protocol)从嵌入式 iframe 捕获请求(XHR、JS、CSS)

javascript - 将 IFrame 滚动到顶部在 Chrome 中不起作用

html - Angular 6 组件未显示

html - CSS 位置 :fixed and IE7

html - 预加载图像队列

javascript - 在 javascript 中打开带有 href 链接的弹出窗口