window與document的這些屬性的值會不太兼容,會在后面補充說。
一下效果展示忽略IE9之前瀏覽器,主要考慮主流瀏覽器與手機(jī)端的效果。
- 可以獲得寬度與高度的屬性
-
clientHeight 與clientWidth 指元素的客戶區(qū)大小,即 可見內(nèi)容區(qū)+padding
#t1{
width: 100px;
height: 100px;
border: 4px solid yellowgreen;
background: yellow;
padding: 10px;
}
div.clientWidth+';'+div.clientHeight;
120=width(100)+padding(10)*2;
不加邊框,當(dāng)內(nèi)容溢出或者出現(xiàn)滾動條時的寬度與高度都不會算在內(nèi)。
是dom對象的可見寬度,這里的可見是針對設(shè)置overflow: scroll;
后部分內(nèi)容隱藏而說的。 -
offsetHeight與offsetWidth 是元素的外在大小,即 border +padding+可見內(nèi)容區(qū)
div.offsetWidth+';'+div.offsetHeight
128 = width(100)+padding(10)2+border(4)2
上圖內(nèi)容區(qū)溢出隱藏,是因為設(shè)置了overflow: scroll;
才會有這樣的現(xiàn)象。 -
scrolWidth與scrollHeight是元素的實際大小,即 實際內(nèi)容區(qū)+padding
div.scrollWidth+';'+div.scrollHeight
以上這三對屬性都是針對dom元素的,可以測得元素的寬度,但是,細(xì)心的會發(fā)現(xiàn),以上三種并沒有提供獲得width(100)的方法,所以可以使用window.getComputedStyle(div,null).getPropertyValue('width');
這樣獲得就是100。
其實比較難理解的是像window、document.body、document. documentElement這兩個dom對象在獲得他們的寬度時會有各種問題。
現(xiàn)在開始撕一下這其中的神奇。。。
-
document.body與document. documentElement
前者是body,后者是html。但是現(xiàn)在大家都習(xí)慣將元素默認(rèn)的padding與margin設(shè)置為0,這樣無論是通過以上兩種誰去訪問clientWidth都是一樣的值(電腦端一致)。
但是手機(jī)端訪問這兩個值的時候會隨著由于是客戶端,我們會對網(wǎng)頁的meta
標(biāo)簽做一些設(shè)置,然后通過這兩個對象訪問的屬性的值就不一樣。但是由于body是html的子標(biāo)簽,所以獲得可視窗口(clientWidth)的大小,建議使用后者document. documentElement.clientWidth。
document對象有個屬性compatMode ,它有兩個值:
BackCompat 對應(yīng)quirks mode
CSS1Compat 對應(yīng)strict mode
IE6以前的瀏覽器就是第一種渲染模式,導(dǎo)致IE6要是想獲得可視窗口(clientWidth)時,必須使用document.body.clientWidth這個來訪問。IE6我實習(xí)的公司已經(jīng)放棄啦。
綜上:拋棄document.body的用法,使用document. documentElement。
-
window.innerWidth與document. documentElement.clientWidth用哪個?
接下來說的是不為網(wǎng)頁添加meta標(biāo)簽的效果,添加標(biāo)簽的我覺得應(yīng)該另外寫一篇,因為會涉及到自適應(yīng)的知識。
我做了再安卓機(jī)瀏覽器,iPhone的safari瀏覽器以及這兩種手機(jī)內(nèi)微信內(nèi)訪問網(wǎng)頁運行的qq瀏覽器的測試。
測試結(jié)果肯定是不統(tǒng)一的。
測試前提:不為頁面設(shè)置固定的寬度,不設(shè)置meta標(biāo)簽。
測試結(jié)果:
屬性 | 安卓機(jī) | iphone |
---|---|---|
window.innerWidth | 980px | 980px |
..clientWidth | 980px | 980px |
屬性 | 安卓機(jī)微信 | iphone微信 |
---|---|---|
window.innerWidth | 320px | 980px |
..clientWidth | 980px | 980px |
總是會有搗蛋鬼。。。
綜上:如果想要獲得手機(jī)端頁面的可視寬度,建議使用
document. documentElement.clientWidth
在下一篇,筆記中,會對這個屬性在meta標(biāo)簽的不同設(shè)置下的值進(jìn)行分析。
BTW:我又回來,好好學(xué)習(xí)啦!