今日頭條的一道筆試題,offsetWidth、clientWidth、scrollWidth的區別。css
JS中document對象的寬高有三種,cilent、offset、scrollchrome
clientWidth和clientHeight:該屬性指的是元素的可視部分寬度和高度,即padding+content
,統分爲三種狀況:app
clientWidth = style.width
clientWidth = style.width + style.padding*2
clientWidth = style.width + style.padding*2 - 滾動軸寬度
clientTop和clientLeft :這一對屬性是用來讀取元素的border
的寬度和高度的spa
clientTop = border-top 的 border-width
clientLeft = border-left 的 border-width
body { width: 500px; height: 500px; border: 20px solid red; margin: 20px; padding: 10px; } div { width: 300px; height: 300px; margin: 10px; padding: 20px; border: 20px solid gray; overflow: auto; } <body> <div id="app"> 我是文字<br> 我是文字<br> 我是文字<br> 我是文字<br> 我是文字<br> </div> </body>
結果如圖:code
offsetWidth和offsetHeight:這一對屬性指的是元素的border+padding+content
的寬度和高度
該屬性和其內部的內容是否超出元素大小無關,只和原本設置的border
以及width
和height
有關。統分爲三種狀況:對象
offsetWidth = clientWidth = style.width
offsetWidth = style.width = style.padding*2 + border寬度*2
offsetWidth = style.width = style.padding*2 + (border-width)*2
offsetWidth = clientWidth + 滾軸寬度 + border寬度*2
offsetTop和offsetLeft:這個須要先了解offsetParent,規則以下blog
offsetParent爲body
offsetParent取最近的那個父級元素
offsetTop和offsetLeft的計算規則以下:圖片
在IE8/9/10以及chrome中
在FireFox中
offsetTop同理
style和body代碼同上。結果如圖:ci
scrollWidth和scrollHeight:細分爲body和其餘元素,這裏不對body作介紹(詳細介紹請點擊)get
在某div中scrollWidth和scrollHeight計算規則以下
scrollWidth = clientWhidth = style.width + style.padding*2
scrollWidth = 實際內容的寬度 + padding*2
scrollTop和scrollLeft:這對元素是可讀寫的,指的是當元素其中的內容超出其寬高的時候,元素被捲起的寬度和高度。
style和body代碼同上。結果如圖:
更詳細的介紹,請點擊