現(xiàn)象
首先說現(xiàn)象,大家都知道移動(dòng)端設(shè)備屏幕尺寸非常多,碎片化嚴(yán)重。尤其是Android,你會(huì)聽到很多種分辨率:480×800, 480×854, 540×960, 720×1280, 1080×1920,而且還有傳說中的2K屏。近年來iPhone的碎片化也加劇了:640×960, 640×1136, 750×1334, 1242×2208。
不要被這些尺寸嚇倒。實(shí)際上大部分的app和移動(dòng)端網(wǎng)頁,在各種尺寸的屏幕上都能正常顯示。說明尺寸的問題一定有解決方法,而且有規(guī)律可循。
像素密度
要知道,屏幕是由很多像素點(diǎn)組成的。之前提到那么多種分辨率,都是手機(jī)屏幕的實(shí)際像素尺寸。比如480×800的屏幕,就是由800行、480列的像素點(diǎn)組成的。每個(gè)點(diǎn)發(fā)出不同顏色的光,構(gòu)成我們所看到的畫面。而手機(jī)屏幕的物理尺寸,和像素尺寸是不成比例的。最典型的例子,iPhone 3gs的屏幕像素是320×480,iPhone 4s的屏幕像素是640×960。剛好兩倍,然而兩款手機(jī)都是3.5英寸的。
所以,我們要引入最重要的一個(gè)概念:像素密度,也就是PPI(pixels per inch)。這項(xiàng)指標(biāo)是連接數(shù)字世界與物理世界的橋梁。
Pixels per inch,準(zhǔn)確的說是每英寸的長(zhǎng)度上排列的像素點(diǎn)數(shù)量。1英寸是一個(gè)固定長(zhǎng)度,等于2.54厘米,大約是食指最末端那根指節(jié)的長(zhǎng)度。像素密度越高,代表屏幕顯示效果越精細(xì)。Retina屏比普通屏清晰很多,就是因?yàn)樗南袼孛芏确艘槐丁?br />
倍率與邏輯像素
再用iPhone 3gs和4s來舉例。假設(shè)有個(gè)郵件列表界面,我們不妨按照PC端網(wǎng)頁設(shè)計(jì)的思維來想象。3gs上大概只能顯示4-5行,4s就能顯示9-10行,而且每行會(huì)變得特別寬。但兩款手機(jī)其實(shí)是一樣大的。如果照這種方式顯示,3gs上剛剛好的效果,在4s上就會(huì)小到根本看不清字。
在現(xiàn)實(shí)中,這兩者效果卻是一樣的。這是因?yàn)镽etina屏幕把2×2個(gè)像素當(dāng)1個(gè)像素使用。比如原本44像素高的頂部導(dǎo)航欄,在Retina屏上用了88個(gè)像素的高度來顯示。導(dǎo)致界面元素都變成2倍大小,反而和3gs效果一樣了。畫質(zhì)卻更清晰。
在以前,iOS應(yīng)用的資源圖片中,同一張圖通常有兩個(gè)尺寸。你會(huì)看到文件名有的帶@2x字樣,有的不帶。其中不帶@2x的用在普通屏上,帶@2x的用在Retina屏上。只要圖片準(zhǔn)備好,iOS會(huì)自己判斷用哪張,Android道理也一樣。
由此可以看出,蘋果以普通屏為基準(zhǔn),給Retina屏定義了一個(gè)2倍的倍率(iPhone 6plus除外,它達(dá)到了3倍)。實(shí)際像素除以倍率,就得到邏輯像素尺寸。只要兩個(gè)屏幕邏輯像素相同,它們的顯示效果就是相同的。
Android的解決方法類似,但更復(fù)雜一些。因?yàn)锳ndroid屏幕尺寸實(shí)在太多,分辨率高低跨度非常大,不像蘋果只有那么幾款固定設(shè)備、固定尺寸。所以Android把各種設(shè)備的像素密度劃成了好幾個(gè)范圍區(qū)間,給不同范圍的設(shè)備定義了不同的倍率,來保證顯示效果相近。像素密度概念雖然重要,但用不著我們自己算,iOS與Android都幫我們算好了。
Web怎么辦
移動(dòng)端頁面的絕對(duì)單位仍然是px,至少代碼里這么寫,但它的道理也和app一樣。由于像素密度是設(shè)備本身的固有屬性,它會(huì)影響到設(shè)備中的所有應(yīng)用,包括瀏覽器。前端技術(shù)可以善加利用設(shè)備的像素密度,只需一行代碼,瀏覽器便會(huì)使用app的顯示方式來渲染頁面。根據(jù)像素密度,按相應(yīng)倍率縮放。
可以通過這個(gè)測(cè)試頁面響應(yīng)式斷點(diǎn).html來看看你的移動(dòng)設(shè)備屏幕寬度,這是邏輯像素寬度。
以iPhone 5s為例,屏幕的分辨率是640×1136,倍率是2。瀏覽器會(huì)認(rèn)為屏幕的分辨率是320×568,仍然是基準(zhǔn)倍率的尺寸。所以在制作頁面時(shí),只需要按照基準(zhǔn)倍率來就行了。無論什么樣的屏幕,倍率是多少,都按邏輯像素尺寸來設(shè)計(jì)和開發(fā)頁面。只不過在準(zhǔn)備資源圖的時(shí)候,需要準(zhǔn)備2倍大小的圖,通過代碼把它縮成1倍大小顯示,才能保證清晰。
實(shí)際應(yīng)用
大家最關(guān)心的還是實(shí)際運(yùn)用,畫布該怎么設(shè)置。我們就iOS、Android、Web三個(gè)平臺(tái)來分別梳理一下。不過在這之前,我要為使用PS進(jìn)行設(shè)計(jì)的朋友介紹一個(gè)小技巧。
之前我說過,我們要以邏輯像素尺寸來思考界面。體現(xiàn)到設(shè)計(jì)過程中,就是要把單位設(shè)置成邏輯像素。打開PS的首選項(xiàng)——單位與標(biāo)尺界面,把尺寸和文字單位都改成點(diǎn)(Point)。這里的點(diǎn)也就是pt,無論設(shè)計(jì)iOS、Android還是Web應(yīng)用,單位都用它。當(dāng)然,各平臺(tái)單位名稱還是要記住的。這里我們用的只是它的原理,不用在意名稱。