Web適配設(shè)計(jì)基礎(chǔ)

一、像素(pixel)

像素腮敌,通常來說就是一個(gè)個(gè)有各種顏色的小方點(diǎn)阱当,作為構(gòu)成影像的最小單位。它即有硬件上的概念也有非硬件上的概念缀皱,比如斗这,在css中,1px被稱為1個(gè)像素啤斗,此時(shí)這一個(gè)像素并不等同與硬件上的一個(gè)像素表箭,它們存在一定的比例關(guān)系,這個(gè)比例的多少是由設(shè)備像素比決定的(如瀏覽器的window.devicePixelRatio)钮莲。另一個(gè)例子是我們的筆記本電腦免钻,其分辨率規(guī)格為1920x1080,也就是說筆記本屏幕上寬有1920個(gè)硬件像素崔拥,高有1080個(gè)硬件像素极舔,而當(dāng)我們打開瀏覽器并全屏?xí)r,window.screen.width和window.screen.heigth顯示結(jié)果不是1920链瓦、1080拆魏。還有盯桦,比如電腦中顯示某張圖片為140x140,那么指的也不是硬件像素渤刃,而是參照像素拥峦。

1.硬件像素/設(shè)備像素(dp)

硬件像素是顯示屏能夠顯示的最小的點(diǎn),通常由紅卖子、綠略号、藍(lán)三個(gè)子像素構(gòu)成,這三個(gè)子像素組成了一個(gè)有顏色的小方點(diǎn)洋闽。通常來說玄柠,電子產(chǎn)品的分辨率規(guī)格都是硬件像素。

2.非硬件像素

當(dāng)硬件像素這個(gè)概念已經(jīng)深入人心時(shí)诫舅,隨著時(shí)間的推移羽利,電腦,手機(jī)最終都出現(xiàn)了各種各樣的分辨率刊懈,所有的設(shè)計(jì)如果再基于硬件像素铐伴,那么就會(huì)有非常大的局限性贮勃,同樣分辨率的圖片在不同分辨率的設(shè)備上顯示可能會(huì)存在較大差異续扔。于是,參照像素出現(xiàn)了踱阿,它可能等于硬件像素的n倍泽疆,不同設(shè)備上這個(gè)n可能是不同的户矢,換句話說就是以設(shè)備的尺寸作為標(biāo)準(zhǔn)來定義參照像素的。這樣一來殉疼,基于參照像素的設(shè)計(jì)在不同尺寸或者不同分辨率的設(shè)備屏幕上看起來是一樣梯浪。css中的像素單位就是參照像素中的一種

3.像素密度(ppi)

像素密度表示每英寸所擁有的像素(pixel)數(shù)目,數(shù)值越高代表屏幕能以更高的密度顯示圖像瓢娜,即圖像越精細(xì)挂洛。
ppi計(jì)算公式.png

當(dāng)我們?cè)谠O(shè)計(jì)手機(jī)的圖片素材時(shí),會(huì)遇到同一張圖片在不同尺寸或分辨率的手機(jī)上顯示大小是不同的眠砾。這是因?yàn)橥粡垐D片是固定的物理像素虏劲,而不同的設(shè)備長(zhǎng)和寬上物理像素的數(shù)目不同,從而導(dǎo)致同張圖片褒颈,在手機(jī)端的長(zhǎng)寬上占用的比例不同
不同ppi的手機(jī)圖標(biāo)顯示(顯示的是硬件像素).png
從顯示情況來看柒巫,顯然是十分奇怪的,同樣尺寸的手機(jī)谷丸,顯示的圖標(biāo)大小竟然不同堡掏。一般的解決方案是,dpr大(后面會(huì)提到)的設(shè)備下對(duì)圖片進(jìn)行放大處理刨疼,讓圖片的一個(gè)像素覆蓋多個(gè)物理像素泉唁。但是這樣的辦法不可取鹅龄,圖片上(jpg,png,gif)的一個(gè)最小單位成為位圖像素,是不可再分割的亭畜。若想一個(gè)位圖像素覆蓋多個(gè)物理像素砾层,那么就得就近取色進(jìn)行填充,勢(shì)必會(huì)產(chǎn)生模糊贱案。所以很有必要準(zhǔn)備多個(gè)分辨率的圖片,對(duì)于ppi較小的手機(jī)使用分辨率更小的圖標(biāo)止吐。

4.設(shè)備獨(dú)立像素(dips:device-independent pixels)

設(shè)備獨(dú)立像素實(shí)際上也就是非硬件像素的一種宝踪,是由操作系統(tǒng)控制的一個(gè)虛擬的像素。如在web中開發(fā)中的css像素碍扔,無(wú)論是PC端還是安卓端的瘩燥,在瀏覽器中的得到的screen.width/height都是設(shè)備獨(dú)立像素。設(shè)備獨(dú)立像素與硬件像素(設(shè)備像素)存在一定比例關(guān)系不同,這個(gè)比例關(guān)系就是上文提到的設(shè)備像素比(devicePixelRatio)厉膀。它們的關(guān)系可以用公式表示為:
設(shè)備像素比計(jì)算.png

5.如何確定設(shè)備像素比(dpr)

當(dāng)確定了設(shè)備像素比,就確定了設(shè)備獨(dú)立像素二拐。在pc端中操作系統(tǒng)和瀏覽器都能夠改變?cè)O(shè)備像素比服鹅,只不過操作系統(tǒng)改變?cè)O(shè)備像素比后應(yīng)用于全局,瀏覽器改變?cè)O(shè)備像素比應(yīng)用于瀏覽器百新,無(wú)論P(yáng)C端和手機(jī)端都會(huì)有一個(gè)默認(rèn)的合理的設(shè)備像素比的大小企软,一般情況下用戶不會(huì)做更改的。

1.PC端的設(shè)備像素比

window系統(tǒng)都可以通過改變屏幕分辨率改變?cè)O(shè)備像素比
win10改變?cè)O(shè)備像素比.png

在Chrome控制臺(tái)中饭望,查看到電腦當(dāng)前的設(shè)備像素比是1.25仗哨,即在某個(gè)方向上1.25個(gè)設(shè)備像素用1個(gè)css像素來表示
默認(rèn)設(shè)備像素比.png
如果此時(shí)進(jìn)行頁(yè)面放大為125%,設(shè)備像素比就變?yōu)?.56铅辞,此時(shí)某個(gè)方向上1.56個(gè)設(shè)備像素用1個(gè)css像素來表示
頁(yè)面放大時(shí)的設(shè)備像素比.png
將頁(yè)面縮小為80%時(shí),設(shè)備像素比就變?yōu)?.0斟珊,此時(shí)某個(gè)方向上1個(gè)設(shè)備像素用1個(gè)css像素來表示
頁(yè)面縮小時(shí)的設(shè)備像素比.png

2.手機(jī)端的設(shè)備像素比

iphone5的設(shè)備獨(dú)立像素為320x568,設(shè)備像素為640x1136

iphone5的設(shè)備像素比.png
Galaxy S5的設(shè)備獨(dú)立像素為360x640囤踩,設(shè)備像素為1080x1920
Galaxy S5.png
從上面兩個(gè)設(shè)備來看怔锌,即便分辨率相差較大变过,但是因?yàn)樵O(shè)備獨(dú)立像素的合理設(shè)置,渲染的內(nèi)容比例確是差不多的,也就是說1個(gè)css像素寬度占這兩個(gè)手機(jī)寬度的比例是差不多的阔拳。
各個(gè)手機(jī)的設(shè)備像素比參照

6.三個(gè)視口(非硬件像素)

1.布局視口(documnent.documentElement.clientWidth/clientHeight)

PC端的布局視口一般與瀏覽器可見窗口寬度一致崭孤,而手機(jī)端中布局視口卻不是一致的,其布局視口遠(yuǎn)遠(yuǎn)大于其設(shè)備獨(dú)立像素糊肠,并有可能還比設(shè)備像素大辨宠,一般在768px~1024px,這是因?yàn)镻C端瀏覽器的頁(yè)面設(shè)計(jì)寬度一般都很大货裹,為了在手機(jī)端也能較好的顯示嗤形,就將手機(jī)端的布局視口設(shè)計(jì)的較大,手機(jī)端可以通過放大縮小來觀看網(wǎng)站的全貌弧圆。但是布局視口的大小并不是理想的手機(jī)視口大小赋兵,當(dāng)網(wǎng)站是專門為手機(jī)設(shè)計(jì)時(shí),手機(jī)應(yīng)該用回屬于自己的理想視口搔预。
PC端瀏覽器放大時(shí)霹期,css像素視覺上會(huì)變大,但是其數(shù)值卻不變拯田,所以布局視口變小经伙,同理瀏覽器縮小時(shí),布局視口變大勿锅;
手機(jī)端卻不一樣帕膜,瀏覽器的放大縮小都不會(huì)改變布局視口的寬度。

2.理想視口(window.screen.height/width)

PC端與手機(jī)端的理想視口是固定的溢十,無(wú)論怎么縮放大小都不會(huì)發(fā)生變化垮刹,與設(shè)備的屏幕寬度相一致。說白了就是設(shè)備獨(dú)立像素张弛。下方的代碼能夠?qū)⑹謾C(jī)端的布局視口設(shè)置為理想視口荒典,當(dāng)我們專門為手機(jī)端設(shè)計(jì)頁(yè)面布局時(shí),都會(huì)用到吞鸭。
<meta name="viewport" content="width=device-width,initial-scale">
每一個(gè)名/值對(duì)都是一個(gè)給瀏覽器發(fā)號(hào)命令的指令刻剥。它們被逗號(hào)分隔遮咖,共有6個(gè)
1、width:設(shè)置布局視口的寬度為特定的值
2麦箍、initial-scale:設(shè)置頁(yè)面的初始縮放程度和布局視口的寬度
3暑脆、minimum-scale:設(shè)置了最小縮放程度(用戶可縮小的程度)
4、maximum-scale:設(shè)置了最大縮放程度(用戶可放大的程度)
5同窘、user-scalable:是否阻止用戶進(jìn)行縮放
6、height:設(shè)置布局視口的高度(未被實(shí)現(xiàn))

3.視覺視口(window.innerHeight/innerWidth)

等價(jià)于用戶看到的區(qū)域內(nèi)的css像素的數(shù)量奸汇。PC端的視覺視口一般等于布局視口,瀏覽器縮放時(shí),無(wú)論是手機(jī)還是PC端祟霍,大小都會(huì)發(fā)生變化呼渣。瀏覽器縮小時(shí),用戶看到的css像素多了寞埠,就是變大屁置,反之則變小。

7.css的長(zhǎng)度px仁连、em蓝角、rem、%

  px:絕對(duì)單位饭冬,css的最小單位
  em: 相對(duì)單位使鹅,繼承父節(jié)點(diǎn)字體的大小,相當(dāng)于“倍”昌抠,如果自身定義了font-size按自身來計(jì)算并徘,整個(gè)頁(yè)面內(nèi)1em不是一個(gè)固定的值
 rem: 相對(duì)單位,繼承根節(jié)點(diǎn)html字體大小扰魂,相當(dāng)于“倍”麦乞,相當(dāng)于“倍”,css3屬性劝评,整個(gè)頁(yè)面1rem是一個(gè)固定的值
   %: 相對(duì)單位姐直,不同與vw和vh(后文說),相對(duì)與什么就具體情況而定蒋畜,較復(fù)雜声畏,若對(duì)于block的高度、寬度,一般相對(duì)于父元素

8.適配眾多分辨率的電腦或手機(jī)

方案1:響應(yīng)式設(shè)計(jì)

響應(yīng)式設(shè)計(jì)就是PC和手機(jī)端公用一套dom結(jié)構(gòu)插龄,通過@media為主要手段愿棋,對(duì)不同分辨率(設(shè)備獨(dú)立像素)的設(shè)備使用不同的css樣式。

方案2:rem自適應(yīng)設(shè)計(jì)

不使用@media均牢,且以比例布局為主糠雨。只要確定了某臺(tái)設(shè)備的頁(yè)面布局,以這臺(tái)設(shè)備作為標(biāo)準(zhǔn)徘跪,其他不同分辨率甘邀、不同大小但是同比例的設(shè)備以此設(shè)備的大小做縮放。如阿里團(tuán)隊(duì)開源的一個(gè)庫(kù):flexible.js垮庐。原理是通過js控制html的根字體的大小松邪,在dom元素的寬高單位(除文本用px)都使用rem,并動(dòng)態(tài)地改變?cè)O(shè)備像素比和字體大小來實(shí)現(xiàn)不同設(shè)備的統(tǒng)一哨查。

下面是rem自適應(yīng)的一個(gè)例子
比如我們的設(shè)計(jì)稿寬是640px(css)逗抑,以寬度為640px的設(shè)備為基準(zhǔn),其html字體大小為64px寒亥,1rem=64px邮府,此時(shí)在該設(shè)備設(shè)計(jì)一塊大小為160px的div,160px=2.5rem护盈。所以通過改變html字體的大小挟纱,讓其他設(shè)備同樣使用2.5rem

設(shè)備寬度 html字體大小 html字體實(shí)際輸出 設(shè)計(jì)稿縮放大小 設(shè)計(jì)稿實(shí)際輸出
320px 32px 1rem 80px 2.5rem
360px 36px 1rem 90px 2.5rem
414px 41.4px 1rem 103.5px 2.5rem
640px 64px 1rem 160px 2.5rem

方案3:vw自適應(yīng)方案

vw羞酗、vh是基于Viewport視窗的長(zhǎng)度單位腐宋,分別是Viewport寬和高,而Viewport是指瀏覽器的可視區(qū)域檀轨,即視覺視口(window.innerHeight/innerWidth)胸竞。有如下公式:
1vw = window.innerWidth * 1%
1vh = window.innerHeigth * 1%
所以根據(jù)vw就可以對(duì)不同分辨率、dpr等不同的終端設(shè)備参萄,就能夠以原生css的方式使用vw卫枝、vh來實(shí)現(xiàn)flexible的自適應(yīng)設(shè)計(jì)。

vw讹挎、vh校赤、vmin和vmax.png


參考文章:
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掷匠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子岖圈,更是在濱河造成了極大的恐慌讹语,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幅狮,死亡現(xiàn)場(chǎng)離奇詭異募强,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)崇摄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門擎值,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逐抑,你說我怎么就攤上這事鸠儿。” “怎么了厕氨?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵进每,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我命斧,道長(zhǎng)田晚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任国葬,我火速辦了婚禮贤徒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汇四。我一直安慰自己接奈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布通孽。 她就那樣靜靜地躺著序宦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪背苦。 梳的紋絲不亂的頭發(fā)上互捌,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音行剂,去河邊找鬼秕噪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛硼讽,可吹牛的內(nèi)容都是我干的巢价。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼壤躲!你這毒婦竟也來了城菊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碉克,失蹤者是張志新(化名)和其女友劉穎凌唬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漏麦,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡客税,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撕贞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片更耻。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捏膨,靈堂內(nèi)的尸體忽然破棺而出秧均,到底是詐尸還是另有隱情,我是刑警寧澤号涯,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布目胡,位于F島的核電站,受9級(jí)特大地震影響链快,放射性物質(zhì)發(fā)生泄漏誉己。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一域蜗、第九天 我趴在偏房一處隱蔽的房頂上張望巨双。 院中可真熱鬧,春花似錦地消、人聲如沸炉峰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至戒劫,卻和暖如春半夷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迅细。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工巫橄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茵典。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓湘换,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子彩倚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容