天天看點

關于clientHeight、scrollHeight、offsetHeight、window.innerHeight、window.outerHeight等元素及浏覽器屬性淺析ElementElement為body時Element為Html時Window

        這篇文章會說明documentElement(html)、body、普通的element(如div)作為Element對象時,上述屬性的不同表現,和他們所遵循的基本準則。另外還有window的幾個簡單的屬性。               

        前幾天筆試碰到了一道關于可視區域高度通過什麼屬性取值的問題,面對四個選項一臉傻樣兒,趕緊複習了一下。發現element的clientHeight、scrollHeight、offsetHeight和window的outerHeight、innerHeight、screen.height這幾個屬性還真不好區分,在網上查閱一番資料後,總結出來供以後參考。       

正文:

        我們先把這些屬性分為element和window。

Element

        首先我們需要了解到一個元素具有content、padding、border以及可能出現的滾動條。那麼他們的結構請見下圖。

關于clientHeight、scrollHeight、offsetHeight、window.innerHeight、window.outerHeight等元素及浏覽器屬性淺析ElementElement為body時Element為Html時Window

在沒有滾動條的時候也就是内容不溢出時:

        clientHeight:content + padding

        scrollHeight:content + padding

        offsetHeight:content + padding + border + 水準滾動條的高度(如果有的話)

 下邊是具有滾動條的情況:

        clientHeight:可視區域,大小不變等同于沒有内容溢出時的clientHeight

        offsetHeight:可視區域,大小不變等同于沒有内容溢出時的offsetHeight

        scrollHeight:content + padding-top + padding-bottom

關于clientHeight、scrollHeight、offsetHeight、window.innerHeight、window.outerHeight等元素及浏覽器屬性淺析ElementElement為body時Element為Html時Window
關于clientHeight、scrollHeight、offsetHeight、window.innerHeight、window.outerHeight等元素及浏覽器屬性淺析ElementElement為body時Element為Html時Window

需要特别注意的是:在element為body和html的時候,特别容易混淆!

Element為body時

        這種情況比較簡單,clientHeight、offsetHeight、innerHeight三者的大小都相同,不論有沒有内容溢出。

        至于原因,body的高度和内容等高,而且一般情況下body不具備padding和border,隻有content,因為沒人會給body設定内邊距和邊框。

Element為Html時

我們需要先清楚一點,html的高度一般等同于浏覽器可視視窗大小

相當于對html設定了overflow:scroll ,而當html的子元素body的高度超過html後就會出現滾動條

clietHeight規則還是如上所展示的,那麼顯而易見:

        documentElement.clientHeight = 浏覽器可視視窗大小(不論内容是否溢出)

但是offsetHeight和scrollHeight很奇怪,我一直不了解,如果哪位同學知道還望指點。疑惑如下:

        當沒有滾動條時,即内容不溢出:

        documentElement.offsetHeight:body的内容高度 遵循content + padding

        documentElement.scrollHeight = documentElement.clientHeight ( ???)

        當有滾動條時,即内容溢出:

        documentElement.offsetHeight = documentElement.scrollHeight( ???)

Window

        接下來說說浏覽器的幾個屬性outerHeight、innerHeight、screen.height

        innerHeight:浏覽器可視視窗的大小,也就是從你的浏覽器下沿到你的工具欄下沿。

                這個大小等同于documentElement.clientHeight。

        outerHeight:很好了解,從你的浏覽器上沿到下沿,包含菜單欄、工具欄等。

        screen.height:分辨率高度,即電腦螢幕的高度

寫在最後:

        第一次寫部落格文章,描述的不太專業,如果有疑問或者發現什麼錯誤,歡迎留言!

繼續閱讀