響應(yīng)式Web設(shè)計(jì)實(shí)踐

一枣购。無處不在的Web

常見的響應(yīng)式網(wǎng)站前端工程師們一般會(huì)使用三種已有的工具:’媒介查詢‘剥汤,’流動(dòng)布局‘梧疲,’自適應(yīng)圖片’允睹;創(chuàng)建一個(gè)在不同分辨率屏幕下都能漂亮地顯示的站點(diǎn)运准。

一個(gè)成功的響應(yīng)式的設(shè)計(jì)方法其實(shí)是建立在于漸進(jìn)增強(qiáng)非常相似的原則之上的,其實(shí)缭受,響應(yīng)式設(shè)計(jì)就是打了激素的漸進(jìn)增強(qiáng)胁澳。很長一段時(shí)間以來,Web社區(qū)一直在提倡“優(yōu)雅降級(jí)”米者,一個(gè)類似于計(jì)算機(jī)網(wǎng)絡(luò)這樣的計(jì)算機(jī)領(lǐng)域借用過來的詞韭畸,其主要思想是:當(dāng)你利用新的特性(那些能力最強(qiáng)的瀏覽器支持的特性)時(shí),你要保證那些相對(duì)較老的瀏覽器也能訪問你的內(nèi)容蔓搞。漸進(jìn)增強(qiáng)從本質(zhì)上來說胰丁,就是把優(yōu)雅降級(jí)給倒過來,不像優(yōu)雅降級(jí)那樣先為最新的喂分,最強(qiáng)勁的瀏覽器開發(fā)站點(diǎn)锦庸,然后再讓功能較差的瀏覽器能使用多少就使用多少功能;相反蒲祈,漸進(jìn)增強(qiáng)會(huì)先創(chuàng)建一個(gè)基本體驗(yàn)甘萧,該基本體驗(yàn)使用具有語義的標(biāo)識(shí)和結(jié)構(gòu)定義,并側(cè)重于內(nèi)容以一種簡潔的方式來展現(xiàn)梆掸,同時(shí)這也是一種具有可用性的形式扬卷,之后再保證基本體驗(yàn)的前提下,才可以開始著手做有關(guān)顯示的布局和交互酸钦,但此時(shí)會(huì)為能力更強(qiáng)的瀏覽器創(chuàng)建更吩咐的體驗(yàn)怪得。

響應(yīng)式設(shè)計(jì)使用了同樣的思想,并會(huì)針對(duì)不同的設(shè)備提供適當(dāng)?shù)膬?nèi)容和布局卑硫,即先從一個(gè)基本的體驗(yàn)開始汇恤,然后使用流動(dòng)布局和媒介查詢這些技術(shù)來為功能更多,屏幕更大的設(shè)備增強(qiáng)使用體驗(yàn)

二拔恰。流式布局

布局選項(xiàng):

1)固定布局:在固定布局中,頁面寬度會(huì)被指定為特定大小的像素基括,其中960px是使用最為廣泛的寬度颜懊,在最近比較流行的1024分辨率 屏幕的最佳頁面寬度應(yīng)該介于974到984px之間。

固定布局是web布局中最為常見的實(shí)現(xiàn)方式风皿,因?yàn)楣潭ú季謺?huì)給人一種對(duì)頁面擁有較多控制權(quán)的錯(cuò)覺河爹,能確切地知道你的站點(diǎn)會(huì)以多寬來顯示,這使得你能創(chuàng)建出擁有大量圖形的設(shè)計(jì)桐款,而且即使在不同的屏幕上咸这,它們也能看起來相當(dāng)一致

然而,固定布局最大的問題在于魔眨,你所做的一切都是在許多假設(shè)前提之下的媳维,當(dāng)你決定站點(diǎn)應(yīng)該有多寬時(shí)酿雪,你不得不去猜測什么樣的尺寸可以照顧到大多數(shù)的訪客,而這其中又暗藏著比從表面上看起來多得多的技巧侄刽。當(dāng)瀏覽器寬度小于站點(diǎn)的固定布局的寬度時(shí)指黎,用戶就會(huì)看到丑陋的水平滾動(dòng)條

2)流動(dòng)布局

在流動(dòng)布局中,度量的單位不再是像素州丹,而是變成了百分比醋安,這樣可使頁面具有可變的特性,你可以設(shè)計(jì)一個(gè)占容器寬度百分之60的內(nèi)容欄墓毒,一個(gè)占容器寬度百分之30的邊欄吓揪,以及一個(gè)占容器寬度百分之10的分隔區(qū)域,采用這種方法定義所计,意味著你不用再去關(guān)心用戶使用的到底是1024px寬的桌面瀏覽器柠辞,還是768px寬的平板電腦瀏覽器,因?yàn)樵氐膶挾葧?huì)根據(jù)瀏覽器窗口的寬度自動(dòng)進(jìn)行調(diào)整

流動(dòng)布局的設(shè)計(jì)可以避免許多會(huì)在固定布局中遇見的問題醉箕,例如钾腺,在大多數(shù)情況下,流動(dòng)布局中都不會(huì)出現(xiàn)水平滾動(dòng)條讥裤,由于站點(diǎn)可以根據(jù)瀏覽器窗口的寬度來自動(dòng)調(diào)節(jié)自身寬度放棒,因此站點(diǎn)將可以充分利用并適應(yīng)各種大學(xué)的可用空間,從而也就避免了在使用大屏幕設(shè)備瀏覽固定布局時(shí)己英,人們所不愿見到的大片空白出現(xiàn)

同時(shí)间螟,在實(shí)施諸如媒體查詢,針對(duì)不同分辨率優(yōu)化樣式這樣的響應(yīng)式策略時(shí)损肛,流動(dòng)布局能使這些策略更容易實(shí)現(xiàn)厢破。由于沒有那么多的問題需要修復(fù),所以需要寫的css也相當(dāng)較少治拿。但是摩泪,單獨(dú)使用流動(dòng)布局這一種方法依然不足以保證所有元素在從手機(jī)到電視機(jī)等一系列設(shè)備上都能保持良好的效果。因?yàn)橛行┪谋镜男袑捲诖笃聊簧峡雌饋頃?huì)太寬劫谅,而在小屏幕上又看起來太窄见坑。

3)彈式布局

彈性布局與流動(dòng)布局類似,只是他們的度量單位不同捏检,通常情況下荞驴,在彈性布局中會(huì)以em來作為單位。1em相當(dāng)于當(dāng)前字體的大小贯城,例如熊楼,如果body的字體大小是16px,那么1em就等于16px,同理2em就是32px

彈性布局為設(shè)計(jì)師們在排版方面提供了強(qiáng)大的控制權(quán)能犯,理想的閱讀文本的行寬介于45到70的字符之間鲫骗,利用彈性布局犬耻,你可以將容器的寬度設(shè)定為55em,這樣就可以使容器維持在一個(gè)合適的寬度了

彈性布局帶來的另外一個(gè)好處是隨著用戶增大或者減小字體,使用彈性布局的元素的寬度也會(huì)等比例變化挎峦,我們會(huì)在后面討論字體大小時(shí)進(jìn)一步討論這個(gè)問題

但是香追,彈性布局中也可能出現(xiàn)令人討厭的水平滾動(dòng)條,如果你把字體大小設(shè)置為16px坦胶,并把容器寬度設(shè)置為55em透典,那么就會(huì)在任何寬度小于880px的屏幕中出現(xiàn)水平滾動(dòng)條,彈性布局中的這個(gè)問題甚至比固定布局的情況還要有更多的不確定性

4)混合布局

假設(shè)你有一個(gè)300px寬的廣告區(qū)域顿苇,你可以將防止廣告的邊欄指定為固定的300px寬峭咒,其余寬度則以百分比為單位。如果把邊欄設(shè)置為300px寬纪岁,把主要內(nèi)容欄設(shè)置為70%,那么屏幕寬度小于1000px時(shí)凑队,還是會(huì)遇到水平滾動(dòng)條的問題

問:那種布局是最具響應(yīng)性的

從根本上來說,這取決于你特定的項(xiàng)目幔翰,因?yàn)槊恳环N方法都有其優(yōu)勢和不足

大多數(shù)情況下漩氨,最佳答案是更具靈活性的哪幾種布局:流動(dòng)布局,彈性布局或者混合布局遗增。因?yàn)橄鄬?duì)固定布局叫惊,它們對(duì)未來更加友好

雖然能夠通過使用媒介查詢來在幾個(gè)固定布局之間來回切換,但這樣做仍舊存在限制做修,因?yàn)槭褂靡粋€(gè)這樣的”可切換“的固定布局霍狰,會(huì)使得你的站點(diǎn)在某幾個(gè)特定分辨率的屏幕顯得非常好,但在這幾個(gè)值之間過度的那些分辨率的屏幕中救護(hù)i顯得比較尷尬饰及,這樣一來蔗坯,用戶就會(huì)受到你的決定的支配

字體大小

字體大小就三種,像素燎含,em,還有百分比

像素:

對(duì)于初學(xué)者來言宾濒,雖然使用像素作為字體大小單位時(shí)不需要考慮級(jí)聯(lián)--父元素的字體大小對(duì)子元素沒有影響,但這也意味著當(dāng)你想讓某些文本以不同的大小顯示時(shí)就需要對(duì)它們逐一設(shè)置屏箍,這對(duì)于維護(hù)來說非常不利绘梦,因?yàn)楫?dāng)你想增大所有字體時(shí),你就不得不去逐一修改每一個(gè)值铣除,更重要是,以像素為單位的字體存在著潛在的可訪問性問題鹦付,所有主流瀏覽器都允許用戶放大或縮小頁面尚粘,瀏覽器對(duì)該操作通常有哦兩種實(shí)現(xiàn)方式。

第一種實(shí)現(xiàn)方式是簡單地將頁面上所有東西都放大敲长,頁面上其他元素則保持不變長期以來這都是常見的瀏覽器實(shí)現(xiàn)方式郎嫁,并且現(xiàn)在仍有一些瀏覽器采用這種方式實(shí)現(xiàn)縮放功能

另外一種方式是瀏覽器只調(diào)整字體大小秉继,頁面上其他元素則保持不變,長期以來這都是常見的瀏覽器實(shí)現(xiàn)方式泽铛,并且現(xiàn)在仍有一些瀏覽器采用這種方式實(shí)現(xiàn)縮放功能

用像素制定字體大小依然不是一種對(duì)未來特別友好的方式尚辑,由于不同的設(shè)備有著不同的屏幕大小和像素密度,因此以像素為單位的字體也許在這臺(tái)設(shè)備上 看起來不錯(cuò)盔腔,但在另一臺(tái)設(shè)備上看起來也許就會(huì)要么太大杠茬,要么太小,使用像素作為字體大小的單位弛随,是與web的靈活性原則背道而馳的做法

em

使用em作為字體大小的單位是一種更加流行瓢喉,更具靈活性的方法,1em等于默認(rèn)的字體大小舀透,如果內(nèi)容字體大小是16px,那么1em=16px栓票;

em也是可以跨瀏覽器進(jìn)行縮放的,而且他們也是級(jí)聯(lián)的愕够,從簡化維護(hù)的角度來看這是好事走贪,因?yàn)檫@樣相對(duì)地制定元素的字體大小,意味著你只需要調(diào)整初始化時(shí)的基準(zhǔn)惑芭,其余部分就會(huì)自動(dòng)地調(diào)整坠狡,而且是按照比例調(diào)整的。

百分比

和以em為單位的字體一樣强衡,以百分比為單位的字體也是可縮放的擦秽,而且也是級(jí)聯(lián)的,與em類似的是漩勤,如果基準(zhǔn)字體大小是16px的話感挥,那么100%相當(dāng)于16px,200%就是32px

雖然從理論上講,百分比和em沒有太大的區(qū)別越败,而且em逐漸成為了web中更受歡迎的字體度量單位触幼,但其實(shí)這其中并沒有什么技術(shù)上的原因。只有當(dāng)出于em直接與文本大小相關(guān)的考慮時(shí)究飞,使用em才更有意義置谦。然而以em為單位的基準(zhǔn)字體時(shí)忽悠問題,ie會(huì)夸大實(shí)際應(yīng)當(dāng)調(diào)整的字體大小亿傅,假設(shè)基準(zhǔn)字體設(shè)置為1em媒峡,并且將h1設(shè)置為2em,其他瀏覽器沒有什么問題葵擎,在ie中會(huì)變得更大谅阿,解決這個(gè)問題,就可以使用百分比來繞過這個(gè)問題

rem:

rem與em的區(qū)別在于,rem大小與根元素--html元素有關(guān)签餐,使用rem可以避免發(fā)生在嵌套中的級(jí)聯(lián)問題寓涨。,但對(duì)于rem,,僅僅支持ie9以上的氯檐。

那種單位是最具相應(yīng)性的

使用em不但可以使文字能夠縮放戒良,而且維護(hù)起來也更加容易,如果你要將整個(gè)站點(diǎn)的字體都增大冠摄,那么只需簡單地修改body上字體的百分比即可糯崎,如果使用rem,由于需要有像素聲明作為補(bǔ)充,所以你還要更新所有的像素值耗拓。一般都以百分比作為body元素字體大小的單位拇颅,而以em來作為其他元素的單位

2.3網(wǎng)格布局====

結(jié)束語:

大多數(shù)情況下,流動(dòng)布局(以百分比為單位乔询,因而可以根據(jù)屏幕大小來調(diào)整自身的布局)是你設(shè)計(jì)站點(diǎn)時(shí)的最佳選擇樟插,當(dāng)寬度被字體大小啊限制時(shí),你可以使用彈性布局竿刁;當(dāng)寬度被百分比限制時(shí)黄锤,你可以使用流動(dòng)布局。

采用更加靈活的方式來制定文字大小可以使維護(hù)工作變得更加容易食拜,同時(shí)這樣做也提升了站點(diǎn)的可訪問性鸵熟,為了達(dá)到這個(gè)目標(biāo),我們就要堅(jiān)持使用百分比和em负甸。

通過使用css表格流强,你可以很容易地將固定寬度與流動(dòng)寬度結(jié)合使用,現(xiàn)代瀏覽器對(duì)此特性有著極為出色的支持呻待,而且你還可以使用條件注釋來為ie7及以下版本的ie瀏覽器提供備用樣式


三打月。媒介查詢

通過視口元標(biāo)簽,我們可以控制頁面在很多設(shè)備上的大小和布局視口

視口標(biāo)簽的形式非常簡單蚕捉,只需要指定使用的視口元標(biāo)簽奏篙,需要放在head標(biāo)簽中

<meta name="viewport" content="directive,directive"/>

屬性介紹:

1.width:聲明可以讓你將視口設(shè)置為某一特定的寬度,或設(shè)置為設(shè)備屏幕的寬度.<meta name="viewport" content="width=device-width"/>

在width聲明中使用device-width是最佳的選擇迫淹,因?yàn)樵O(shè)置之后秘通,頁面在屏幕上的布局視口將等于設(shè)備的屏幕寬度--設(shè)備像素

2.height:允許你指定一個(gè)特定的高度<meta name="viewport" content="height=device-height"/>,布局視口的高度等于屏幕的高度,一般不會(huì)用到height敛熬,因?yàn)閔eight唯一讓人覺得有用的時(shí)候肺稀,是在你不想讓頁面垂直滾動(dòng)的時(shí)候。

3.user-scalable,聲明瀏覽器应民,是否允許用戶在頁面上進(jìn)行縮放<meta name="viewport" content="user-scalable=no"/>,默認(rèn)值是yes.為什么會(huì)設(shè)置因?yàn)閕os方向漏洞话原,如果你把視口設(shè)置為任意大小并且允許用戶縮放頁面的話炸茧,那么當(dāng)你將設(shè)備橫屏之后,頁面會(huì)自動(dòng)變大稿静,這會(huì)迫使用戶不得不點(diǎn)擊屏幕兩次來使頁面得到正確的縮放,從而避免頁面被剪裁辕狰,如果禁用了縮放改备,這問題就不存在了,在ios6之后這個(gè)問題就修復(fù)了蔓倍。

4.initial-scale,可以通過給initial-scale賦值為0.1(10%)到10.0(1000%)之間的某個(gè)數(shù)來設(shè)置頁面初始化時(shí)的縮放層級(jí)悬钳,正常我們設(shè)置為百分比縮放<meta name="viewport" content="initial-scale=1,width=device-width"/>

5.maximum-scale聲明可以告訴瀏覽器允許用戶放大頁面到什么程度,在移動(dòng)端的safari,其默認(rèn)值是1.6偶翅,數(shù)值也是在0.1到10.0之間默勾,如果你設(shè)置為1.0,那么你同樣禁用了用戶縮放頁面,這樣做也同樣會(huì)降低站點(diǎn)的可訪問性聚谁。

6.minimum-scale聲明會(huì)告知瀏覽器允許用戶將頁面縮小到什么程度母剥,在移動(dòng)端safari,其默認(rèn)值是0.25.,如果值設(shè)置為1.0形导,也同意運(yùn)行禁止用戶縮小頁面环疼。

修復(fù)視口問題,事實(shí)證明視口元表情實(shí)際上不規(guī)范的朵耕,通過看W3C的文檔炫隶,提供了@viewport規(guī)則,css設(shè)備適配阎曹,@viewport規(guī)則可以讓你在css中直接使用視口元標(biāo)簽

@viewport{width:device-width;},但是該語法僅僅支持opera和ie10

媒介查詢:四個(gè)基本組成部分:媒介類型伪阶,媒介表達(dá)式,邏輯關(guān)鍵詞处嫌,規(guī)則

媒介表達(dá)式:@media screen and (min-width:32px){}????

媒體查詢設(shè)計(jì)從桌面端向下設(shè)計(jì)栅贴,從移動(dòng)端向上設(shè)計(jì)

使用em為媒介查詢增加靈活性,在以em作為單位之后锰霜,即使站點(diǎn)被放大了筹误,媒介查詢能夠生效,并保證布局仍舊是優(yōu)化過的

響應(yīng)式多媒體

有選擇的為手機(jī)提供圖片

自定義數(shù)據(jù)屬性:專門為頁面存儲(chǔ)自定義數(shù)據(jù)并具有data-前綴的屬性癣缅,通常出于腳本編程的目的而設(shè)置

響應(yīng)式圖片的實(shí)現(xiàn)方法:Sencha.io Src是最近似于即插即用型的響應(yīng)式圖片的解決方案厨剪,它以你的圖片作為輸入,并返回縮放后的圖片友存,你只需要在你的圖片資源前面加上Sencha.io Src的鏈接即可祷膳,會(huì)使用發(fā)起請求的設(shè)備的用戶代理字符串來計(jì)算出設(shè)備屏幕的大小,然后根據(jù)該數(shù)值來縮放圖片屡立。默認(rèn)情況下直晨,它會(huì)將圖片縮放到設(shè)備寬度的100%。。

優(yōu)勢是:會(huì)緩存請求勇皇,這樣便不用在每次加載頁面時(shí)都要生成一次圖片罩句。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市敛摘,隨后出現(xiàn)的幾起案子门烂,更是在濱河造成了極大的恐慌,老刑警劉巖兄淫,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屯远,死亡現(xiàn)場離奇詭異摧找,居然都是意外死亡鞭执,警方通過查閱死者的電腦和手機(jī)戳晌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門碌宴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堡牡,“玉大人粥烁,你說我怎么就攤上這事栋豫÷仍幔” “怎么了晌端?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵崩溪,是天一觀的道長。 經(jīng)常有香客問我斩松,道長伶唯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任惧盹,我火速辦了婚禮乳幸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钧椰。我一直安慰自己粹断,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布嫡霞。 她就那樣靜靜地躺著瓶埋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诊沪。 梳的紋絲不亂的頭發(fā)上养筒,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音端姚,去河邊找鬼晕粪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渐裸,可吹牛的內(nèi)容都是我干的巫湘。 我是一名探鬼主播装悲,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尚氛!你這毒婦竟也來了诀诊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤阅嘶,失蹤者是張志新(化名)和其女友劉穎畏梆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈懒,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年宪巨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磷杏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捏卓,死狀恐怖极祸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怠晴,我是刑警寧澤遥金,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蒜田,受9級(jí)特大地震影響稿械,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冲粤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一美莫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梯捕,春花似錦厢呵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至短曾,卻和暖如春寒砖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫉拐。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國打工入撒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人椭岩。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓茅逮,卻偏偏與公主長得像璃赡,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子献雅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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