js盒子模型常用屬性

2021-07-13 15:20:17 字數 4745 閱讀 3983

指的是通過js

中提供的一系列的屬性和方法,獲取頁面中元素的樣式資訊值 例:

#box有很多自己的私有屬性:

htmldivelement.prototype->htmlelement.prototype->element.prototype->node.prototype->eventtarget.prototype->object.prototype

var box = document.getelementbyid("box");

console.dir(box);

我們設定的width/height

這兩個樣式就是內容的寬和高;

● 如果沒有設定height

值,容器的高度會根據裡面內容自適應,這樣獲取的值就是真實內容的高;

● 如果設定了固定的高度,不管內容是多還是少,其實我們內容的高度值的都是設定的那個值。

代指的是實際內容的寬高(和我們設定的height

沒有必然的聯絡

),如我設定高度為200,

如果內容有溢位,那麼真實內容的高度是要把溢位內容的高度也加進來的。

● 內容的寬/高+

左右/上下填充 (和內容是否溢位沒有關係)(即不包含border值)

● 如果設定了box-sizing:border-box;

則clientwidth/clientheight =

容器寬/

高- border

左/上邊框的寬度 (

border[left/top]width)

var outer = document.getelementbyid("outer"),

inner = document.getelementbyid("inner"),

center = document.getelementbyid("center");

clientwidth/clientheight + 左右

/上下邊框 (和內容是否溢位沒有關係)(包含border)

當前元素的父級參照物,在同乙個平面中,最外層的元素是裡面所有元素的父級參照物(和html

層級結構沒有必然的聯絡)

● 一般來說乙個頁面中所有元素的父級參照物都是body

console.log(center.offsetparent);	//body

console.log(inner.offsetparent); //body

console.log(outer.offsetparent); //body

console.log(document.body.offsetparent); //null

● 想要改變父級參照物需要通過position定位

來進行改變:absolute,relative,fixed

中任意乙個值都可以把父級參照物進行修改

outer.style.position = "relative";

inner.style.position = "relative";

console.log(center.offsetparent); //inner

console.log(inner.offsetparent); //outer

console.log(outer.offsetparent); //body

當前元素(外邊框)距離其父級參照物(內邊框)的偏移距離

console.log(center.offsetleft);	//距離body左偏移距離

console.log(inner.offsetleft); //距離body左偏移距離

console.log(outer.offsetleft); //距離body左偏移距離

outer.style.position = "relative";

inner.style.position = "relative";

console.log(center.offsetleft); //距離inner左偏移距離

// 獲取的結果是乙個物件

// 在標準的ie8瀏覽器中,我們使用offsetleft/offsettop其實是把父級參照物的邊框已經算在內了,所以我們不需要自己再單獨的加邊框了

function offset(curele)		

// 累加父級參照物的偏移

totalleft += par.offsetleft;

totaltop += par.offsettop;

par = par.offsetparent;

} return ;

}console.log(offset(center));

console.log(offset(center).left);

● 容器中內容沒有溢位的情況下:和我們的clientwidth/clientheight

一模一樣

● 如果容器中內容有溢位,獲取的結果如下規則:

scrollwidth:真實內容的寬度(包含溢位)+

左填充

scrollheight:真實內容的高度(包含溢位)+

上填充

獲取到的結果都是「約等於」的值,因為:

● 同乙個瀏覽器,我們是否設定overflow="hidden"

,對於最終的結果是有影響的(滾動條也佔據寬度會影響);

● 在不同的瀏覽器中我們獲取到的結果也是不相同的

滾動條卷去的寬度/

高度 

注意:

1.之前我們學習的js盒子模型中:client系列/offset系列/scrollwidth/scrollheight都是「唯讀」屬性->只能通過屬性獲取值,不能通過屬性修改元素的樣式

2.scrolltop/scrollleft:滾動條捲曲的高度/寬度(這兩個屬性是唯一「可讀寫」屬性)

scrolltop的值是存在邊界值(最大和最小值的),我們設定的值比最小值小或者比最大值大時都沒用,起到效果的依然是邊界的值。

[最小值是零]

box.scrolltop = -1000;	//直接回到容器頂部,沒有超出

console.log(box.scrolltop);

[最大值=真實的高度-當前容器一螢幕的高度]

var maxtop = box.scrollheight - box.clientheight;

console.log(maxtop);

我們通過以上這些屬性值獲取的結果永遠不可能出現小數,都是整數;

瀏覽器獲取結果的時候,會在原來真實結果的基礎上進行四捨五入。

是當前瀏覽器可視視窗的寬/

高(一螢幕的寬/高)

是當前頁面的真實寬/

高(所有屏加起來的寬

/高),但是是乙個約等於的值

● 不管哪些屬性,也不管是什麼瀏覽器,也不管是獲取還是設定,想要都相容的話,需要寫兩套;

● 且必須document.documentelement在前

document.documentelement[attr] || document.body[attr];
如:

[獲取]

document.documentelement.clientheight || document.body.clientheight

[設定]

document.documentelement.scrolltop = 0;

document.body.scrolltop = 0;

win:編寫乙個有關於操作瀏覽器盒子模型的方法

如果只傳遞了attr

沒有傳遞

value

,預設的意思的「獲取」

如果兩個引數都傳遞了,意思是「設定」

不嚴謹的來說這就是有關於「類的過載」:同乙個方法,通過傳遞引數的不同實現了不同的功能

function win(attr,value)

document.documentelement[attr] = value;

document.body[attr] = value;

}win("clientheight");

var outer = document.getelementbyid("outer"),

inner = document.getelementbyid("inner"),

center = document.getelementbyid("center");

●center.parentnode ->inner

●inner.parentnode ->outer

●outer.parentnode ->body

●document.body.parentnode ->

..

●document.documentelement.parentnode ->#document:

..

●document.parentnode->nul

js盒子模型

通過js中提供一系列的方法和屬性獲取頁面中元素的樣式資訊值 內容的寬高 是給元素定義的width height這兩個樣式。如果沒有設定height值,容器的高度會根據裡面內容自己適應,這樣獲取的值就是真實的內容的高 如果設定固定的高度,不管內容是多少,內容的高度指的都是設定的這個值 真實內容的寬高 ...

js盒子模型

js盒子模型是指通過js中一系列的屬性和方法獲取頁面中元素的樣式資訊值 1 client系列 clientwidth 設定的寬度 width 內邊距 padding 2 clientheight 設定的高度 height 內邊距 padding 2 clientleft 左邊框的寬度 border的...

JS盒子模型

clientwidth 盒子寬度 左右的padding clientheight 盒子高度 上下的padding clientleft 盒子左邊框的寬度 clienttop 盒子上邊框的寬度 offsetwidth clientwidth 左右border offsetheight clienthe...