Viewport解決解析度適配問題

2021-09-06 10:30:22 字數 3553 閱讀 1082

viewport:

字面意思為檢視視窗,在移動

web開發中使用。表示將裝置瀏覽器寬度虛擬成乙個特定的值(或計算得出),這樣利於移動

web站點跨裝置顯示效果基本一致。

基本寫法:

測試獲取

viewport

的width:

document.documentelement.clientwidth

1、在iphone

上是讀取

device-width

的值,並自動計算出

target-densitydpi

去適配,在

iphone4

上讀取的值為

320 。

最終的計算公式為: 當

initial-scale=1時:

viewportwidth=width ;

當initial-scale !=1時:

viewportwidth=width  >  320 / initial-scale ? width : 320 / initial-scale ;

viewportwidth

不超過1280

,大於取

1280 。

2、在android

上,讀取的是

target-densitydpi 

。在不設定的情況下,預設選擇的是

medium-dpi(160) 

。以下討論均在中螢幕大小的手機上範圍內:

dpi的分級與其對應的代表解析度:

low-dpi:240*320

(基本淘汰,暫不討論)

medium-dpi:320*480

high-dpi:480*800

super high-dpi:640*960  

其對應的

dpi為

120、

160、

240、

320 。

實驗一:對

480*800

設定dpi

為medium-dpi

,其viewport

為320

;設為high-dpi 

,其viewport

為480

;設為device-dpi 

,其viewport

為480;

實驗二:對

540*800

設定medium-dpi

,viewport

為360

;設為high-dpi 

,其viewport

為540

;設為device-dpi 

,其viewport

為540

;設為low-dpi 

,其viewport

為270;

總結:從上面兩個實驗可得出:

當裝置為

high-dpi

裝置時,設定為中解析度的

viewportwidth

為(2/3

)*device-width

;設定為

low-dpi

時,為(

1/2)

*device-width

。這個比例和其

dpi的比例是一致的,

2/3=160/240

和1/2=120/240;

推測dpi

的值與viewportwidth

存在一元關係。

①假設我要做乙個

android high-dpi

裝置應用,虛擬的

viewportwidth

定死為320px。

設device-width=x

,(2/3)*x

為該裝置設為

medium-dpi

時viewportwidth

的值,x/240

表示乙個

dpi值代表多少個px。

target-densitydpi=160 - /(x/240);

簡化一下:

target-densitydpi=320*240/x;

實驗三:在

540手機上設定

target-densitydpi=142

,其viewport

為320 。

根據以上公式可以計算出

target-densitydpi=142.222222

,與上面測試資料一致。

②假設我要做乙個

android super-high-dpi

裝置應用,虛擬的

viewportwidth

定死為320px。

target-densitydpi=320*320/x;

此公式未進行試用期驗證。

③假設我要做乙個

android medium-dpi

裝置應用,虛擬的

viewportwidth

定死為320px。

target-densitydpi=160 - /(x/160);

target-densitydpi=320*160/x

實驗成功

④假設我要做乙個

android low-dpi

裝置應用,虛擬的

viewportwidth

定死為320px。

target-densitydpi=160 - /(x/120);

target-densitydpi=320*120/x

此公式未進行試用期驗證。

特例:htca510e

:在width

設有具體值時,會讀取

width

,忽略dpi。

聯想k1 pad 

不讀取dpi

,只讀取

width

,而且當

width

小於等於

320的時候忽視,直接取

device-width。

3、htc input

縮放問題。當

viewport

的值大於

device-width

時,會出現

input

獲取焦點放大。所以在設計中選擇基於

320解析度(

240裝置淘汰不討論),出圖基於

640,

0.5縮放保證清晰度。

總結,在開發時最好基於320

寬進行開發,基於

640做,在放置時可以用

background-size

或zoom

縮放一倍,在高畫質晰屏上就不會模糊。在載入頁面時通過讀取裝置的

width

去計算dpi

然後動態生成

meta

標記,可以很好解決手機的解析度適配問題。但是在

android pad

端上不適用,原因有二,一、

pad對

width

是計算還是讀取比較混亂,有些像

ios,有些讀

dpi,還有的兩個都讀,然後分段比較。二、

pad的高中低

dpi分檔和手機不一樣,沒有統一標準

Android解析度常識 多解析度適配

螢幕大小 以螢幕對角線的物理長度來衡量螢幕的大小 解析度 螢幕中所有物理畫素點數。如1920x1080,就表示寬方向有1920個畫素,高方向有1080個畫素,整個螢幕有2073600個畫素。螢幕密度 dpi dots per inch 即畫素密度,每英吋面積上存在多少個畫素。160dpi表示單位面積...

螢幕解析度適配

螢幕解析度 1024x600 density 1 160 資料夾 values mdpi 1024x600 螢幕解析度 1024x600 density 1.5 240 資料夾 values hdpi 683x400 由1024 1.5 600 1.5得到,需要四捨五入。螢幕解析度 800x480 ...

React native 解析度適配

react native中使用的尺寸單位是pt,是乙個絕對長度,而設計師使用的是px,這兩種尺寸如何換算呢?官方提供了pixelratio import from react native const pt2px pt pixelratio.getpixelsizeforlayoutsize pt ...