JS中得各種寬度


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í)啦!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Window和document對象的區(qū)別 window對象window對象表示瀏覽器中打開的窗口window對象是...
    FConfidence閱讀 2,255評論 0 5
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,809評論 1 92
  • 剛剛在研究技術(shù),突然查一個問題,不小心跳到簡書,感覺這里面的文章排版很精致,很容易讓讀者抓住自己要找的點,所以下了...
    Gerry的技術(shù)隨想閱讀 141評論 0 1
  • 時光老了,我們成長了。 隨著我這個十六歲的年輕人也過完了十七歲的生日,也就意味著我們四個都十七歲了,而下一個生日就...
    松果不噠噠閱讀 219評論 0 0
  • 就在剛剛,我刪除了朋友圈一條發(fā)布不到3分鐘的文章分享,而這篇文章,來自簡書。 很羨慕那些能夠?qū)戦L文章的人。因為長期...
    錫安閱讀 596評論 1 3