html/css基礎篇——關於瀏覽器window、document、html、body高度的探究


  首先說明本人所理解的這幾個元素的計算

  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>

  顯示效果為

  

  第一組測試:IE8

  IE8總結:

  window可視窗口高度,不包括瀏覽器滾動條(IE后面兩個圖對比可得,第二個IE下面有個滾動條占6px)。IE有一個特點:window高度與真正的可視窗口相比會少4px(第三個IE圖片可知,這個時候document的高度和可視窗口高度相同),說明IE的window四邊有2px的間隙,也就是IE自己的offset值

  document文檔高度,完全顯示所有文檔內容的高度(包括脫離文檔流的元素顯示,第一個IE圖可得)和IE工作區(看html解釋)取最大值(這個高度最終決定窗口滾動條能滾動顯示到哪里)

  html高度是窗口的高度,這個窗口是IE自己划定的瀏覽器工作區域高度,包括可視窗口、2px的offset、瀏覽器滾動條等等,看下面的效果圖

  

  body高度是內容真實高度(脫離文檔流定位的不再里面,三個圖可以為此作證)

 

  第二組測試:IE9+

  

  

  

 

  IE9+總結:

  window高度是可視窗口高度,不包括瀏覽器滾動條。

  document文檔高度,完全顯示所有文檔內容的高度(包括脫離文檔流的元素顯示,第一個IE圖可得)和IE工作區(看html解釋)取最大值(這個高度最終決定窗口滾動條能滾動顯示到哪里)

  html高度是窗口的高度,這個窗口是IE自己划定的瀏覽器工作區域高度,包括可視窗口、瀏覽器滾動條,比IE8要標准一些(沒有offset了,滾動條和工作區邊也沒有了間隙,看下圖)

  

  body高度內容真實高度(脫離文檔流定位的不再里面)

 

  第二組測試:chrome

  chrome總結:

  window高度是可視窗口高度不包括瀏覽器滾動條

  document高度是完全顯示所有文檔內容的高度(包括脫離文檔流的元素顯示,第一個chrome圖可得)和可視窗口高度取最大值(這個高度最終決定窗口滾動條能滾動顯示到哪里)

  html高度和body內容高度相同

  body高度內容真實高度(脫離文檔流定位的不再里面)

 

  第三組測試:Firefox

  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中測試也同樣適用。

 

  這種分析最耗時間,如果大家覺得不錯就別光看不頂了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM