本文將透過圖解的方式說明 CSSOM View Model 中 HTMLElement 定義的屬性,包含 offsetLeft、offsetTop、offsetWidth、offsetHeight 和 offsetParent。

JavaScript 中可以由 Element 的 DOM 物件中使用 offsetLeft、offsetTop、offsetWidth 和 offsetHeight 的屬性,其中 offsetWidth 和 offsetHeight 的意義可以用下面這張圖說明:
clientLeft, clientTop, clientWidth 和 clientHeight

offsetWidth

唯讀。表示 Element 佔用的寬度除去 magin 的部分。也可以用數學表示:

1
offsetWidth = width + padding + border

offsetHeight

唯讀。表示 Element 佔用的高度除去 magin 的部分。也可以用數學表示:

1
offsetHeight= height+ padding + border

offsetLeft

唯讀。表示 Element 左邊距離與 offsetParent 左邊界距離,有以下四種情況:

offsetParent 為 BODY

offsetLeft 為上圖兩點的水平距離。
offsetParent 為 BODY

offsetParent 為非 static 的元素

offsetLeft 為上圖粉紅點至黃點的水平距離;Opera / IE8 為粉紅點至綠點的水平距離;IE7 則為褐色線段。
offsetParent 為非 static 的元素

offsetParent 為 TABLE / TH / TD

offsetLeft 為上圖粉紅點至黃點的水平距離;Opera / IE8 為粉紅點至綠點的水平距離;Firefox 為粉紅點至綠點的水平距離。
offsetParent 為 TABLE / TH / TD

offsetParent 為 null

在某些情況 offsetParent 會為 null,例如當 Element 為 fixed 的時候,這時候 offsetLeft 為左邊界與畫面最左邊的距離,用數學表示:

1
offsetLeft = left + margin

offsetTop

唯讀。表示 Element 上邊距離與 offsetParent 上邊界距離,有以下四種情況 (圖片同上):

offsetParent 為 BODY

offsetTop 為上圖兩點的垂直距離。
offsetParent 為 BODY

offsetParent 為非 static 的元素

offsetTop 為上圖粉紅點至黃點的垂直距離;Opera / IE8 為粉紅點至綠點的垂直距離;IE7 則為黑色線段。
offsetParent 為非 static 的元素

offsetParent 為 TABLE / TH / TD

offsetTop 為上圖粉紅點至黃點的垂直距離;Opera / IE8 為粉紅點至綠點的垂直距離;Firefox 為粉紅點至綠點的垂直距離。
offsetParent 為 TABLE / TH / TD

offsetParent 為 null

為上邊界與畫面最上面的距離,用數學表示:

1
offsetTop = top + margin

offsetParent

唯讀。向上尋找有定位的祖先節點,依不同情況會有不同結果:

  1. 往上尋找 position 不為 static 的第一個祖先節點。
  2. 往上尋找第一個 TABLE / TH / TD 節點。
  3. 承 1, 2,如果沒有找到則為 BODY。
  4. 如果 Element 本身為 fixed,則為 null。
  5. 文件根節點和 BODY 的 offsetParent為 null。

延伸閱讀

圖解 clientLeft、clientTop、clientWidth 和 clientHeight
圖解 scrollLeft、scrollTop、scrollWidth、scrollHeight 和 scrollIntoView