摘要:在移動端開發(fā)的過程中大家都會發(fā)現(xiàn),移動端的顯示一般與桌面端的不一樣。像素講了這么多概念,仿佛還是沒有很好地解釋文章開頭的問題。上面所指出的這種抽象單位稱為設(shè)備無關(guān)像素。
在移動端開發(fā)的過程中大家都會發(fā)現(xiàn),移動端的顯示一般與桌面端的不一樣。比如在iphone6上顯示一個1334x750像素大小塊狀元素,雖然在蘋果官網(wǎng)上iphone6標(biāo)稱的屏幕像素密度是1334x750規(guī)格,但是我們卻發(fā)現(xiàn)這個1334x750像素大小的塊狀元素卻不能鋪滿整個屏幕。那到底是為什么呢?下面從幾個方面來作探討。
像素密度(PPI)PPI(Pixel Per Inch),即表示每英寸有多少像素,類似于人口密度和建筑密度,如下圖舉例了幾種PPI的表示。
以iphone6為例,一般像素密度的計算公式為:
Math.sqrt(1366*1366 + 640*640)
但是要計算這個PPI,那么我們先要知道設(shè)備的屏幕上到底有多少個像素,也就是Pixel Per Inch 中的第一個Pixel。
設(shè)備像素(DP)&& 設(shè)備像素比(DPR)設(shè)備像素(Device pixel),也稱物理像素(Physical pixel),也就是本文一開始提到iphone6的屏幕規(guī)格。像素密度中所指的像素就是設(shè)備像素,對于一般的顯示設(shè)備來說,一個像素對應(yīng)著屏幕上的一個發(fā)光點(diǎn),因此PPI也稱為DPI(dots per inch),但是這僅在顯示設(shè)備上才等價,比如在打印機(jī)上就不一樣了。
由于市面上每一臺手機(jī)的屏幕規(guī)格不一樣,有的是720P,有的是1080P,甚者是2K等等,這些設(shè)備的屏幕有些像素多,有些像素少,如果同樣顯示一個像素的話,則會出現(xiàn)像以下的情況:
越高PPI的屏幕,顯示一個像素點(diǎn)的面積就越小,一張由4x4個像素點(diǎn)組成的圖顯示在PPI為64的屏幕上,那么換到256PPI的屏幕上顯示則會縮小為原來大小的一半。
反過來,如果要在PPI為256的屏幕上顯示效果與PPI為64的屏幕一樣,那么得要把圖片放大2倍。
因此配有高清屏幕的手機(jī),廠商為了其設(shè)備的可用性,即圖標(biāo)和文字可以被正確識別和準(zhǔn)確點(diǎn)擊,就必須保證各類素材在其設(shè)備上的顯示與標(biāo)清設(shè)備一樣,而這個解決方法就是把所有尺寸都放大若干倍。這個放大比例就叫作設(shè)備像素比(Device Pixel Ratio, DPR),一般DPR對應(yīng)著下面這個表:
? | ldpi | mdpi | hdpi | xhdpi |
---|---|---|---|---|
ppi | 120 | 160 | 240 | 320 |
dpr | 0.75 | 1.0 | 1.5 | 2.0 |
因此高清設(shè)備上應(yīng)該配有高清圖片顯示,不然圖片在高清設(shè)備上放大后沒有足夠的像素顯示其細(xì)節(jié),那么這張圖片就會變得看起來很模糊。
CSS像素講了這么多概念,仿佛還是沒有很好地解釋文章開頭的問題。下面討論完CSS像素后估計大家會有一個比較清晰的概念。
我們通宵在寫CSS的時候會用到像素單位px,但是這個像素單位并不一直是與設(shè)備像素一一對應(yīng),也就是說在CSS中1px(像素)不是對應(yīng)著設(shè)備屏幕中的一個像素點(diǎn)。為了與設(shè)備像素區(qū)別,CSS中所指的像素px我們一般稱為CSS像素。也就是說CSS像素是一個虛擬的、相對的單位。
例如在頁面上畫一個300px寬的塊元素,在一般的顯示器下它只會占屏幕的一部分,但如果我們手動地去放大頁面,很快這個塊狀元素也會充滿整個頁面。由此說明,一般情況下CSS像素與系統(tǒng)分辨率下的像素大小相等,即在標(biāo)清設(shè)備中,一個CSS像素應(yīng)該是與一個設(shè)備像素大小相等的。但是是高清設(shè)備或者用戶縮放的過程中,一個CSS像素也有可能等于多個設(shè)備像素。
舉另外一個例子,在移動原生應(yīng)用開發(fā)中,如果必須以一個設(shè)備像素為單位進(jìn)行開發(fā),那將會是一件非常痛苦的事,因為不是每一臺移動設(shè)備的系統(tǒng)分辨率都是對應(yīng)著一個設(shè)備像素,有的是1:2,有的是1:2.46,正是因為有這種差異,在安卓開發(fā)中會有例如dp,dt這種單位(在iOS中會有pt單位),當(dāng)我們給一個元素定義大小時,只需要給定一個dp值,系統(tǒng)將會根據(jù)這個值再與系統(tǒng)分辨率與設(shè)備像素的比值(即DPR)進(jìn)行換算,最終計算出顯示在屏幕上的實際設(shè)備像素。
上面所指出的dp這種抽象單位稱為設(shè)備無關(guān)像素(device independent pixel)。當(dāng)然CSS像素也屬于設(shè)備無關(guān)像素,我們在寫CSS像素的時候,不用關(guān)心一個CSS像素對應(yīng)著多少個設(shè)備像素,系統(tǒng)會自動地根據(jù)DPR來幫我們換算好。我們要關(guān)心的只是如何保證網(wǎng)頁元素因為系統(tǒng)換算而導(dǎo)致被放大的時候下,還能清晰地展示在設(shè)備上。
視口(Viewport)正常來說,在移動端打開一個頁面,如果瀏覽器先會以正常的比例來渲染頁面,然后再自動地設(shè)置一個比例來縮放頁面,目的是為了讓內(nèi)容更好地展示出來,即頁面內(nèi)容剛好鋪滿整個手機(jī)屏幕,當(dāng)然如果頁面沒有禁止掉用戶縮放的話,你也可以用兩個手指把頁面縮放回原始的比例。這整個過程就是通過視口(viewport)來實現(xiàn)的,原始頁面渲染好后通過視口縮放使得與系統(tǒng)寬度一樣,從而可以完整地展示頁面。
(圖片來自tgideas團(tuán)隊博客)
我們可以通過在content中添加inital-scale屬性來控制渲染時視窗的縮放比例,把它設(shè)置為1則無縮放。
我們也可以定義device-width屬性來控制viewport的寬度
一般在移動開發(fā)中我們會設(shè)置不允許用戶縮放,并把最大、最小縮放比設(shè)為1
總結(jié)(Summary)
通過連續(xù)幾天的翻閱資料與探索,終于完整地對移動開發(fā)最入門的地方有了準(zhǔn)確的理解,之前也只是一直把meta里的代碼直接復(fù)制過來用就是了,一直沒去弄清楚,這次趁著有空并且手上剛好有相關(guān)的資料,一并整體地走一遍,最后記錄成此文檔,希望對日后甚至?xí)Υ蠹矣袔椭?/p>
參與資料:
1.深入了解viewport和px
2.高性能響應(yīng)式Web開發(fā)實戰(zhàn)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/54488.html
摘要:在移動端開發(fā)的過程中大家都會發(fā)現(xiàn),移動端的顯示一般與桌面端的不一樣。像素講了這么多概念,仿佛還是沒有很好地解釋文章開頭的問題。上面所指出的這種抽象單位稱為設(shè)備無關(guān)像素。 在移動端開發(fā)的過程中大家都會發(fā)現(xiàn),移動端的顯示一般與桌面端的不一樣。比如在iphone6上顯示一個1334x750像素大小塊狀元素,雖然在蘋果官網(wǎng)上iphone6標(biāo)稱的屏幕像素密度是1334x750規(guī)格,但是我們卻發(fā)現(xiàn)...
摘要:真的是給我們新手學(xué)習(xí)移動端適配造成不少困惑英語真的很重要呀。細(xì)節(jié)高清屏上的處理其實并不是所有做移動端適配的人都一定會遇到這個問題。 一次搞清楚移動端這幾個坑爹的單位慨念 目錄: 一、讓坑爹的單位,不再坑爹 二、需要準(zhǔn)備什么樣的設(shè)計稿 三、rem方案的原理和細(xì)節(jié) 高清屏上,位圖的處理 高清屏上,關(guān)于border: 1px的處理 移動端屏幕的自動適配的處理 移動端屏幕上字體大小的處理...
摘要:真的是給我們新手學(xué)習(xí)移動端適配造成不少困惑英語真的很重要呀。細(xì)節(jié)高清屏上的處理其實并不是所有做移動端適配的人都一定會遇到這個問題。 一次搞清楚移動端這幾個坑爹的單位慨念 目錄: 一、讓坑爹的單位,不再坑爹 二、需要準(zhǔn)備什么樣的設(shè)計稿 三、rem方案的原理和細(xì)節(jié) 高清屏上,位圖的處理 高清屏上,關(guān)于border: 1px的處理 移動端屏幕的自動適配的處理 移動端屏幕上字體大小的處理...
摘要:需要注意,上面的尺寸都是屏幕對角線的長度英寸縮寫為在荷蘭語中的本意是大拇指,一英寸就是指甲底部普通人拇指的寬度。由于手機(jī)尺寸為手機(jī)對角線的長度,我們通常使用如下的方法計算的為,那它每英寸約含有個物理像素點(diǎn)。導(dǎo)讀 移動端適配,是我們在開發(fā)中經(jīng)常會遇到的,這里面可能會遇到非常多的問題: 1px問題 UI圖完美適配方案 iPhoneX適配方案 橫屏適配 高清屏圖片模糊問題 ... ...
閱讀 3031·2021-11-18 10:07
閱讀 3781·2021-11-17 17:00
閱讀 2111·2021-11-15 18:01
閱讀 938·2021-10-11 10:58
閱讀 3390·2021-09-10 10:50
閱讀 3465·2021-08-13 15:05
閱讀 1234·2019-08-30 15:53
閱讀 2659·2019-08-29 13:01