摘要:中的盒模型傳統盒模型在傳統盒子模型中我們說的寬度和高度是指該塊元素內容的寬度和高度。在這個基礎上我們在修改或者塊元素的寬度講不會發生變化。
CSS中的盒模型
傳統盒模型
在傳統盒子模型中我們說的寬度和高度是指該塊元素內容的寬度和高度。
而一個塊元素的寬度是
width === width+padding(left/right)+border(left/right);
相應的一個塊元素的高度是
height === height+padding(top/bottom)+border(top/bottom);
CSS3中的盒模型
在css3中新增加了盒子模型
.box{
border-sizing: border-box;
}
此時塊元素的的width和height僅僅是這個塊元素的寬度和高度。它包含了這個塊元素的padding和border。在這個基礎上我們在修改padding或者border塊元素的寬度講不會發生變化。改變的是內容的寬高。
JS中也提供了一些屬性和方法用來描述當前元素的樣式,主要有以下幾種:
備注:通過JS盒子模型屬性獲取的結果是不帶單位的。而且只能是整數(它會自動四舍五入,進行計算)
clientWidth/clientHeight
clientWidth/clientHeight:當前盒子可視區域的寬度和高度
可視區域是指:內容的寬高+padding
clientWidth = width + padding(left + right); clientHeight = height + padding(top + bottom);
可視區域和內容是否溢出以及我們是否設置了overflow:hidden沒有關系
在我們的項目中,我經常這樣使用這兩個屬性
//獲取當前頁面一屏幕的寬度 W = document.documentElement.clientWidth||document.body.clientWidth; //獲取當前頁面一屏幕的高度 H = document.documentElement.clientHeight||document.body.clientHeight;
利用這個就可以實現讓一個盒子水平和垂直居中。
即實現相對定位,計算出來left和top就可以實現
//width和height是盒子的寬高 left = (W-width)/2; top = (H-height)/2;
clientLeft/clientTop
clientLeft:盒子左邊框的寬度。
clientTop:盒子上邊框的高度。
它倆獲取的結果其實就是border-width。
JS中只有clientLeft和clientTop,沒有clientRight和clientBottom這兩個屬性。
offsetWidth/offsetHeight
offsetWidth/offsetHeight就是在clientWidth和clientHeight的基礎上加上盒子的邊框。
即:
offsetWidth === clientWidth + border(left/right); offsetHeight === clientHeight + border(top/bottom)
和內容是否溢出沒有關系。
在我們的項目中,如果想獲取一個盒子的寬度和高度,我們一般用offsetWidth(而不是clientWidth)和offsetHeight,因為border也算是當前盒子的一部分。
scrollWwidth/scrollHeight
1) 沒有內容溢出情況下:
獲取的結果和clientWidth/clientHeight是一樣的
2) 有內容溢出的情況下:
真實內容的寬度和高度(包含溢出的內容),在加上左邊的padding 和上邊的padding 值。
//有橫向滾動條時,獲取當前頁面的真實寬度 document.documentElement.scrollWidth||document.body.scrollWidth; //有縱向滾動條時,獲取當前頁面的真實高度 document.documentElement.scrollHeight||document.body.scrollHeight;
window.getComputedStyle/currentStyle
在JS中獲取元素具體的樣式值:例如獲取某個元素的paddingLeft值。
方法一:
currentElement.style.XXX
例如:
box.style.paddingLeft
注意這個方法是獲取當前元素的行內樣式。只能獲取當前元素的行內樣式,內嵌或者外聯樣式是不能獲取的。
方法二:
通過 window.getComputedStyle/currentStyle可以獲取所有經過瀏覽器計算過的樣式。
或者當前元素的paddingLeft值,使用例子:
window.getComputedStyle(box, null).paddingLeft //或者下面這個方法,box是當前元素,第二個參數是當前元素的偽類,一般為 window.getComputedStyle(box, null)["paddingLeft"]
window.getComputedStyle在IE6~8中不兼容。不兼容的原因是因為在IE6~8下,window對象沒有getComputedStyle屬性發放導致的。所以在IE6~8中我們使用currentStyle屬性。備注currentStyle只有IE中才有,其他瀏覽器中都沒有這個屬性。使用方法例子:
box.currentStyle["paddingLeft"]; //或者 box.currentStyle.paddingLeft
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101281.html
摘要:提供了糟糕的支持,而雖然接近標準,但依舊未能完全正確的支持標準。盡管修復了許多的問題,但是依然延續實現中的其它故障主要是盒模型問題。因此大部分的聲明將觸發嚴格模式即依據標準的規則渲染網頁。 深入理解CSS盒模型、BFC、OffsetWidth&ClientWidth&ScrollWidth 本文將從盒模型開始,一步步涉及一些常見的前端筆試和面試點 主要參考自第一篇文章,然而筆者在讀的時...
閱讀 3715·2021-10-14 09:43
閱讀 3311·2021-08-25 09:38
閱讀 609·2019-08-30 15:55
閱讀 1343·2019-08-30 13:05
閱讀 2238·2019-08-29 16:05
閱讀 501·2019-08-29 12:58
閱讀 2791·2019-08-29 12:34
閱讀 3241·2019-08-26 12:15