CSS奇技淫巧之VIEWPORT

假設有一個網頁岩四,有一個寬度為10%的sidebar,我們不斷的拉伸瀏覽器哥攘,sidebar的寬度也在不斷的增加剖煌,反之減少。在手機上看網頁的時候逝淹,我們不斷的滾動網頁或者拉伸網頁來改變內容呈現末捣。這些機制是怎樣實現的呢?是否是瀏覽器在不斷的重繪節(jié)點(reflow, repaint)來做不同的展示呢创橄?

當然不是箩做!瀏覽器實現這一套機制的原理是viewport(視口)。我們在你不知道的CSS——BFC(塊級格式化上下文)中介紹了BFC妥畏,而html節(jié)點則是最頂級的BFC邦邦,viewport則是用來約束html顯示的區(qū)域。事實上醉蚁,viewport又可分為visual viewport和layout viewport燃辖。為了了解這兩個viewport的區(qū)別,我們不妨看看stackoverflow上的解釋

The visual viewport is the part of the page that’s currently shown on-screen.
The layout viewport can be considerably wider than the visual viewport, and contains elements that appear and do not appear on the screen.
Imagine the layout viewport as being a large image which does not change size or shape. Now imagine you have a smaller frame through which you look at the large image. The small frame is surrounded by opaque material which obscures your view of all but a portion of the large image. The portion of the large image that you can see through the frame is the visual viewport. You can back away from the large image while holding your frame (zoom out) to see the entire image at once, or you can move closer (zoom in) to see only a portion. You can also change the orientation of the frame, but the size and shape of the large image (layout viewport) never changes.

也就是說网棍,visual viewport是頁面顯示到屏幕上的可見區(qū)域黔龟,而layout viewport則是一個比較比visual viewport大的區(qū)域。我們可以假定是通過一個相框在看一個無限大的區(qū)域滥玷,只有其中的一部分能看到氏身,其他部分被相框周邊遮擋了。我們通過移動相框位置或者離這個區(qū)域的距離惑畴,能看到不同的內容或者放縮內容的大小蛋欣,而在整個過程中,該區(qū)域的內容并未發(fā)生任何變化如贷。這個比喻形象的模擬和解釋了我們拖動滾動條以及對頁面放縮的過程陷虎,整個過程中并未觸發(fā)頁面的layout,只是可視區(qū)域發(fā)生變化而已杠袱!

事實上尚猿,設備對自身的layout viewport也有其默認設定:

default layout viewport size

由此,我們不難理解楣富,在移動端開發(fā)時凿掂,我們需要在網頁中加入viewport設置:

<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">

這里將layout viewport的寬度設置成設備像素寬度,事實上這里只設置initial-scale=1也相當于將layout viewport設置和visual viewport大小相同菩彬。

另外缠劝,值得注意的一點是潮梯,window.innerWidth/Height獲取的是layout viewport的寬度骗灶,而document.documentElement.clientWidth/Height獲取到的是visual viewport的寬度惨恭,相差的是滾動條的寬度。未設置viewport耙旦,這二者將返回默認layout viewport寬度脱羡。

此外,關于事件綁定中的幾個位置免都,clientX/Y相對于visual viewport, pageX/Y相對于頁面锉罐,screenX/Y相對于屏幕,在有滾動條的情況下绕娘,我們最常用的應該是pageX/Y了脓规。

參考文章
stackflow-viewport
兩個viewport的故事(第一部分)
兩個viewport的故(第二部分)
深入了解viewport和px
移動前端開發(fā)之viewport的深入理解

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市险领,隨后出現的幾起案子侨舆,更是在濱河造成了極大的恐慌,老刑警劉巖绢陌,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挨下,死亡現場離奇詭異,居然都是意外死亡脐湾,警方通過查閱死者的電腦和手機臭笆,發(fā)現死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秤掌,“玉大人愁铺,你說我怎么就攤上這事∥偶” “怎么了帜讲?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長椒拗。 經常有香客問我似将,道長,這世上最難降的妖魔是什么蚀苛? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任在验,我火速辦了婚禮,結果婚禮上堵未,老公的妹妹穿的比我還像新娘腋舌。我一直安慰自己,他們只是感情好渗蟹,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布块饺。 她就那樣靜靜地躺著赞辩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪授艰。 梳的紋絲不亂的頭發(fā)上辨嗽,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音淮腾,去河邊找鬼糟需。 笑死,一個胖子當著我的面吹牛谷朝,可吹牛的內容都是我干的洲押。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼圆凰,長吁一口氣:“原來是場噩夢啊……” “哼杈帐!你這毒婦竟也來了?” 一聲冷哼從身側響起专钉,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤挑童,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驶沼,有當地人在樹林里發(fā)現了一具尸體炮沐,經...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年回怜,在試婚紗的時候發(fā)現自己被綠了大年。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡玉雾,死狀恐怖翔试,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情复旬,我是刑警寧澤垦缅,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站驹碍,受9級特大地震影響壁涎,放射性物質發(fā)生泄漏。R本人自食惡果不足惜志秃,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一怔球、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浮还,春花似錦竟坛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涎跨。三九已至,卻和暖如春崭歧,著一層夾襖步出監(jiān)牢的瞬間隅很,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工驾荣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留外构,地道東北人普泡。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓播掷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撼班。 傳聞我的和親對象是個殘疾皇子歧匈,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內容

  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,585評論 0 23
  • 三維是遠近高低左右,空間感 12歲……15歲智力成熟砰嘁,15……18后智力件炉,大腦開發(fā)廣度,即大腦皮層的神經元激活的數...
    anita19845閱讀 954評論 0 0
  • 你換上新衣服矮湘,在老媽面前走了一圈說: 媽斟冕,有范嗎? 老媽看了一眼說: 有缅阳,在鍋里磕蛇,你自己添…… [呲牙][呲牙][...
    sunny玫201617閱讀 140評論 0 0
  • 今天在外出差,外面打著雷十办,刮著大風秀撇,下著暴雨,有著銀蛇一樣的閃電向族。我一個人在賓館里面呵燕,跟家人打打電話,聽一聽音樂件相,...
    藍心百合閱讀 577評論 2 2
  • Android Permissions 此插件旨在支持Android新的權限檢查機制再扭。您可以在這里找到所有全限: ...
    待花謝花開閱讀 2,108評論 0 1