天天看點

viewport 歸納

一。分類(三種)

layout viewport :那些為桌面設計的網站也能在移動浏覽器上正常顯示的寬度(這是浏覽器的一個預設值)

visual viewport :浏覽器可視區域的大小

ideal viewport:能完美适配移動裝置的​

​viewport。即​

​不需要使用者縮放和橫向滾動條就能正常的檢視網站的所有内容,顯示的文字的大小是合适的。

下圖真實通俗的顯示了layout viewport和visual viewport。

viewport 歸納

PS   再次深入了解一下:  如下圖,從左向右依次是 移動端 ,viewport,網頁

網頁承載着viewport,viewport 承載着我們的浏覽器或者裝置當中

viewport 歸納

PC頁面在手機縮放原因:

   1. iphon4預設的viewport 980px , user-scalable=yes

    2.那麼initial-scale 在320px的浏覽器上 就是320/980 即0.33333 

二。利用meta标簽對viewport進行控制---->得到​

​ideal viewport​

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

​meta​

​​标簽作用:讓目前​

​viewport​

​的寬度等于裝置的寬度,同時不允許使用者手動縮放。

​meta viewport​

​ 中的content有6個屬性,如下:

viewport 歸納

PS:多個屬性同時使用時用逗号隔開。

三。得到​

​ideal viewport——>​

​​預設的 ​

​layout viewport​

​的寬度 = 移動裝置的螢幕寬度

<meta name="viewport" content="width=device-width">      
<meta name="viewport" content="initial-scale=1">      

上面兩句代碼的功能一樣,都可以可以把目前的的​

​viewport​

​​變為 ​

​ideal viewport​

​。

**PS:深入了解縮放 : 縮放是相對于 ​

​ideal viewport​

​​來進行縮放的 。是以縮放值為1的時候,就得到了 ​

​ideal viewport​

​ 。

                                       縮放值越大,目前viewport的寬度就會越小。

                                       目前縮放值 = ideal viewport寬度 / visual viewport寬度   (安卓上的原生浏覽器以及IE有些問題)

**PS:​

​width​

​​ 和 ​

​initial-scale=1​

​ 同時出現,且出現了沖突時,浏覽器會取它們兩個中較大的那個值。但是事情并不都是完美的,總有個别奇葩的出現,比如uc9。在uc9浏覽器中,當initial-scale=1時,無論width屬性的值為多少,此時viewport的寬度永遠都是ideal viewport的寬度。

總結 : 把目前的viewport寬度設為ideal viewport的寬度,既可以設定 width=device-width,也可以設定 initial-scale=1,但這兩者各有一個小缺陷,就是iphone、ipad以及IE 會橫豎屏不分,通通以豎屏的ideal viewport寬度為準。

最完美的寫法應該是

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

 initial-scale=1 解決了 iphone、ipad的毛病,width=device-width則解決了IE的毛病。

一個标準的移動web頁面 如下:

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

四。有一個小小的注意點:

   在iphone和ipad上,無論你給viewport設的寬的是多少,如果沒有指定預設的縮放值,則iphone和ipad會自動計算這個縮放值,以達到目前頁面不會出現橫向滾動條(或者說viewport的寬度就是螢幕的寬度)的目的。

五。動态改變meta viewport标簽(兩種辦法)

document.write('<meta name="viewport" content="width=device-width,initial-scale=1">')      
<meta id="testViewport" name="viewport" content="width = 380">
<script>
    var mvp = document.getElementById('testViewport');
    mvp.setAttribute('content','width=480');
</script>