22 DOM元素尺寸和位置

2021-08-01 22:57:43 字數 3985 閱讀 2301

1.通過 style內聯獲取元素的大小

var box = document.getelementbyid('box'); //獲取元素

box.style.width; //200px、空

box.style.height; //200px、空

ps:style 獲取只能獲取到行內 style 屬性的 css 樣式中的寬和高,如果有獲取;如果沒有則返回空。

2.通過計算獲取元素的大小

var style = window.getcomputedstyle ?

window.getcomputedstyle(box, null) : null || box.currentstyle;

style.width; //1424px、200px、auto

style.height; //18px、200px、auto

ps:通過計算獲取元素的大小,無關你是否是行內、內聯或者鏈結,它經過計算後得到的結果返回出來。如果本身設定大小,它會返回元素的大小,如果本身沒有設定,非 ie瀏覽器會返回預設的大小,ie 瀏覽器返回 auto。

3.通過 cssstylesheet 物件中的 cssrules(或 rules)屬性獲取元素大小

var sheet = document.stylesheets[0]; //獲取 link 或 style

var rule = (sheet.cssrules || sheet.rules)[0]; //獲取第一條規則

rule.style

.width

; //200px、空

rule.style

.height

; //200px、空

總結:以上的三種 css 獲取元素大小的方法,只能獲取元素的 css 大小,卻無法獲取元素本身實際的大小。比如加上了內邊距、滾動條、邊框之類的。

1.clientwidth 和 clientheight

這組屬性可以獲取元素可視區的大小,可以得到元素內容及內邊距所佔據的空間大小。

box.clientwidth; //200

box.clientheight; //200

ps:返回了元素大小,但沒有單位,預設單位是px,如果你強行設定了單位,比如 100em之類,它還是會返回 px 的大小。(css獲取的話,是照著你設定的樣式獲取)。

ps:對於元素的實際大小,clientwidth 和clientheight 理解方式如下:

1.增加邊框,無變化,為 200;

2.增加外邊距,無變化,為200;

3.增加滾動條,最終值等於原本大小減去滾動條的大小,為184;

4.增加內邊距,最終值等於原本大小加上內邊距的大小,為220;

ps:如果說沒有設定任何 css 的寬和高度,那麼非 ie 瀏覽器會算上滾動條和內邊距的計算後的大小,而 ie 瀏覽器則返回 0。

2.scrollwidth 和 scrollheight

這組屬性可以獲取滾動內容的元素大小。

box.scrollwidth; //200

box.scrollwidth; //200

ps:返回了元素大小,預設單位是 px。如果沒有設定任何 css 的寬和高度,它會得到計算後的寬度和高度。

ps:對於元素的實際大小,scrollwidth 和scrollheight 理解如下:

1.增加邊框,不同瀏覽器有不同解釋:

a) firefox 和 opera 瀏覽器會增加邊框的大小,220 x 220

b) ie、chrome 和 safari 瀏覽器會忽略邊框大小,200 x 200

c) ie 瀏覽器只顯示它本來內容的高度,200 x 18

2.增加內邊距,最終值會等於原本大小加上內邊距大小,220 x 220,ie 為 220 x 38

3.增加滾動條,最終值會等於原本大小減去滾動條大小,184 x 184,ie 為 184 x 18

4.增加外邊據,無變化。

5.增加內容溢位,firefox、chrome 和 ie 獲取實際內容高度,opera 比前三個瀏覽器獲取的高度偏小,safari 比前三個瀏覽器獲取的高度偏大。

3.offsetwidth和 offsetheight

這組屬性可以返回元素實際大小,包含邊框、內邊距和滾動條。

box.offsetwidth; //200

box.offsetheight; //200

ps:返回了元素大小,預設單位是 px。如果沒有設定任何 css 的寬和高度,他會得到計算後的寬度和高度。

ps:對於元素的實際大小,offsetwidth 和 offsetheight 理解如下:

1.增加邊框,最終值會等於原本大小加上邊框大小,為220;

2.增加內邊距,最終值會等於原本大小加上內邊距大小,為220;

3.增加外邊據,無變化;

4.增加滾動條,無變化,不會減小;

ps:對於元素大小的獲取,一般是塊級(block)元素並且以設定了 css 大小的元素較為方便。如果是內聯元素(inline)或者沒有設定大小的元素就尤為麻煩,所以,建議使用的時候注意。

1.clientleft 和 clienttop

這組屬性可以獲取元素設定了左邊框和上邊框的大小。

box.clientleft; //獲取左邊框的長度

box.clienttop; //獲取上邊框的長度

ps:目前只提供了 left 和 top 這組,並沒有提供 right 和 bottom。如果四條邊寬度不同的話,可以直接通過計算後的樣式獲取,或者採用以上三組獲取元素大小的減法求得。

2.offsetleft 和 offsettop

這組屬性可以獲取當前元素相對于父元素的位置。

box.offsetleft; //50

box.offsettop; //50

ps:獲取元素當前相對于父元素的位置,最好將它設定為定位 position:absolute;否則不同的瀏覽器會有不同的解釋。

ps:加上邊框和內邊距不會影響它的位置,但加上外邊據會累加。

box.offsetparent; //得到父元素
ps:offsetparent 中,如果本身父元素是,非 ie 返回 body 物件,ie 返回 html 物件。如果兩個元素巢狀,如果上父元素沒有使用定位position:absolute,那麼 offsetparent 將返回 body 物件或 html 物件。所以,在獲取 offsetleft 和 offsettop 時候,css 定位很重要。

如果說,在很多層次裡,外層已經定位,我們怎麼獲取裡層的元素距離 body 或 html元素之間的距離呢?也就是獲取任意乙個元素距離頁面上的位置。那麼我們可以編寫函式 ,通過不停的向上回溯獲取累加來實現。

box.offsettop + box.offsetparent

.offsettop

; //只有兩層的情況下

如果多層的話,就必須使用迴圈或遞迴。

function

offsetleft

(element) //然後繼續迴圈

return left;

}

3.scrolltop 和 scrollleft

這組屬性可以獲取滾動條被隱藏的區域大小,也可設定定位到該區域。

box.scrolltop; //獲取滾動內容上方的位置

box.scrollleft; //獲取滾動內容左方的位置

如果要讓滾動條滾動到最初始的位置,那麼可以寫乙個函式:

function

scrollstart

(element)

DOM元素尺寸和位置

offsetwidth和offsetheight 可以獲取元素實際大小 width padding border 可以獲取元素的大小,但是不能設定。box.offsetwidth box.offsetheight offsettop和offsetleft 可以獲取當前元素相對于父元素的位置。box....

DOM尺寸,DOM元素位置

dom尺寸 doctype html en utf 8 viewport content width device width,initial scale 1.0 document title utils.js script box style head box div 以乙個方向為例,每一種都有寬...

DOM元素尺寸

offsetleft 獲取的是相對于父物件的左邊距,相當於margin left,從本元素的最外面border到父元素的最內border left 獲取或設定相對於 具有定位屬性 position定義為relative 的父物件 的左邊距 如果父div的position定義為relative,子di...