iframe内部页面html,body高度自动变成100%的问题

我们知道,一个页面在不添加任何样式的情况下,body的高度应该是等同于其内容的高度。当body内部无任何东西的情况下,body自身的高度应该是为0。

然而今天发现一个奇怪的问题,在Runjs的代码预览页http://runjs.cn/code/vnfgw0nd,内嵌的iframe,里面生成的页面html,body元素的实际高度都是100%,然而在其上什么样式都没有设置。
而与之类似的站点jsbinjsfiddle(今天发现在自家电脑上内部body高度也一样是100%了),其预览框iframe内部html,body高度表现则与我们原来所认知的一样。

然而,当我们在jsbin、jsfiddle这些表现正常的网站上,通过location.href 改变其iframe的地址,比如执行location.href = 'about:blank',当iframe载入完成后html,body的高度也变成了100%。

Google、百度齐上阵,依然没搜到原因,搜出一大堆iframe高度自适应的问题。

有大虾能解释下iframe内部html,body高度自动变成100%的原因吗?

补充一张图:图片描述

阅读 5.7k
2 个回答

这应该是个hack,他没写doctype所以启用了标准浏览器的混杂模式(怪异模式),
http://www.cs.tut.fi/~jkorpel...,第五条有说

The height of the body element is 100%, as opposite to being determined by its content. (If you want 100% height for body in standards mode, set html, body { height: 100% } in CSS.)

[此为更新]

之前只关注,body会自动 inherit iframe 的高度,但是没有关心为什么。

看了采纳的说法并且去stackoverflow更深的了解一下。

如果 iframe 没有给src或者src中的html 没有doctype,即使container拥有doctype但是子页面还是启用怪异模式。

body 高度 100%

如果src中的页面是有doctype的,则就会启用标准模式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题