html/css基础篇——关于浏览器window、document、html、body高度的探究

摘要:
IE有一个特点:窗口高度比真实视觉窗口低4px,表明IE窗口的四个边上有一个2px的间隙,这是IE自己的偏移值。例如,标准浏览器的html高度=html的填充高度+正文内容的偏移边距高度+正文属性的高度比较摘要显示,IE与标准浏览器的最大区别是文档和html的计算方法。应该注意,IE的文档高度可以是IE工作区的高度,因此它可以包括滚动条,如IE9+测试的第二个图所示。

  首先说明本人所理解的这几个元素的计算

  window高度应当是文档所在窗口的可视高度(没有包括浏览器的滚动条),计算方法document.documentElement.clientHeight

  document高度应该为文档内容的高度,计算方法Math.max(document.body[ "scrollHeight" ], document.documentElement[ "scrollHeight"])

  html高度应当为html元素的高度(包括边框滚动条),计算方法htmlElement.offsetHeight

  body高度是body元素的高度(包括边框滚动条),计算方法bodyElements.offsetHeight;

  以上测试方式和jQuery的处理相同。直接使用jQuery来测试。

  用例:

  注意:里面的#absolute是脱离文档流的元素。

  测试必要条件:

  1.所有测试都在没有设定margin/padding为整数的情况下测定。

  2.其中细节高度笔者使用QQ截图工具取像素对比

<!DOCTYPE html>
<html lang="ch-cn">
  <head>
  <meta charset="utf-8">
  <script type="text/javascript" src='jquery-1.9.1.js'></script>
    <style type="text/css">
    html,body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td{
      margin: 0;
      padding:0;
    }
    #absolute{
      position: absolute;
      margin-left: 300px;
      height: 500px;
      width: 500px;
      background: #ff0;
    }
    #normal{
      height: 300px;
      width: 300px;
      background: #f00;
    }
    </style>
  </head>
  <body>
  <div id='absolute' >我是absolute</div>
  <div id="normal">我是normal</div>
  <script type="text/javascript">
    function show(){
      console.log("window height " + $(window).height());
      console.log("document height " + $(document).height());
      console.log("html height " + $("html").height());
      console.log("body height " + $("body").height());
    }
  </script>
  </body>  
</html>

  显示效果为

  html/css基础篇——关于浏览器window、document、html、body高度的探究第1张

  第一组测试:IE8

html/css基础篇——关于浏览器window、document、html、body高度的探究第2张html/css基础篇——关于浏览器window、document、html、body高度的探究第3张html/css基础篇——关于浏览器window、document、html、body高度的探究第4张

  IE8总结:

  window可视窗口高度,不包括浏览器滚动条(IE后面两个图对比可得,第二个IE下面有个滚动条占6px)。IE有一个特点:window高度与真正的可视窗口相比会少4px(第三个IE图片可知,这个时候document的高度和可视窗口高度相同),说明IE的window四边有2px的间隙,也就是IE自己的offset值

  document文档高度,完全显示所有文档内容的高度(包括脱离文档流的元素显示,第一个IE图可得)和IE工作区(看html解释)取最大值(这个高度最终决定窗口滚动条能滚动显示到哪里)

  html高度是窗口的高度,这个窗口是IE自己划定的浏览器工作区域高度,包括可视窗口、2px的offset、浏览器滚动条等等,看下面的效果图

  html/css基础篇——关于浏览器window、document、html、body高度的探究第5张

  body高度是内容真实高度(脱离文档流定位的不再里面,三个图可以为此作证)

  第二组测试:IE9+

  html/css基础篇——关于浏览器window、document、html、body高度的探究第6张html/css基础篇——关于浏览器window、document、html、body高度的探究第7张

  html/css基础篇——关于浏览器window、document、html、body高度的探究第8张

  

  IE9+总结:

  window高度是可视窗口高度,不包括浏览器滚动条。

  document文档高度,完全显示所有文档内容的高度(包括脱离文档流的元素显示,第一个IE图可得)和IE工作区(看html解释)取最大值(这个高度最终决定窗口滚动条能滚动显示到哪里)

  html高度是窗口的高度,这个窗口是IE自己划定的浏览器工作区域高度,包括可视窗口、浏览器滚动条,比IE8要标准一些(没有offset了,滚动条和工作区边也没有了间隙,看下图)

  html/css基础篇——关于浏览器window、document、html、body高度的探究第9张

  body高度内容真实高度(脱离文档流定位的不再里面)

  第二组测试:chrome

html/css基础篇——关于浏览器window、document、html、body高度的探究第10张html/css基础篇——关于浏览器window、document、html、body高度的探究第11张

  chrome总结:

  window高度是可视窗口高度不包括浏览器滚动条

  document高度是完全显示所有文档内容的高度(包括脱离文档流的元素显示,第一个chrome图可得)和可视窗口高度取最大值(这个高度最终决定窗口滚动条能滚动显示到哪里)

  html高度和body内容高度相同

  body高度内容真实高度(脱离文档流定位的不再里面)

  第三组测试:Firefox

html/css基础篇——关于浏览器window、document、html、body高度的探究第12张html/css基础篇——关于浏览器window、document、html、body高度的探究第13张

  Firefox总结:

  window高度是可视窗口高度,不包括浏览器滚动条。

  document高度是完全显示所有文档内容的高度(包括脱离文档流的元素显示,第一个Firefox图可得)和可视窗口高度取最大值(这个高度最终决定窗口滚动条能滚动显示到哪里)

  html高度和body内容高度相同

  body高度内容真实高度(脱离文档流定位的不再里面)

  好了,总结一下:

  window高度是可视窗口高度,不包括浏览器滚动条高度。比较特别的是IE8的可视窗口边上有2px的offset,所以IE8的可视窗口高度会比我们看到的窗口要小4px。

  document高度是完整文档高度,这个高度计算根据浏览器不同而不同:标准浏览器document高度 = max(文档真实完整高度【包括脱离文档流的元素的显示】,可视窗口高度);IE浏览器document高度 = max(文档真实完整高度【包括脱离文档流的元素的显示】,IE工作区高度【需要注意的是iframe可以设置高度,这个高度就是工作区高度,所以IE工作区高度完全可能是高于整个显示屏高度的】)

  html高度分两种:标准浏览器html高度=body内容高度;IE浏览器html高度 = IE工作区高度(具体查看IE的分析)

  body高度是内容真实高度(脱离文档流定位的不再里面)。

  当然上面的分析没有计算偏移margin和padding在内。比如标准的浏览器html高度=html的padding高度+body内容的偏移margin高度+body内容高度

  

  对比总结中可以看出,IE和标准浏览器区别最大的是document和html的计算方法。有一点要说明的是,IE的documen高度因为可能是IE工作区高度,那么可能会包括滚动条,如IE9+测试的第二个图可以看出。

   上面的测试结果在,iframe中测试也同样适用。

  这种分析最耗时间,如果大家觉得不错就别光看不顶了。

免责声明:文章转载自《html/css基础篇——关于浏览器window、document、html、body高度的探究》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DHCP Option43配置torchvision.datasets.ImageFolder数据加载下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python3 爬虫-字体数字反爬

爬取网站:http://www.dianping.com/xian/ch0 反爬措施:对于某些数字和中文不是直接使用文本显示,如下图,对于"189条点评"中的8和9两个数字,"人均¥283"中的2、8和3三个数字,对于 "灞临路营背后西北200米"中的五个中文,都是经过一层字体加密 1 <!--HTML代码--> 2 <b...

[CSS]为什么不推荐在CSS中使用ID选择器

最近我在对 CSS 的样式进行一些性能测试,然后我的一些好友问我:为什么你不使用 IDs 来作为页面上一些特定的内容部分呢? 这个问题很难回答,有下面几个理由: 页面中的该元素无法重用 螺旋式下降导致的特异性 通过 IDs 用来标识一些非常特殊的内容,但牺牲了抽象性 性能方面可通过其他方式来解决 下面我们针对这四点进行深入探讨。 无法重用页面的元素 I...

13种常用按钮、文本框、表单等CSS样式

一、按钮样式.buttoncss {    font-family: "tahoma", "宋体"; /*www.52css.com*/    font-size:9pt; color: #003399;    border: 1px #003399 solid;    color:#006699;    border-bottom: #93bee2 1...

less 官网讲解 ( http://www.bootcss.com/p/lesscss/ )

变量 变量允许我们单独定义一系列通用的样式,然后在需要的时候去调用。所以在做全局样式调整的时候我们可能只需要修改几行代码就可以了。 // LESS @color: #4D926F; #header { color: @color; } h2 { color: @color; } /* 生成的 CSS */ #header { co...

CSS之user-select——设置标签中的文字是否可被复制

  详细介绍请参考 http://www.css88.com/book/css/properties/user-interface/user-select.htm   CSS样式 user-select:none | text | all | element,默认情况下是text,表示标签中的文字可以被复制,none是不可被复制。   为了兼容各种浏览器,...

css 布局

http://www.iyunlu.com/view/css-xhtml/64.html 作者:一丝链接:https://www.zhihu.com/question/20495297/answer/15288789来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 我还是那句话,把某个事物简单的归结为单一的观点都是片面的。1...