固定寬度布局開(kāi)發(fā)WebApp如何實(shí)現(xiàn)多終端下自適應(yīng)?

大家好幻工,我是IT修真院深圳分院第01期學(xué)員励两,一枚正直純潔善良的web程序員。

今天給大家分享一下囊颅,修真院官網(wǎng)CSS任務(wù)13当悔,深度思考中的知識(shí)點(diǎn)——固定寬度布局開(kāi)發(fā)WebApp如何實(shí)現(xiàn)多終端下自適應(yīng)?

一踢代、背景介紹

現(xiàn)在人通過(guò)手機(jī)瀏覽網(wǎng)頁(yè)占了大多數(shù)盲憎,隨著瀏覽方式的改變,網(wǎng)頁(yè)在webapp下面實(shí)現(xiàn)多終端自適應(yīng)胳挎,無(wú)論對(duì)于避免工程師無(wú)謂的重復(fù)勞動(dòng)或者是項(xiàng)目管理的便捷性上來(lái)說(shuō)重要性都是十分巨大的饼疙。

然而在移動(dòng)設(shè)備上進(jìn)行網(wǎng)頁(yè)的重構(gòu)或開(kāi)發(fā),首先得搞明白的就是移動(dòng)設(shè)備上的viewport了慕爬,只有明白了viewport的概念以及弄清楚了跟viewport有關(guān)的meta標(biāo)簽的使用窑眯,才能更好地讓我們的網(wǎng)頁(yè)適配或響應(yīng)各種不同分辨率的移動(dòng)設(shè)備屏积。

自適應(yīng)和響應(yīng)式的區(qū)別?

其實(shí)RWD和AWD都是響應(yīng)式設(shè)計(jì)磅甩,從外觀(guān)上很難分辨肾请,但他們自己運(yùn)行機(jī)理不同,RWD是主動(dòng)式的響應(yīng)設(shè)計(jì)更胖,AWD是被動(dòng)式的響應(yīng)式設(shè)計(jì),RWD不管用戶(hù)使用的是什么設(shè)備都是在服務(wù)器把數(shù)據(jù)推送到瀏覽器后隔显,腳本或CSS自行偵測(cè)屏幕大小后執(zhí)行對(duì)應(yīng)的樣式表內(nèi)容却妨,并且一直通過(guò)本地腳本在監(jiān)聽(tīng)屏幕大小的變化,隨時(shí)做出樣式響應(yīng)的變化括眠,所以是主動(dòng)的彪标。但AWD是用戶(hù)通過(guò)瀏覽器發(fā)送請(qǐng)求后,服務(wù)器根據(jù)請(qǐng)求中夾帶的用戶(hù)設(shè)備設(shè)備信息做出判斷掷豺,調(diào)用已經(jīng)在服務(wù)器里準(zhǔn)備好的捞烟,適應(yīng)對(duì)應(yīng)設(shè)備樣式文件+HTML內(nèi)容+JS,返回給瀏覽器以這種方式響應(yīng)不同設(shè)備当船。

二题画、知識(shí)剖析

2.1.Viewport的概念

1).通俗的講,移動(dòng)設(shè)備上的viewport就是設(shè)備的屏幕上能用來(lái)顯示我們的網(wǎng)頁(yè)的那一塊區(qū)域德频。

2).在具體一點(diǎn)苍息,就是瀏覽器上(也可能是一個(gè)app中的webview)用來(lái)顯示網(wǎng)頁(yè)的那部分區(qū)域,但viewport又不局限于瀏覽器可視區(qū)域的大小壹置,它可能比瀏覽器的可視區(qū)域要大竞思,也可能比瀏覽器的可視區(qū)域要小。

3).在默認(rèn)情況下钞护,一般來(lái)講盖喷,移動(dòng)設(shè)備上的viewport都是要大于瀏覽器可視區(qū)域的,這是因?yàn)榭紤]到移動(dòng)設(shè)備的分辨率相對(duì)于桌面電腦來(lái)說(shuō)都比較小难咕,所以為了能在移動(dòng)設(shè)備上正常顯示那些傳統(tǒng)的為桌面瀏覽器設(shè)計(jì)的網(wǎng)站课梳。

移動(dòng)設(shè)備上的瀏覽器都會(huì)把自己默認(rèn)的viewport設(shè)為980px或1024px(也可能是其它值,這個(gè)是由設(shè)備自己決定的)余佃,但帶來(lái)的后果就是瀏覽器會(huì)出現(xiàn)橫向滾動(dòng)條惦界,因?yàn)闉g覽器可視區(qū)域的寬度是比這個(gè)默認(rèn)的viewport的寬度要小的。

這里有一張瀏覽器的默認(rèn)viewport寬度值的表咙冗,可以看下沾歪。

2.2.移動(dòng)設(shè)備哪些因素會(huì)引起css中px的變化?

在css中我們一般使用px作為單位雾消,在桌面瀏覽器中css的1個(gè)像素往往都是對(duì)應(yīng)著電腦屏幕的1個(gè)物理像素灾搏。但實(shí)際情況卻并非如此挫望,css中的像素只是一個(gè)抽象的單位,在不同的設(shè)備或不同的環(huán)境中狂窑,css中的1px所代表的設(shè)備物理像素是不同的媳板。

1)從iphone4開(kāi)始,蘋(píng)果公司便推出了所謂的Retina屏泉哈,分辨率提高了一倍蛉幸,變成640x960,但屏幕尺寸卻沒(méi)變化丛晦,這就意味著同樣大小的屏幕上奕纫,像素卻多了一倍,這時(shí)烫沙,一個(gè)css像素是等于兩個(gè)物理像素的(意思就是你分辨率越大匹层,css中1px代表的物理像素就會(huì)越多)。

2)用戶(hù)對(duì)設(shè)備界面的縮放锌蓄,例如升筏,當(dāng)用戶(hù)把頁(yè)面放大一倍,那么css中1px所代表的物理像素也會(huì)增加一倍瘸爽;反之把頁(yè)面縮小一倍您访,css中1px所代表的物理像素也會(huì)減少一倍。

2.3.devicePixelRatio屬性

1)它的官方的定義為:設(shè)備物理像素和設(shè)備獨(dú)立像素的比例剪决,也就是devicePixelRatio =物理像素/獨(dú)立像素洋只。

理解:css中的px可以看做是設(shè)備的獨(dú)立像素,所以知道devicePixelRatio昼捍,我們可以知道該設(shè)備上一個(gè)css像素代表多少個(gè)物理像素识虚。

舉個(gè)栗子:在Retina屏的iphone上,devicePixelRatio的值為2妒茬,也就是說(shuō)1個(gè)css像素相當(dāng)于2個(gè)物理像素担锤。

2.4.ideal viewport——完美適配移動(dòng)設(shè)備的理想viewport。

所謂的完美適配(通常意義下乍钻,攻城獅口中的自適應(yīng))指的是:

1)不需要用戶(hù)縮放和橫向滾動(dòng)條就能正常的查看網(wǎng)站的所有內(nèi)容肛循;

2)顯示的文字的大小是合適,比如一段14px大小的文字银择,不會(huì)因?yàn)樵谝粋€(gè)高密度像素的屏幕里顯示得太小而無(wú)法看清多糠,理想的情況是這段14px的文字無(wú)論是在何種密度屏幕,何種分辨率下浩考,顯示出來(lái)的大小都是差不多的夹孔。

三、常見(jiàn)問(wèn)題

在進(jìn)行移動(dòng)設(shè)備網(wǎng)站的開(kāi)發(fā)時(shí),如何控制ideal viewport呢搭伤?

四只怎、解決方案

我們?cè)陂_(kāi)發(fā)移動(dòng)設(shè)備的網(wǎng)站時(shí),最常見(jiàn)的的一個(gè)動(dòng)作就是把下面這個(gè)東西復(fù)制到我們的head標(biāo)簽中:

<meta name="viewport"content="width=device-width,initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

name="viewport" content="width=device-width"———把當(dāng)前的viewport寬度設(shè)置為ideal viewport的寬度怜俐。

width=device-width ——設(shè)置layout viewport的寬度身堡,為一個(gè)正整數(shù),或字符串"width-device"

initial-scale ——設(shè)置頁(yè)面的初始縮放值拍鲤,為一個(gè)數(shù)字贴谎,可以帶小數(shù)

minimum-scale ——允許用戶(hù)的最小縮放值,為一個(gè)數(shù)字季稳,可以帶小數(shù)

maximum-scale ——允許用戶(hù)的最大縮放值擅这,為一個(gè)數(shù)字,可以帶小數(shù)

user-scalable ——是否允許用戶(hù)進(jìn)行縮放绞幌,值為"no"或"yes", no代表不允許,yes代表允許

target-densitydpi: 值可以為一個(gè)數(shù)值或high-dpi一忱、medium-dpi莲蜘、low-dpi、device-dpi這幾個(gè)字符串中的一個(gè)

注意:當(dāng)target-densitydpi=device-dpi時(shí)帘营,css中的1px會(huì)等于物理像素中的1px票渠。

5.編碼實(shí)戰(zhàn)

詳見(jiàn)視頻


固定寬度布局開(kāi)發(fā)WebApp如何實(shí)現(xiàn)多終端下自適應(yīng)_騰訊視頻

六、拓展思考

6.1.關(guān)于縮放

這里指的縮放芬迄,是相對(duì)于ideal viewport來(lái)縮放的问顷,縮放值越大,當(dāng)前viewport的寬度就會(huì)越小禀梳,反之亦然杜窄。

舉個(gè)栗子:在iphone中,ideal viewport的寬度是320px算途,如果我們?cè)O(shè)置initial-scale=2塞耕,此時(shí)viewport的寬度會(huì)變?yōu)橹挥?60px了

理解:就是原來(lái)1px的東西變成2px了,但是1px變?yōu)?px并不是把原來(lái)的320px變?yōu)?40px了嘴瓤,而是在實(shí)際寬度不變的情況下扫外,1px變得跟原來(lái)的2px的長(zhǎng)度一樣了,所以放大2倍后原來(lái)需要320px才能填滿(mǎn)的寬度現(xiàn)在只需要160px就做到了廓脆。因此筛谚,我們可以得出一個(gè)公式:

visual viewport寬度= ideal viewport寬度/當(dāng)前縮放值;

當(dāng)前縮放值= ideal viewport寬度/ visual viewport寬度

6.2.initial-scale的默認(rèn)值是多少停忿?

initial-scale的默認(rèn)值很顯然不會(huì)是1驾讲,因?yàn)楫?dāng)initial-scale = 1時(shí),當(dāng)前的layout viewport寬度會(huì)被設(shè)為ideal viewport的寬度,但前面說(shuō)了蝎毡,各瀏覽器默認(rèn)的layout viewport寬度一般都是980啊厚柳,1024啊,800啊等等這些個(gè)值沐兵,沒(méi)有一開(kāi)始就是ideal viewport的寬度的别垮。

安卓設(shè)備上的initial-scale默認(rèn)值:如果沒(méi)有設(shè)置的話(huà),就沒(méi)有扎谎,一定要設(shè)置碳想,這個(gè)屬性才會(huì)起作用。

iphone和ipad上的initial-scale默認(rèn)值:

測(cè)試:在iphone上毁靶,我們不設(shè)置任何的viewport meta標(biāo)簽胧奔,此時(shí)layout viewport的寬度為980px,但我們可以看到瀏覽器并沒(méi)有出現(xiàn)橫向滾動(dòng)條预吆,瀏覽器默認(rèn)的把頁(yè)面縮小了龙填。根據(jù)上面的公式,當(dāng)前縮放值= ideal viewport寬度/ visual viewport寬度拐叉,我們可以得出:
當(dāng)前縮放值= 320 / 980岩遗,也就是當(dāng)前的initial-scale默認(rèn)值是0.33這樣子。

6.3.總結(jié)得到縮放值的公式:

當(dāng)前縮放值= ideal viewport寬度/ visual viewport寬度

//visual viewport寬度指的是瀏覽器可視區(qū)域的寬度凤瘦。

//ideal viewport寬度指的是完美適配移動(dòng)設(shè)備的寬度

提示:如果不設(shè)置meta viewport標(biāo)簽宿礁,移動(dòng)設(shè)備上瀏覽器默認(rèn)的寬度值為800px,980px蔬芥,1024px等這些梆靖,總之是大于屏幕寬度的(意思就是說(shuō),會(huì)不自適應(yīng)手機(jī)端的頁(yè)面)

七笔诵、參考文獻(xiàn)

參考一:移動(dòng)前端開(kāi)發(fā)之viewport的深入理解

參考二:Responsive design 和 Adaptive design 的區(qū)別返吻?

八、更多討論

1.自適應(yīng)和響應(yīng)式各有什么優(yōu)劣乎婿?

2.網(wǎng)頁(yè)自適應(yīng)設(shè)計(jì)常見(jiàn)問(wèn)題有哪些思喊?

3.有哪些常見(jiàn)的布局方式?

感謝大家觀(guān)看

今天的分享就到這里啦次酌,歡迎大家點(diǎn)贊恨课、轉(zhuǎn)發(fā)、留言岳服、拍磚~

PPT鏈接

視頻鏈接

你可以直接點(diǎn)擊此鏈接與我一起學(xué)習(xí):邀請(qǐng)碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剂公,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吊宋,更是在濱河造成了極大的恐慌纲辽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拖吼,居然都是意外死亡鳞上,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)吊档,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)篙议,“玉大人,你說(shuō)我怎么就攤上這事怠硼」砑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵香璃,是天一觀(guān)的道長(zhǎng)这难。 經(jīng)常有香客問(wèn)我,道長(zhǎng)葡秒,這世上最難降的妖魔是什么姻乓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮眯牧,結(jié)果婚禮上蹋岩,老公的妹妹穿的比我還像新娘。我一直安慰自己炸站,他們只是感情好星澳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布疚顷。 她就那樣靜靜地躺著旱易,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腿堤。 梳的紋絲不亂的頭發(fā)上阀坏,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音笆檀,去河邊找鬼忌堂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酗洒,可吹牛的內(nèi)容都是我干的士修。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼樱衷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棋嘲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起矩桂,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沸移,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體雹锣,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡网沾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蕊爵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辉哥。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖在辆,靈堂內(nèi)的尸體忽然破棺而出证薇,到底是詐尸還是另有隱情,我是刑警寧澤匆篓,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布浑度,位于F島的核電站,受9級(jí)特大地震影響鸦概,放射性物質(zhì)發(fā)生泄漏箩张。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一窗市、第九天 我趴在偏房一處隱蔽的房頂上張望先慷。 院中可真熱鬧,春花似錦咨察、人聲如沸论熙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脓诡。三九已至,卻和暖如春媒役,著一層夾襖步出監(jiān)牢的瞬間祝谚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工酣衷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留交惯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓穿仪,卻偏偏與公主長(zhǎng)得像席爽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子啊片,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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