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;ps:如果說沒有設定任何 css 的寬和高度,那麼非 ie 瀏覽器會算上滾動條和內邊距的計算後的大小,而 ie 瀏覽器則返回 0。2.增加外邊距,無變化,為200;
3.增加滾動條,最終值等於原本大小減去滾動條的大小,為184;
4.增加內邊距,最終值等於原本大小加上內邊距的大小,為220;
2.scrollwidth 和 scrollheight
這組屬性可以獲取滾動內容的元素大小。
box.scrollwidth; //200
box.scrollwidth; //200
ps:返回了元素大小,預設單位是 px。如果沒有設定任何 css 的寬和高度,它會得到計算後的寬度和高度。
ps:對於元素的實際大小,scrollwidth 和scrollheight 理解如下:
1.增加邊框,不同瀏覽器有不同解釋:3.offsetwidth和 offsetheighta) 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 比前三個瀏覽器獲取的高度偏大。
這組屬性可以返回元素實際大小,包含邊框、內邊距和滾動條。
box.offsetwidth; //200
box.offsetheight; //200
ps:返回了元素大小,預設單位是 px。如果沒有設定任何 css 的寬和高度,他會得到計算後的寬度和高度。
ps:對於元素的實際大小,offsetwidth 和 offsetheight 理解如下:
1.增加邊框,最終值會等於原本大小加上邊框大小,為220;4.增加滾動條,無變化,不會減小;2.增加內邊距,最終值會等於原本大小加上內邊距大小,為220;
3.增加外邊據,無變化;
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...