經過上一篇咱們已經大概明白viewport是什麼,可是viewport並無那麼簡單,一包研究得身心疲憊,腦子一個不夠用哈哈,讓咱們一塊兒看看吧!css
ppk認爲,有三個viewporthtml
咱們能夠經過
document.documentElement.clientWidth來得到佈局視窗的寬和高。
用window.innerWidth/Height或者document.documentElement.offsetWidth計算visual viewport的寬度
注意,visual viewport尺寸所對應的並非指屏幕區域裏的物理像素,而是CSS 像素。而且它所包含的 CSS 像素的數量也是隨着用戶縮放而有所改變。windows
visual viewport用css像素來衡量尺寸,表示有多少個css像素可以被用戶看到。瀏覽器
總結一下:ppk把移動設備上的viewport分爲layout viewport 、 visual viewport 和 ideal viewport 三類,其中的ideal viewport是最適合移動設備的viewport,ideal viewport的寬度等於移動設備的屏幕寬度,只要在css中把某一元素的寬度設爲ideal viewport的寬度(單位用px),那麼這個元素的寬度就是設備屏幕的寬度了,也就是寬度爲100%的效果。從另外一角度看,idea viewport其實就是改變了尺寸layout viewport,idae viewport其實就是把layoutviewport調整到一個合適的,理想的狀態,使頁面在移動端有最佳的顯示效果,即不管在何種分辨率的屏幕下,那些針對ideal viewport 而設計的網站,不須要用戶手動縮放,也不須要橫向滾動條就能夠完美地呈現給用戶。 那麼如何把layout viewport調整到idea viewport呢,下面咱們來看一下:
怎麼設置呢?看看這段代碼:iphone
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
相信有作過移動端開發的同窗都熟悉這段代碼,無論你是否是熟悉移動端開發的原理,像我以前同樣,不懂viewport,像素是啥,可是我把這段代碼寫進了haed標籤裏,其實就成功了一半。
沒錯,這段代碼就是把把默認的layout viewport的寬度設爲移動設備的屏幕寬度,也就是把當前的viewport寬度設置爲 ideal viewport 的寬度。ide
咱們來看看各個屬性是什麼意思:佈局
這些屬性能夠同時使用,也能夠單獨使用或混合使用,多個屬性同時使用時用逗號隔開就好了。網站
width屬性被用來控制layout viewport(佈局視口)的寬度,layout viewport(佈局視口)寬度默認值是設備廠家指定的。iOS, Android基本都將這個視口分辨率設置爲 980px。咱們能夠 width=320 這樣設爲確切的像素數,也能夠設爲device-width這一特殊值,通常爲了自適應佈局,廣泛的作法是將width設置爲device-width,width=device-width 也就是將layout viewport(佈局視口)的寬度設置 ideal viewport(理想視口)的寬度。idea
<meta name="viewport" content="width=device-width">
能夠看到經過width=device-width,全部瀏覽器都能把當前的viewport寬度變成ideal viewport的寬度,但要注意的是,在iphone和ipad上,不管是豎屏仍是橫屏,寬度都是豎屏時ideal viewport的寬度。spa
initial-scale用於指定頁面的初始縮放比例,縮放是相對於 ideal viewport來進行縮放的,所以當initial-scale=1時,表示將layout viewport的寬度設置爲 ideal viewport的寬度。
<meta name="viewport" content="initial-scale=1" />
能夠知道initial-scale=1 也能把當前的viewport寬度變成 ideal viewport 的寬度,但此次輪到了windows phone 上的IE 不管是豎屏仍是橫屏都把寬度設爲豎屏時ideal viewport的寬度。
綜上,要把當前的viewport寬度設爲ideal viewport的寬度,既能夠設置 width=device-width,也能夠設置 initial-scale=1,但這二者各有一個小缺陷,就是iphone、ipad以及IE 會橫豎屏不分,統統以豎屏的ideal viewport寬度爲準。因此,最完美的寫法應該是,二者都寫上去,這樣就 initial-scale=1 解決了 iphone、ipad的毛病,width=device-width則解決了IE的毛病。
<meta name="viewport" content="width=device-width,initial-scale=1">
當遇到這種狀況時,瀏覽器會取它們兩個中較大的那個值。例如,當width=400,ideal viewport的寬度爲320時,取的是400;當width=400, ideal viewport的寬度爲480時,取的是ideal viewport的寬度。
<meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
能夠看到第二段代碼咱們把minimum-scale=1, maximum-scale=1這兩個屬性去掉了,但效果是同樣的,由於添加了user-scalable=no 那麼,minimum-scale=1, maximum-scale=1這兩個屬性就不必追加了。由於你都已經禁止了用戶縮放頁面了,容許的縮放範圍也就不存在了。
(寫到這裏要吐血了哈哈)