Element 對(duì)象提供一系列有關(guān)樣式的屬性:
- clientHeight 和 clientWidth 屬性
- scrollHeight 和 scrollWidth 屬性
- scrollTop 和 scrollLeft 屬性
繼承于 Element 對(duì)象的 HTMLElement 對(duì)象同樣提供一系列有關(guān)樣式的屬性:
- offsetParent 屬性
- offsetHeight 和 offsetWidth 屬性
- offsetTop 和 offsetLeft 屬性
## 元素內(nèi)部的寬度和高度
Element 對(duì)象的 clientWidth 和 clientHeight 屬性表示元素內(nèi)部的寬度和高度,單位為像素。這些屬性的值包含內(nèi)邊距,但不包含滾動(dòng)條、邊框和外邊距。

我們也可以通過(guò)以下方式計(jì)算 clientWidth 和 clientHeight 屬性:
```
clientWidth = CSS 的 width + CSS 的 padding – 滾動(dòng)條的寬度(如果存在的話)
clientHeight = CSS 的 height + CSS 的 padding – 滾動(dòng)條的高度(如果存在的話)
```
我們可以通過(guò)以下示例代碼,學(xué)習(xí)測(cè)試 clientWidth 和 clientHeight 屬性:
```javascript
var div = document.getElementById('d');
// 獲取 div 的樣式
var style = document.styleSheets[0].cssRules[0].style;
// 計(jì)算 clientWidth 屬性的值
var clientWidth = parseInt(style.width) + parseInt(style.paddingLeft) + parseInt(style.paddingRight);
// 測(cè)試打印 clientWidth = width + padding-left + padding-right
console.log(div.clientWidth, clientWidth);
```
## 內(nèi)容區(qū)的寬度和高度
Element 對(duì)象的 scrollWidth 屬性表示元素內(nèi)容的寬度,單位為像素。 scrollWidth 屬性返回元素內(nèi)容區(qū)的寬度和元素本身寬度中更大的那個(gè)值。

Element 對(duì)象的 scrollHeight 屬性表示元素內(nèi)容的高度,單位為像素。scrollHeight 屬性包含 overflow 樣式屬性導(dǎo)致不可見的內(nèi)容區(qū)。

我們可以通過(guò)以下示例代碼,學(xué)習(xí)測(cè)試 scrollWidth 和 scrollHeight 屬性:
```javascript
var div1 = document.getElementById('d1');
console.log(div1.scrollWidth);
var div2 = document.getElementById('d2');
console.log(div2.scrollHeight);
```
## 滾動(dòng)條滾動(dòng)的寬度和高度
Element 對(duì)象的 scrollLeft 屬性表示滾動(dòng)條到元素左邊的距離,單位為像素。scrollLeft 屬性的默認(rèn)值為 0。

Element 對(duì)象的 scrollTop 屬性表示滾動(dòng)條到元素頂部的距離,單位為像素。scrollHeight 屬性的默認(rèn)值為 0。

## 判斷元素內(nèi)容是否滾動(dòng)到底
如果元素內(nèi)容滾動(dòng)到底的話,如下等式返回的結(jié)果為 true,否則返回為 false:
```
element.scrollHeight - element.scrollTop === element.clientHeight
```

## 獲取指定元素的定位父元素
Element 對(duì)象提供的 offsetParent 屬性用于返回一個(gè)指向最近的包含該元素的定位元素。其語(yǔ)法結(jié)構(gòu)如下:
```javascript
var parentObj = element.offsetParent;
```
上述語(yǔ)法結(jié)構(gòu)中,作為返回值的 parentObj 表示一個(gè)指向最近的包含該元素的定位元素。
> **值得注意的是:** 如果祖先元素中沒有開始定位,則?offsetParent?為 body 元素。
我們可以通過(guò)以下示例代碼,學(xué)習(xí) offsetParent 屬性的使用:
```html
<style>
#parent { position: relative; }
</style>
<script>
var btn = document.getElementById('btn');
console.log(btn.offsetParent);
</script>
```
### offsetParent 屬性的瀏覽器兼容性
在不同瀏覽器中,對(duì) offsetParent 屬性的支持情況也有所不同:
- 在 Webkit 中,如果元素為隱藏的(該元素或其祖先元素的?style.display?為 "none"),或者該元素的?style.position被設(shè)為 "fixed",則該屬性返回?null。
- 在 IE 9 中,如果該元素的?style.position?被設(shè)置為 "fixed",則該屬性返回?null。(display:none?無(wú)影響。)
### 獲取指定元素的定位相關(guān)屬性
與開啟定位相關(guān)的屬性還有以下幾種:
- 指定元素的 offsetWidth 和 offsetHeight 屬性分別表示該元素的布局寬度和布局高度,其中包含邊框、內(nèi)邊距、滾動(dòng)條和 CSS 設(shè)置的寬度或高度的值。
- 指定元素的 offsetLeft 和 offsetTop 屬性分別表示該元素距離定位父元素左邊界和上邊界的距離。
> **值得注意的是:** offsetWidth、offsetHeight、offsetLeft 和 offsetTop 屬性的值都是整數(shù)。
- 關(guān)于
- 第一章 DOM 是什么
- 第一節(jié) DOM 介紹
- 第二節(jié) DOM 樹結(jié)構(gòu)
- 第二章 Document 對(duì)象
- 第一節(jié) Document 對(duì)象介紹
- 第二節(jié) 定位頁(yè)面元素
- 第三節(jié) 創(chuàng)建頁(yè)面元素
- 第三章 Node 對(duì)象
- 第一節(jié) Node 對(duì)象介紹
- 第二節(jié) 判斷節(jié)點(diǎn)類型
- 第三節(jié) 遍歷節(jié)點(diǎn)
- 第四節(jié) 插入節(jié)點(diǎn)
- 第五節(jié) 刪除節(jié)點(diǎn)
- 第六節(jié) 替換節(jié)點(diǎn)
- 第七節(jié) 復(fù)制節(jié)點(diǎn)
- 第八節(jié) textContent 屬性
- 第四章 Element 對(duì)象
- 第一節(jié) Element 對(duì)象介紹
- 第二節(jié) DOM 元素樹
- 第三節(jié) 定位頁(yè)面元素
- 第四節(jié) 遍歷元素
- 第五節(jié) 屬性操作
- 第六節(jié) innerHTML 屬性
- 第五章 樣式操作
- 第一節(jié) 獲取內(nèi)聯(lián)樣式
- 第二節(jié) 獲取外聯(lián)樣式表
- 第三節(jié) 獲取 class 屬性
- 第四節(jié) 獲取當(dāng)前有效樣式
- 第五節(jié) 設(shè)置內(nèi)聯(lián)樣式
- 第六節(jié) 設(shè)置 class 屬性
- 第七節(jié) Element 對(duì)象的樣式屬性
- 第六章 事件
- 第一節(jié) 什么是事件
- 第二節(jié) 注冊(cè)事件
- 第三節(jié) 移除注冊(cè)事件
- 第四節(jié) Event 事件對(duì)象
- 第五節(jié) 獲取目標(biāo)元素
- 第六節(jié) 阻止默認(rèn)行為
- 第七節(jié) 獲取鼠標(biāo)坐標(biāo)
- 第八節(jié) 事件流
- 第九節(jié) 事件委托
- 第七章 表單操作
- 第一節(jié) 獲取表單
- 第二節(jié) 表單操作
- 第三節(jié) 表單驗(yàn)證
- 第四節(jié) 表單提交
- 第八章 BOM
- 第一節(jié) BOM 是什么
- 第二節(jié) Window 對(duì)象
- 第三節(jié) Navigator 對(duì)象
- 第四節(jié) History 對(duì)象
- 第五節(jié) Location 對(duì)象
- 第六節(jié) 定時(shí)器
