1. 程式人生 > >移動端螢幕適配(通俗易懂理解viewport-真機除錯)

移動端螢幕適配(通俗易懂理解viewport-真機除錯)

真機vivo x5pro 除錯,體驗

當設定元標籤時,彈出螢幕寬度是320(個人理解單位就是px)

因為這個標籤指定了理想視口寬度,為裝置出廠固定的裝置獨立畫素 解析度320(重點:它是固定的)

註釋掉 彈出螢幕寬度 是視口預設的980(個人理解單位就是px)

css樣式佈局,畫素便是相對這個視口,可理解為當前螢幕顯示區域就是這麼寬,

(重點:確定螢幕寬度,不要混淆了物理解析度,也不要被其他概念弄混淆)

即假如給予固定100px寬度的div,在指定視口為320px下,寬度為螢幕可見區域的三分之一,

不指定視口,為預設的980px下,大約十分之一

 <meta charset="utf-8">
    <!--<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />-->
    <title></title>
    <script src="js/mui.min.js"></script>
    <link href="css/mui.min.css" rel="stylesheet"/>
    <link rel="stylesheet" type="text/css" href="css/iconfont.css"/>
    <link rel="stylesheet" type="text/css" href="css/mediaRem.css"/>
    <script type="text/javascript" charset="utf-8">
      	mui.init();
      	//console.log(window.devicePixelRatio);
      	alert(window.devicePixelRatio);
      	alert(document.documentElement.clientWidth);
      	//指定過上面視口,即讓視口為當前螢幕廠家設定的,裝置獨立畫素dip,vivo x5 pro是360px,
      	//沒有指定那麼是預設的980px
    </script>

詳細瞭解,見下文 

名稱解釋

物理畫素(裝置解析度)

物理解析度:顯示屏的最佳解析度,即螢幕實際存在的畫素行數乘以列數的數學表達方式,是顯示屏固有的引數,不能調節,其含義是指顯示屏最高可顯示的畫素數。

(我們可以這樣理解,如:iPhone5物理解析度640*1136,那麼他實際上橫軸有640個點,縱軸有1136個點。)

裝置獨立畫素(邏輯解析度)(dips)

裝置獨立畫素 device-independent pixels(dips)是由裝置自己確定的 iPhone5: 320*568

裝置畫素比

裝置畫素比=物理畫素/裝置獨立畫素 window.devicePixelRatio = 物理畫素/ dips iPhone5的裝置畫素比為2; (以上名稱有點混亂:物理畫素就是裝置解析度。大家一一對應) 個人意會: 從橫向上,手機用2個裝置獨立畫素來模擬1個物理畫素這裡寫圖片描述

iPhone具體的解析度

這裡寫圖片描述

如果我們設計的時候用單位px,可以說是物理解析度尺寸。 如果我們設計的時候用單位pt,可以說是邏輯解析度尺寸。

預設視口寬度

大部分手機的視口預設寬度是980px(有個別手機是其他大小); 獲取視口的寬度 方法一: 瀏覽器中審查元素; 方法二: document.documentElement.clientWidth;

我們不寫下面程式碼的時候,我們可以利用的寬度就980px

<meta id="viewport" name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1; user-scalable=no;">
  • 1

手機訪問一個網頁的時候,內部有一個虛擬容器的概念(就是viewport)。當不寫上面程式碼的時候為980px; 當我們在裡面寫如下程式碼的時候,便會產生水平滾動條

<div style="width:1200px;">test</div>
  • 1

很多瀏覽器端的網頁的寬度設為980px,有一個目的就是當用手機去訪問的時候,正好不產生水平滾動條。

很好,皆大歡喜。但是為啥還要後面很多複雜的概念呢? 。。。 因為pc端的螢幕很大,放980px寬度,我們每個字都可以看的很清楚。但是巴掌大的手機同樣也放980px寬度的網頁內容,上面的圖片和字都太小了。

這個980px和上面的邏輯解析度又是什麼關係呢? 個人感覺是把這個980px按比例縮小為了邏輯解析度。 980px –> 邏輯解析度 如iPhone5:這裡寫圖片描述

如果不希望縮小,我們就可以去設定視口的大小(預設視口為980px).如下程式碼:

<meta name="viewport" content="width=480"/>
  • 1

然後將寬度為1200px的div放進去,會出現水平滾動條。980px的div就也會出現水平滾動條。 (在用瀏覽器模擬手機端實驗的時候,會出現bug.不能展示出上面的效果。)

注意: 因為手機的裝置畫素比是不同的,所以這個值我們不能設定死。 所以我們需要寫程式碼把他弄活。

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

這樣我們設定的視口大小就等於裝置的獨立畫素。

一般我們都寫成

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

最後:我們網頁就把這個視口作為最外面的容器,把body放入這個容器內。並且根據這個外部的容器放大縮小。