移動(dòng)端開(kāi)發(fā)教程之像素的顯示問(wèn)題匯總
最近在開(kāi)發(fā)中,發(fā)現(xiàn)了移動(dòng)端像素的一些問(wèn)題,是之前一直沒(méi)注意過(guò)的,這篇文章主要給大家介紹了關(guān)于移動(dòng)端開(kāi)發(fā)教程之像素顯示問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。...
前言
相信在移動(dòng)端開(kāi)發(fā)的過(guò)程中大家都會(huì)發(fā)現(xiàn),移動(dòng)端的顯示一般與桌面端的不一樣。比如在iPhone6上顯示一個(gè)1334x750像素大小塊狀元素,雖然在蘋(píng)果官網(wǎng)上iphone6標(biāo)稱(chēng)的屏幕像素密度是1334x750規(guī)格,但是我們卻發(fā)現(xiàn)這個(gè)1334x750像素大小的塊狀元素卻不能鋪滿(mǎn)整個(gè)屏幕。
那到底是為什么呢?下面從幾個(gè)方面來(lái)作探討。
像素密度(PPI)
PPI(Pixel Per Inch),即表示每英寸有多少像素,類(lèi)似于人口密度和建筑密度,如下圖舉例了幾種PPI的表示。
以iphone6為例,一般像素密度的計(jì)算公式為: Math.sqrt(1366*1366 + 640*640)
但是要計(jì)算這個(gè)PPI,那么我們先要知道設(shè)備的屏幕上到底有多少個(gè)像素,也就是Pixel Per Inch 中的第一個(gè)Pixel。
設(shè)備像素(DP)&& 設(shè)備像素比(DPR)
設(shè)備像素(Device pixel),也稱(chēng)物理像素(Physical pixel),也就是本文一開(kāi)始提到iphone6的屏幕規(guī)格。像素密度中所指的像素就是設(shè)備像素,對(duì)于一般的顯示設(shè)備來(lái)說(shuō),一個(gè)像素對(duì)應(yīng)著屏幕上的一個(gè)發(fā)光點(diǎn),因此PPI也稱(chēng)為DPI(dots per inch),但是這僅在顯示設(shè)備上才等價(jià),比如在打印機(jī)上就不一樣了。
由于市面上每一臺(tái)手機(jī)的屏幕規(guī)格不一樣,有的是720P,有的是1080P,甚者是2K等等,這些設(shè)備的屏幕有些像素多,有些像素少,如果同樣顯示一個(gè)像素的話(huà),則會(huì)出現(xiàn)像以下的情況:
越高PPI的屏幕,顯示一個(gè)像素點(diǎn)的面積就越小,一張由4x4個(gè)像素點(diǎn)組成的圖顯示在PPI為64的屏幕上,那么換到256PPI的屏幕上顯示則會(huì)縮小為原來(lái)大小的一半。
反過(guò)來(lái),如果要在PPI為256的屏幕上顯示效果與PPI為64的屏幕一樣,那么得要把圖片放大2倍。
因此配有高清屏幕的手機(jī),廠(chǎng)商為了其設(shè)備的可用性,即圖標(biāo)和文字可以被正確識(shí)別和準(zhǔn)確點(diǎn)擊,就必須保證各類(lèi)素材在其設(shè)備上的顯示與標(biāo)清設(shè)備一樣,而這個(gè)解決方法就是把所有尺寸都放大若干倍。這個(gè)放大比例就叫作設(shè)備像素比(Device Pixel Ratio, DPR),一般DPR對(duì)應(yīng)著下面這個(gè)表:
ldpi | mdpi | hdpi | xhdpi | |
---|---|---|---|---|
ppi | 120 | 160 | 240 | 320 |
dpr | 0.75 | 1.0 | 1.5 | 2.0 |
因此高清設(shè)備上應(yīng)該配有高清圖片顯示,不然圖片在高清設(shè)備上放大后沒(méi)有足夠的像素顯示其細(xì)節(jié),那么這張圖片就會(huì)變得看起來(lái)很模糊。
CSS像素
講了這么多概念,仿佛還是沒(méi)有很好地解釋文章開(kāi)頭的問(wèn)題。下面討論完CSS像素后估計(jì)大家會(huì)有一個(gè)比較清晰的概念。
我們通宵在寫(xiě)CSS的時(shí)候會(huì)用到像素單位px,但是這個(gè)像素單位并不一直是與設(shè)備像素一一對(duì)應(yīng),也就是說(shuō)在CSS中1px(像素)不是對(duì)應(yīng)著設(shè)備屏幕中的一個(gè)像素點(diǎn)。為了與設(shè)備像素區(qū)別,CSS中所指的像素px我們一般稱(chēng)為CSS像素。也就是說(shuō)CSS像素是一個(gè)虛擬的、相對(duì)的單位。
例如在頁(yè)面上畫(huà)一個(gè)300px寬的塊元素,在一般的顯示器下它只會(huì)占屏幕的一部分,但如果我們手動(dòng)地去放大頁(yè)面,很快這個(gè)塊狀元素也會(huì)充滿(mǎn)整個(gè)頁(yè)面。由此說(shuō)明,一般情況下CSS像素與系統(tǒng)分辨率下的像素大小相等,即在標(biāo)清設(shè)備中,一個(gè)CSS像素應(yīng)該是與一個(gè)設(shè)備像素大小相等的。但是是高清設(shè)備或者用戶(hù)縮放的過(guò)程中,一個(gè)CSS像素也有可能等于多個(gè)設(shè)備像素。
舉另外一個(gè)例子,在移動(dòng)原生應(yīng)用開(kāi)發(fā)中,如果必須以一個(gè)設(shè)備像素為單位進(jìn)行開(kāi)發(fā),那將會(huì)是一件非常痛苦的事,因?yàn)椴皇敲恳慌_(tái)移動(dòng)設(shè)備的系統(tǒng)分辨率都是對(duì)應(yīng)著一個(gè)設(shè)備像素,有的是1:2,有的是1:2.46,正是因?yàn)橛羞@種差異,在安卓開(kāi)發(fā)中會(huì)有例如dp,dt這種單位(在iOS中會(huì)有pt單位),當(dāng)我們給一個(gè)元素定義大小時(shí),只需要給定一個(gè)dp值,系統(tǒng)將會(huì)根據(jù)這個(gè)值再與系統(tǒng)分辨率與設(shè)備像素的比值(即DPR)進(jìn)行換算,最終計(jì)算出顯示在屏幕上的實(shí)際設(shè)備像素。
上面所指出的dp這種抽象單位稱(chēng)為設(shè)備無(wú)關(guān)像素(device independent pixel)。當(dāng)然CSS像素也屬于設(shè)備無(wú)關(guān)像素,我們?cè)趯?xiě)CSS像素的時(shí)候,不用關(guān)心一個(gè)CSS像素對(duì)應(yīng)著多少個(gè)設(shè)備像素,系統(tǒng)會(huì)自動(dòng)地根據(jù)DPR來(lái)幫我們換算好。我們要關(guān)心的只是如何保證網(wǎng)頁(yè)元素因?yàn)橄到y(tǒng)換算而導(dǎo)致被放大的時(shí)候下,還能清晰地展示在設(shè)備上。
視口(Viewport)
正常來(lái)說(shuō),在移動(dòng)端打開(kāi)一個(gè)頁(yè)面,如果瀏覽器先會(huì)以正常的比例來(lái)渲染頁(yè)面,然后再自動(dòng)地設(shè)置一個(gè)比例來(lái)縮放頁(yè)面,目的是為了讓內(nèi)容更好地展示出來(lái),即頁(yè)面內(nèi)容剛好鋪滿(mǎn)整個(gè)手機(jī)屏幕,當(dāng)然如果頁(yè)面沒(méi)有禁止掉用戶(hù)縮放的話(huà),你也可以用兩個(gè)手指把頁(yè)面縮放回原始的比例。這整個(gè)過(guò)程就是通過(guò)視口(viewport)來(lái)實(shí)現(xiàn)的,原始頁(yè)面渲染好后通過(guò)視口縮放使得與系統(tǒng)寬度一樣,從而可以完整地展示頁(yè)面。
(圖片來(lái)自tgideas團(tuán)隊(duì)博客)
我們可以通過(guò)在content中添加inital-scale屬性來(lái)控制渲染時(shí)視窗的縮放比例,把它設(shè)置為1則無(wú)縮放。
我們也可以定義device-width屬性來(lái)控制viewport的寬度
一般在移動(dòng)開(kāi)發(fā)中我們會(huì)設(shè)置不允許用戶(hù)縮放,并把最大、最小縮放比設(shè)為1
總結(jié)(Summary)
通過(guò)連續(xù)幾天的翻閱資料與探索,終于完整地對(duì)移動(dòng)開(kāi)發(fā)最入門(mén)的地方有了準(zhǔn)確的理解,之前也只是一直把meta里的代碼直接復(fù)制過(guò)來(lái)用就是了,一直沒(méi)去弄清楚,這次趁著有空并且手上剛好有相關(guān)的資料,一并整體地走一遍,最后記錄成此文檔,希望對(duì)日后甚至?xí)?duì)大家有幫助。
參與資料:
1.深入了解viewport和px
2.高性能響應(yīng)式Web開(kāi)發(fā)實(shí)戰(zhàn)
- 關(guān)于移動(dòng)端小圖標(biāo)模糊問(wèn)題的解決方法教程
- 售價(jià)159元!小米有品上架電力貼移動(dòng)電源:模塊化設(shè)計(jì)/無(wú)線(xiàn)
- 小米移動(dòng)電源3高配版發(fā)布:可為筆記本電腦充電,售價(jià)199元
- 2018年全球?qū)拵c4G網(wǎng)速:中國(guó)10.9MB/s 移動(dòng)最快
- 全球5G移動(dòng)套餐資費(fèi)出爐:最便宜的也要30元/G,人均月流量
- CSS去除移動(dòng)端點(diǎn)擊時(shí)元素產(chǎn)生的背景色
- 售價(jià)99元!小米二合一移動(dòng)電源(充電器)發(fā)布
- 移動(dòng)親情網(wǎng)怎么辦理?中國(guó)移動(dòng)全國(guó)親情網(wǎng)辦理方法和資費(fèi)
- 三大運(yùn)營(yíng)商4G上傳、下載網(wǎng)速實(shí)測(cè):電信、移動(dòng)跟聯(lián)通差距
- 全球移動(dòng)支付用戶(hù)數(shù)排名:微信支付6億用戶(hù)超越支付寶居
關(guān)于移動(dòng)端小圖標(biāo)模糊問(wèn)題的解決方法教程
由于移動(dòng)端的屏幕大小不一,所以我們?cè)谧鲆苿?dòng)端頁(yè)面的時(shí)候,在不同分辨率的手機(jī)屏幕下,手機(jī)端的圖片會(huì)顯示模糊不清,嚴(yán)重影響了用戶(hù)體驗(yàn),所以這篇文章主要給大家介紹了關(guān)于移動(dòng)端小圖標(biāo)模糊問(wèn)題的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。...
售價(jià)159元!小米有品上架電力貼移動(dòng)電源:模塊化設(shè)計(jì)/無(wú)線(xiàn)充電
1月4日,小米有品上架了一款銳靈電力貼無(wú)線(xiàn)移動(dòng)電源,采用二合一模塊化設(shè)計(jì),貼機(jī)隨行,小巧便攜,支持Qi無(wú)線(xiàn)充電,2600mAh電量。 本產(chǎn)品為有品第三方商品,由深圳銳靈新源電子科技有限公...
小米移動(dòng)電源3高配版發(fā)布:可為筆記本電腦充電,售價(jià)199元
1月4日消息,小米天貓旗艦店發(fā)布預(yù)告,11日將發(fā)售小米新品小米移動(dòng)電源3高配版,售價(jià)199元,可為筆記本電腦充電,支持大容量三口輸出。...
2018年全球?qū)拵c4G網(wǎng)速:中國(guó)10.9MB/s 移動(dòng)最快
互聯(lián)網(wǎng)速度測(cè)試和分析公司Ookla給出的一份全年的數(shù)據(jù)報(bào)告,2018年寬帶網(wǎng)速最快的國(guó)家是新加坡,而移動(dòng)寬帶平均下周速度最快的國(guó)家是挪威,兩者對(duì)應(yīng)的速度分別是175.13 Mbps(21.9 MB/s)和63.19 Mbps(7.9 MB/s)。...
全球5G移動(dòng)套餐資費(fèi)出爐:最便宜的也要30元/G,人均月流量至少60G
目前,韓國(guó)、美國(guó)、芬蘭都已經(jīng)宣布開(kāi)始試商用5G網(wǎng)絡(luò),雖然當(dāng)前市面上還沒(méi)有終端支持相應(yīng)的網(wǎng)絡(luò)(5G手機(jī)可以向下兼容4G網(wǎng)絡(luò),反之不行),但5G移動(dòng)資費(fèi)已經(jīng)相繼出爐,這對(duì)于不少想要提前體驗(yàn)5G網(wǎng)絡(luò)的用戶(hù)可以參考下。...
CSS去除移動(dòng)端點(diǎn)擊時(shí)元素產(chǎn)生的背景色
文章主要介紹了CSS去除移動(dòng)端點(diǎn)擊時(shí)元素產(chǎn)生的背景色,代碼很簡(jiǎn)單,需要的朋友跟隨小編一起看看吧在點(diǎn)擊產(chǎn)生背景色的元素的css樣式上加上以下代碼: -webkit-tap-highlight...
售價(jià)99元!小米二合一移動(dòng)電源(充電器)發(fā)布
12月10日,小米推出了一款小米二合一移動(dòng)電源(充電器),集雙口移動(dòng)電源與雙口充電器于一身,售價(jià)99元。 平時(shí)插入插座,就是充電器,出門(mén)前拿下,就是一個(gè)5000mAh的移動(dòng)電源。二...
移動(dòng)親情網(wǎng)怎么辦理?中國(guó)移動(dòng)全國(guó)親情網(wǎng)辦理方法和資費(fèi)
近日中國(guó)移動(dòng)推出了全國(guó)親情網(wǎng)套餐,該套餐是手機(jī)卡的增值服務(wù),并非手機(jī)卡套餐。據(jù)悉,親情網(wǎng)套餐有點(diǎn)類(lèi)似于之前的集群網(wǎng)服務(wù),訂購(gòu)之后,群組內(nèi)的用戶(hù)可以享受全國(guó)不限時(shí)互打免費(fèi)的...
三大運(yùn)營(yíng)商4G上傳、下載網(wǎng)速實(shí)測(cè):電信、移動(dòng)跟聯(lián)通差距不小
專(zhuān)業(yè)的測(cè)速機(jī)構(gòu)Speedtest隔段時(shí)間都會(huì)送出最新的實(shí)測(cè)網(wǎng)速情況,現(xiàn)在他們羅列了國(guó)內(nèi)最新4G網(wǎng)速概況,無(wú)論是上傳還是下載的平均網(wǎng)速上,中國(guó)聯(lián)通都是當(dāng)之無(wú)愧的第一,具體情況如下。...
全球移動(dòng)支付用戶(hù)數(shù)排名:微信支付6億用戶(hù)超越支付寶居榜首
按照Merchant Machine的估計(jì),中國(guó)有47%的手機(jī)用戶(hù)使用移動(dòng)錢(qián)包,微軟與支付寶是首選平臺(tái)。挪威也有42%的手機(jī)用戶(hù)使用,高于歐洲其它任何國(guó)家,比美國(guó)日本都要高。英國(guó)排在第三位,有24%的手機(jī)用戶(hù)使用支付App,美國(guó)只有17%。...