?初涉移動(dòng)端設(shè)計(jì)和開(kāi)發(fā)的同學(xué)們,基本都會(huì)在尺寸問(wèn)題上糾結(jié)好一陣子才能摸到頭緒务甥。我也花了很長(zhǎng)時(shí)間才弄明白窒悔,感覺(jué)有必要寫(xiě)一篇足夠通俗易懂的教程來(lái)幫助大家。從原理說(shuō)起,理清關(guān)于尺寸的所有細(xì)節(jié)藤乙。由于是寫(xiě)給初學(xué)者的猜揪,所以不要嫌我啰嗦。?
1.現(xiàn)象
首先說(shuō)現(xiàn)象坛梁,大家都知道移動(dòng)端設(shè)備屏幕尺寸非常多而姐,碎片化嚴(yán)重。尤其是Android划咐,你會(huì)聽(tīng)到很多種分辨率:480x800, 480x854, 540x960, 720x1280, 1080x1920拴念,而且還有傳說(shuō)中的2K屏。近年來(lái)iPhone的碎片化也加劇了:640x960, 640x1136, 750x1334, 1242x2208褐缠。
不要被這些尺寸嚇倒政鼠。實(shí)際上大部分的app和移動(dòng)端網(wǎng)頁(yè),在各種尺寸的屏幕上都能正常顯示队魏。說(shuō)明尺寸的問(wèn)題一定有解決方法公般,而且有規(guī)律可循。
2.像素密度
要知道器躏,屏幕是由很多像素點(diǎn)組成的俐载。之前提到那么多種分辨率,都是手機(jī)屏幕的實(shí)際像素尺寸登失。比如480x800的屏幕遏佣,就是由800行、480列的像素點(diǎn)組成的揽浙。每個(gè)點(diǎn)發(fā)出不同顏色的光状婶,構(gòu)成我們所看到的畫(huà)面。而手機(jī)屏幕的物理尺寸馅巷,和像素尺寸是不成比例的膛虫。最典型的例子,iPhone 3gs的屏幕像素是320x480钓猬,iPhone 4s的屏幕像素是640x960稍刀。剛好兩倍,然而兩款手機(jī)都是3.5英寸的敞曹。
所以账月,我們要引入最重要的一個(gè)概念:像素密度,也就是PPI(pixels per inch)澳迫。這項(xiàng)指標(biāo)是連接數(shù)字世界與物理世界的橋梁局齿。
Pixels per inch,準(zhǔn)確的說(shuō)是每英寸的長(zhǎng)度上排列的像素點(diǎn)數(shù)量橄登。1英寸是一個(gè)固定長(zhǎng)度抓歼,等于2.54厘米讥此,大約是食指最末端那根指節(jié)的長(zhǎng)度。像素密度越高谣妻,代表屏幕顯示效果越精細(xì)萄喳。Retina屏比普通屏清晰很多,就是因?yàn)樗南袼孛芏确艘槐丁?/p>
3.倍率與邏輯像素
再用iPhone 3gs和4s來(lái)舉例拌禾。假設(shè)有個(gè)郵件列表界面取胎,我們不妨按照PC端網(wǎng)頁(yè)設(shè)計(jì)的思維來(lái)想象。3gs上大概只能顯示4-5行湃窍,4s就能顯示9-10行闻蛀,而且每行會(huì)變得特別寬。但兩款手機(jī)其實(shí)是一樣大的您市。如果照這種方式顯示觉痛,3gs上剛剛好的效果,在4s上就會(huì)小到根本看不清字茵休。
在現(xiàn)實(shí)中薪棒,這兩者效果卻是一樣的。這是因?yàn)镽etina屏幕把2x2個(gè)像素當(dāng)1個(gè)像素使用榕莺。比如原本44像素高的頂部導(dǎo)航欄俐芯,在Retina屏上用了88個(gè)像素的高度來(lái)顯示。導(dǎo)致界面元素都變成2倍大小钉鸯,反而和3gs效果一樣了吧史。畫(huà)質(zhì)卻更清晰。
在以前唠雕,iOS應(yīng)用的資源圖片中贸营,同一張圖通常有兩個(gè)尺寸。你會(huì)看到文件名有的帶@2x字樣岩睁,有的不帶钞脂。其中不帶@2x的用在普通屏上,帶@2x的用在Retina屏上。只要圖片準(zhǔn)備好,iOS會(huì)自己判斷用哪張绩脆,Android道理也一樣。
由此可以看出亿笤,蘋(píng)果以普通屏為基準(zhǔn),給Retina屏定義了一個(gè)2倍的倍率(iPhone 6plus除外栋猖,它達(dá)到了3倍)。實(shí)際像素除以倍率汪榔,就得到邏輯像素尺寸蒲拉。只要兩個(gè)屏幕邏輯像素相同肃拜,它們的顯示效果就是相同的。
Android的解決方法類(lèi)似雌团,但更復(fù)雜一些燃领。因?yàn)锳ndroid屏幕尺寸實(shí)在太多,分辨率高低跨度非常大锦援,不像蘋(píng)果只有那么幾款固定設(shè)備猛蔽、固定尺寸。所以Android把各種設(shè)備的像素密度劃成了好幾個(gè)范圍區(qū)間灵寺,給不同范圍的設(shè)備定義了不同的倍率曼库,來(lái)保證顯示效果相近。像素密度概念雖然重要略板,但用不著我們自己算毁枯,iOS與Android都幫我們算好了。
如圖所示叮称,像素密度在120左右的屏幕歸為ldpi种玛,160左右的歸為mdpi,以此類(lèi)推瓤檐。這樣赂韵,所有的Android屏幕都找到了自己的位置,并賦予了相應(yīng)的倍率:
ldpi [0.75倍]
mdpi [1倍]
hdpi [1.5倍]
xhdpi [2倍]
xxhdpi [3倍]
xxxhdpi [4倍]
各型號(hào)iPhone的倍率比較簡(jiǎn)單挠蛉,我們后面會(huì)講到祭示。那么Android手機(jī)那么多,具體怎么分碌秸?哪些手機(jī)是幾倍的倍率呢绍移?我們先看一張表,這是友盟2014年10月到2015年03月的數(shù)據(jù):
就目前市場(chǎng)狀況而言讥电,各種手機(jī)的分辨率可以這樣粗略判斷蹂窖。雖然不全面,但至少在1年內(nèi)都還有一定的參考意義:
ldpi 如今已絕跡恩敌,不用考慮
mdpi [320x480](市場(chǎng)份額不足5%瞬测,新手機(jī)不會(huì)有這種倍率,屏幕通常都特別芯琅凇)
hdpi [480x800月趟、480x854、540x960](早年的低端機(jī)恢口,屏幕在3.5英寸檔位孝宗;如今的低端機(jī),屏幕在4.7-5.0英寸檔位)
xhdpi [720x1280](早年的中端機(jī)耕肩,屏幕在4.7-5.0英寸檔位因妇;如今的中低端機(jī)问潭,屏幕在5.0-5.5英寸檔位)
xxhdpi [1080x1920](早年的高端機(jī),如今的中高端機(jī)婚被,屏幕通常都在5.0英寸以上)
xxxhdpi [1440x2560](極少數(shù)2K屏手機(jī)狡忙,比如Google Nexus 6)
自然地,以1倍的mdpi作為基準(zhǔn)址芯。像素密度更高或者更低的設(shè)備灾茁,只需乘以相應(yīng)的倍率,就能得到與基準(zhǔn)倍率近似的顯示效果谷炸。
不過(guò)需要注意的是北专,Android設(shè)備的邏輯像素尺寸并不統(tǒng)一。比如兩種常見(jiàn)的屏幕480x800和1080x1920淑廊,它們分別屬于hdpi和xxhdpi逗余。除以各自倍率1.5倍和3倍,得到邏輯像素為320x533和360x640季惩。很顯然录粱,后者更寬更高,能顯示更多內(nèi)容画拾。所以啥繁,即使有倍率的存在,各種Android設(shè)備的顯示效果仍然無(wú)法做到完全一致青抛。
4.單位
不難發(fā)現(xiàn)旗闽,真正決定顯示效果的,是邏輯像素尺寸蜜另。為此适室,iOS和Android平臺(tái)都定義了各自的邏輯像素單位。iOS的尺寸單位為pt举瑰,Android的尺寸單位為dp捣辆。說(shuō)實(shí)話(huà),兩者其實(shí)是一回事此迅。
單位之間的換算關(guān)系隨倍率變化:
1倍:1pt=1dp=1px(mdpi汽畴、iPhone 3gs)
1.5倍:1pt=1dp=1.5px(hdpi)
2倍:1pt=1dp=2px(xhdpi、iPhone 4s/5/6)
3倍:1pt=1dp=3px(xxhdpi耸序、iPhone 6 plus)
4倍:1pt=1dp=4px(xxxhdpi)
單位決定了我們的思考方式忍些。在設(shè)計(jì)和開(kāi)發(fā)過(guò)程中,應(yīng)該盡量使用邏輯像素尺寸來(lái)思考界面坎怪。設(shè)計(jì)Android應(yīng)用時(shí)罢坝,有的設(shè)計(jì)師喜歡把畫(huà)布設(shè)為1080x1920,有的喜歡設(shè)成720x1280搅窿。給出的界面元素尺寸就不統(tǒng)一了嘁酿。Android的最小點(diǎn)擊區(qū)域尺寸是48x48dp疾棵,這就意味著在xhdpi的設(shè)備上,按鈕尺寸至少是96x96px痹仙。而在xxhdpi設(shè)備上,則是144x144px殉了。
無(wú)論畫(huà)布設(shè)成多大开仰,我們?cè)O(shè)計(jì)的是基準(zhǔn)倍率的界面樣式,而且開(kāi)發(fā)人員需要的單位都是邏輯像素薪铜。所以為了保證準(zhǔn)確高效的溝通众弓,雙方都需要以邏輯像素尺寸來(lái)描述和理解界面,無(wú)論是在標(biāo)注圖還是在日常溝通中隔箍。不要再說(shuō)“底部標(biāo)簽欄的高度是96像素谓娃,我是按照xhdpi做的”這樣的話(huà)了。
5.Web怎么辦
移動(dòng)端頁(yè)面的絕對(duì)單位仍然是px蜒滩,至少代碼里這么寫(xiě)滨达,但它的道理也和app一樣。由于像素密度是設(shè)備本身的固有屬性俯艰,它會(huì)影響到設(shè)備中的所有應(yīng)用捡遍,包括瀏覽器。前端技術(shù)可以善加利用設(shè)備的像素密度竹握,只需一行代碼画株,瀏覽器便會(huì)使用app的顯示方式來(lái)渲染頁(yè)面。根據(jù)像素密度啦辐,按相應(yīng)倍率縮放谓传。
可以通過(guò)這個(gè)測(cè)試頁(yè)面?greenzorro.github.io/demo/basic/…?來(lái)看看你的移動(dòng)設(shè)備屏幕寬度,這是邏輯像素寬度芹关。
以iPhone 5s為例续挟,屏幕的分辨率是640x1136,倍率是2充边。瀏覽器會(huì)認(rèn)為屏幕的分辨率是320x568庸推,仍然是基準(zhǔn)倍率的尺寸。所以在制作頁(yè)面時(shí)浇冰,只需要按照基準(zhǔn)倍率來(lái)就行了贬媒。無(wú)論什么樣的屏幕,倍率是多少肘习,都按邏輯像素尺寸來(lái)設(shè)計(jì)和開(kāi)發(fā)頁(yè)面际乘。只不過(guò)在準(zhǔn)備資源圖的時(shí)候,需要準(zhǔn)備2倍大小的圖漂佩,通過(guò)代碼把它縮成1倍大小顯示脖含,才能保證清晰罪塔。
6.實(shí)際應(yīng)用
大家最關(guān)心的還是實(shí)際運(yùn)用,畫(huà)布該怎么設(shè)置养葵。我們就iOS征堪、Android、Web三個(gè)平臺(tái)來(lái)分別梳理一下关拒。不過(guò)在這之前佃蚜,我要為使用PS進(jìn)行設(shè)計(jì)的朋友介紹一個(gè)小技巧。
之前我說(shuō)過(guò)着绊,我們要以邏輯像素尺寸來(lái)思考界面谐算。體現(xiàn)到設(shè)計(jì)過(guò)程中,就是要把單位設(shè)置成邏輯像素归露。打開(kāi)PS的首選項(xiàng)——單位與標(biāo)尺界面洲脂,把尺寸和文字單位都改成點(diǎn)(Point)。這里的點(diǎn)也就是pt剧包,無(wú)論設(shè)計(jì)iOS恐锦、Android還是Web應(yīng)用,單位都用它玄捕。當(dāng)然踩蔚,各平臺(tái)單位名稱(chēng)還是要記住的。這里我們用的只是它的原理枚粘,不用在意名稱(chēng)馅闽。
要調(diào)節(jié)倍率,則通過(guò)圖像大小里的DPI來(lái)控制馍迄。這個(gè)DPI福也,其實(shí)就是PPI,像素密度攀圈。有個(gè)常識(shí)大家都知道暴凑,屏幕上的設(shè)計(jì)DPI設(shè)成72,印刷品設(shè)計(jì)DPI設(shè)成300赘来。為什么是這兩個(gè)數(shù)字现喳?
首先說(shuō)300,這和人眼的分辨能力有關(guān)犬辰。由于1英寸是固定長(zhǎng)度嗦篱,每1英寸有多少個(gè)像素點(diǎn)決定了畫(huà)質(zhì)清晰程度。之前說(shuō)過(guò)幌缝,這就是像素密度灸促,也就是DPI。DPI達(dá)到300以上,其細(xì)膩程度就會(huì)給人真實(shí)感浴栽,像真實(shí)世界中的物件荒叼。相反,DPI只有10的話(huà)典鸡,在你一個(gè)食指指節(jié)大小的長(zhǎng)度內(nèi)只有10個(gè)像素被廓,這明顯就是馬賽克了。所以印刷品要設(shè)成300萝玷,才能保證清晰伊者。
再說(shuō)72,這有一定的歷史原因间护。最早的圖形設(shè)計(jì)是在mac電腦上進(jìn)行的,mac本身的顯示器分辨率就是72挖诸。PS中把圖像DPI也設(shè)成72汁尺,就能保證屏幕上顯示的尺寸和打印尺寸相同,便于設(shè)計(jì)多律。72的PC顯示器分辨率逐漸成為一種默認(rèn)的行業(yè)標(biāo)準(zhǔn)痴突,這套規(guī)則就這么沿用下來(lái)。
現(xiàn)在回到正題狼荞,我們?cè)趺赐ㄟ^(guò)DPI來(lái)調(diào)節(jié)倍率辽装?既然屏幕本身的分辨率是72,DPI設(shè)成72剛好是1倍尺寸相味,那設(shè)成72的兩倍就是倍率為2的屏幕了拾积,就這么簡(jiǎn)單。
下面來(lái)看看3個(gè)平臺(tái)各自的畫(huà)布設(shè)置:
iPhone
iPhone的屏幕尺寸各不相同丰涉,我說(shuō)的是邏輯像素尺寸拓巧,這確實(shí)是讓人很頭疼的事情。如果想用一套設(shè)計(jì)涵蓋所有iPhone一死,就要選擇邏輯像素折中的機(jī)型肛度。
從市場(chǎng)占有率數(shù)據(jù)來(lái)看,目前最多的是iPhone5/5s的屏幕投慈。倍率為2承耿,邏輯像素320x568。上升勢(shì)頭最猛伪煤,未來(lái)有望登上第一的是iPhone 6的屏幕加袋。倍率為2,邏輯像素375x667带族。
按照這兩種尺寸來(lái)設(shè)計(jì)锁荔,都是比較主流的做法。可以兼顧短一些的iPhone 4s阳堕,大一點(diǎn)的6 plus也不會(huì)過(guò)于空曠跋理。
不過(guò)在切圖的時(shí)候要注意,由于iPhone 6 plus的3倍圖是由2倍圖放大而來(lái)恬总,所以位圖要注意保證清晰前普。
Android
都說(shuō)Android碎片化嚴(yán)重,但它現(xiàn)在反而比iOS好處理壹堰。因?yàn)槿缃竦腁ndroid屏幕邏輯像素已經(jīng)趨于統(tǒng)一了:360x640拭卿,就看你設(shè)成幾倍了。想以xhdpi為準(zhǔn)贱纠,就把DPI設(shè)成72x2=144峻厚。想以xxhdpi為準(zhǔn),就把DPI設(shè)成72x3=216谆焊。
對(duì)于那些比較老的低端機(jī)惠桃,寬度是480px的那批,畫(huà)面確實(shí)會(huì)小一些辖试,顯示內(nèi)容會(huì)更少辜王。稍微留意一下,重要內(nèi)容盡量保持在界面中上部分罐孝。
當(dāng)然呐馆,這些機(jī)型不出一年就會(huì)被邊緣化,基本淘汰×ぃ現(xiàn)在能運(yùn)轉(zhuǎn)的也是當(dāng)作功能機(jī)在用汹来,軟件多了必卡無(wú)疑,用戶(hù)體驗(yàn)無(wú)從談起改艇。不作考慮也是OK的俗慈。
Web
手機(jī)端網(wǎng)頁(yè)就沒(méi)有統(tǒng)一標(biāo)準(zhǔn)了,比較流行的做法是按照iPhone 5的尺寸來(lái)設(shè)計(jì)遣耍。倍率2闺阱,邏輯像素320x568。
這樣的做法比較實(shí)在舵变,倍率2的屏幕無(wú)論在iOS還是Android方面都是主流酣溃,而且又是2倍屏幕中邏輯像素最小的。所以圖片的尺寸可以保持在較小的水平纪隙,頁(yè)面加載速度快赊豌。當(dāng)然,缺點(diǎn)就是在倍率3的設(shè)備上看绵咱,圖片不是特別清晰碘饼。
如果追求圖片質(zhì)量,愿意犧牲加載速度,那么可以按照最大的屏幕來(lái)設(shè)計(jì)艾恼。也就是iPhone 6 plus的尺寸住涉,倍率3,邏輯像素414x736钠绍。
7.總結(jié)
移動(dòng)端的尺寸比PC端復(fù)雜舆声,關(guān)鍵就在倍率。但也正因?yàn)楸堵实拇嬖诹汛蟠笮⌒〉钠聊焕氐酵凰骄€媳握,得以保證一套設(shè)計(jì)適應(yīng)各種屏幕。站在這條水平線的角度看磷脯,會(huì)發(fā)現(xiàn)它很好理解蛾找。