初涉移動端設(shè)計和開發(fā)的同學(xué)們,基本都會在尺寸問題上糾結(jié)好一陣子才能摸到頭緒。我也花了很長時間才弄明白,感覺有必要寫一篇足夠通俗易懂的教程來幫助大家。從原理說起,理清關(guān)于尺寸的所有細(xì)節(jié)。由于是寫給初學(xué)者的,所以不要嫌我啰嗦。
現(xiàn)象
首先說現(xiàn)象,大家都知道移動端設(shè)備屏幕尺寸非常多,碎片化嚴(yán)重。尤其是Android,你會聽到很多種分辨率:480x800,?480x854,?540x960,?720x1280,?1080x1920,而且還有傳說中的2K屏。近年來iPhone的碎片化也加劇了:640x960,?640x1136,?750x1334,?1242x2208。
不要被這些尺寸嚇倒。實際上大部分的app和移動端網(wǎng)頁,在各種尺寸的屏幕上都能正常顯示。說明尺寸的問題一定有解決方法,而且有規(guī)律可循。
像素密度
要知道,屏幕是由很多像素點組成的。之前提到那么多種分辨率,都是手機屏幕的實際像素尺寸。比如480x800的屏幕,就是由800行、480列的像素點組成的。每個點發(fā)出不同顏色的光,構(gòu)成我們所看到的畫面。而手機屏幕的物理尺寸,和像素尺寸是不成比例的。典型的例子,iPhone?3gs的屏幕像素是320x480,iPhone?4s的屏幕像素是640x960。剛好兩倍,然而兩款手機都是3.5英寸的。
要知道,屏幕是由很多像素點組成的。之前提到那么多種分辨率,都是手機屏幕的實際像素尺寸。比如480x800的屏幕,就是由800行、480列的像素點組成的。每個點發(fā)出不同顏色的光,構(gòu)成我們所看到的畫面。而手機屏幕的物理尺寸,和像素尺寸是不成比例的。典型的例子,iPhone?3gs的屏幕像素是320x480,iPhone?4s的屏幕像素是640x960。剛好兩倍,然而兩款手機都是3.5英寸的。
所以,我們要引入重要的一個概念:像素密度,也就是PPI(pixels?per?inch)。這項指標(biāo)是連接數(shù)字世界與物理世界的橋梁。
Pixels?per?inch,準(zhǔn)確的說是每英寸的長度上排列的像素點數(shù)量。1英寸是一個固定長度,等于2.54厘米,大約是食指末端那根指節(jié)的長度。像素密度越高,代表屏幕顯示效果越精細(xì)。Retina屏比普通屏清晰很多,就是因為它的像素密度翻了一倍。
Pixels?per?inch,準(zhǔn)確的說是每英寸的長度上排列的像素點數(shù)量。1英寸是一個固定長度,等于2.54厘米,大約是食指末端那根指節(jié)的長度。像素密度越高,代表屏幕顯示效果越精細(xì)。Retina屏比普通屏清晰很多,就是因為它的像素密度翻了一倍。
倍率與邏輯像素
再用iPhone?3gs和4s來舉例。假設(shè)有個郵件列表界面,我們不妨按照PC端網(wǎng)頁設(shè)計的思維來想象。3gs上大概只能顯示4-5行,4s就能顯示9-10行,而且每行會變得特別寬。但兩款手機其實是一樣大的。如果照這種方式顯示,3gs上剛剛好的效果,在4s上就會小到根本看不清字。
再用iPhone?3gs和4s來舉例。假設(shè)有個郵件列表界面,我們不妨按照PC端網(wǎng)頁設(shè)計的思維來想象。3gs上大概只能顯示4-5行,4s就能顯示9-10行,而且每行會變得特別寬。但兩款手機其實是一樣大的。如果照這種方式顯示,3gs上剛剛好的效果,在4s上就會小到根本看不清字。
在現(xiàn)實中,這兩者效果卻是一樣的。這是因為Retina屏幕把2x2個像素當(dāng)1個像素使用。比如原本44像素高的頂部導(dǎo)航欄,在Retina屏上用了88個像素的高度來顯示。導(dǎo)致界面元素都變成2倍大小,反而和3gs效果一樣了。畫質(zhì)卻更清晰。
在現(xiàn)實中,這兩者效果卻是一樣的。這是因為Retina屏幕把2x2個像素當(dāng)1個像素使用。比如原本44像素高的頂部導(dǎo)航欄,在Retina屏上用了88個像素的高度來顯示。導(dǎo)致界面元素都變成2倍大小,反而和3gs效果一樣了。畫質(zhì)卻更清晰。
在以前,iOS應(yīng)用的資源圖片中,同一張圖通常有兩個尺寸。你會看到文件名有的帶@2x字樣,有的不帶。其中不帶@2x的用在普通屏上,帶@2x的用在Retina屏上。只要圖片準(zhǔn)備好,iOS會自己判斷用哪張,Android道理也一樣。
由此可以看出,蘋果以普通屏為基準(zhǔn),給Retina屏定義了一個2倍的倍率(iPhone?6plus除外,它達到了3倍)。實際像素除以倍率,就得到邏輯像素尺寸。只要兩個屏幕邏輯像素相同,它們的顯示效果就是相同的。
Android的解決方法類似,但更復(fù)雜一些。因為Android屏幕尺寸實在太多,分辨率高低跨度非常大,不像蘋果只有那么幾款固定設(shè)備、固定尺寸。所以Android把各種設(shè)備的像素密度劃成了好幾個圍區(qū)間,給不同范圍的設(shè)備定義了不同的倍率,來**顯示效果相近。