?隨著3G的普及,越來越多的人使用手機(jī)上網(wǎng)
移動(dòng)設(shè)備正超過桌面設(shè)備,成為訪問互聯(lián)網(wǎng)的最常見終端
于是,網(wǎng)頁設(shè)計(jì)師不得不面對(duì)一個(gè)難題
如何才能在不同大小的設(shè)備上呈現(xiàn)同樣的網(wǎng)頁?自適應(yīng)網(wǎng)頁設(shè)計(jì)(Responsive WEB Design) 瀏覽器 設(shè)計(jì)師 好文分享 第1張手機(jī)的屏幕比較小,寬度通常在600像素以下;PC的屏幕寬度,一般都在1000像素以上(目前主流寬度是1366×768),有的還達(dá)到了2000像素
同樣的內(nèi)容,要在大小迥異的屏幕上,都呈現(xiàn)出滿意的效果,并不是一件容易的事
很多網(wǎng)站的解決方法,是為不同的設(shè)備提供不同的網(wǎng)頁,比如專門提供一個(gè)mobile版本,或者iPhone / iPad版本
這樣做固然保證了效果,但是比較麻煩,同時(shí)要維護(hù)好幾個(gè)版本,而且如果一個(gè)網(wǎng)站有多個(gè)portal(入口),會(huì)大大增加架構(gòu)設(shè)計(jì)的復(fù)雜度
于是,很早就有人設(shè)想,能不能"一次設(shè)計(jì),普遍適用",讓同一張網(wǎng)頁自動(dòng)適應(yīng)不同大小的屏幕,根據(jù)屏幕寬度,自動(dòng)調(diào)整布局(layout)?自適應(yīng)網(wǎng)頁設(shè)計(jì)(Responsive Web Design) 瀏覽器 設(shè)計(jì)師 好文分享 第2張一、"自適應(yīng)網(wǎng)頁設(shè)計(jì)"的概念2010年,Ethan Marcotte提出了"自適應(yīng)網(wǎng)頁設(shè)計(jì)"(Responsive Web Design)這個(gè)名詞,指可以自動(dòng)識(shí)別屏幕寬度、并做出相應(yīng)調(diào)整的網(wǎng)頁設(shè)計(jì)
他制作了一個(gè)范例,里面是《福爾摩斯歷險(xiǎn)記》六個(gè)主人公的頭像
如果屏幕寬度大于1300像素,則6張圖片并排在一行
自適應(yīng)網(wǎng)頁設(shè)計(jì)(Responsive Web Design) 瀏覽器 設(shè)計(jì)師 好文分享 第3張如果屏幕寬度在600像素到1300像素之間,則6張圖片分成兩行
自適應(yīng)網(wǎng)頁設(shè)計(jì)(Responsive Web Design) 瀏覽器 設(shè)計(jì)師 好文分享 第4張如果屏幕寬度在400像素到600像素之間,則導(dǎo)航欄移到網(wǎng)頁頭部
自適應(yīng)網(wǎng)頁設(shè)計(jì)(Responsive Web Design) 瀏覽器 設(shè)計(jì)師 好文分享 第5張如果屏幕寬度在400像素以下,則6張圖片分成三行
自適應(yīng)網(wǎng)頁設(shè)計(jì)(Responsive Web Design) 瀏覽器 設(shè)計(jì)師 好文分享 第6張mediaqueri.es上面有更多這樣的例子
這里還有一個(gè)測試小工具,可以在一張網(wǎng)頁上,同時(shí)顯示不同分辨率屏幕的測試效果,我推薦安裝
二、允許網(wǎng)頁寬度自動(dòng)調(diào)整"自適應(yīng)網(wǎng)頁設(shè)計(jì)"到底是怎么做到的?其實(shí)并不難
首先,在網(wǎng)頁代碼的頭部,加入一行viewport元標(biāo)簽
viewport是網(wǎng)頁默認(rèn)的寬度和高度,上面這行代碼的意思是,網(wǎng)頁寬度默認(rèn)等于屏幕寬度(width=device-width),原始縮放比例(initial-scale=1)為1.0,即網(wǎng)頁初始大小占屏幕面積的100%
所有主流瀏覽器都支持這個(gè)設(shè)置,包括IE9
對(duì)于那些老式瀏覽器(主要是IE6、7、8),需要使用css3-mediaqueries.js
三、不使用絕對(duì)寬度由于網(wǎng)頁會(huì)根據(jù)屏幕寬度調(diào)整布局,所以不能使用絕對(duì)寬度的布局,也不能使用具有絕對(duì)寬度的元素
這一條非常重要
具體說,CSS代碼不能指定像素寬度
width:xxx px;只能指定百分比寬度:width: xx%;或者width:auto;四、相對(duì)大小的字體字體也不能使用絕對(duì)大小(px),而只能使用相對(duì)大小(em)
body {font
normal 100% Helvetica, Arial, sans-serif;}上面的代碼指定,字體大小是頁面默認(rèn)大小的100%,即16像素
h1 {font-size
1.5em;}然后,h1的大小是默認(rèn)大小的1.5倍,即24像素(24/16=1.5)
small {font-size
0.875em;}small元素的大小是默認(rèn)大小的0.875倍,即14像素(14/16=0.875)
五、流動(dòng)布局(fluid grid)"流動(dòng)布局"的含義是,各個(gè)區(qū)塊的位置都是浮動(dòng)的,不是固定不變的
.main {float
right;width: 70%;}.leftBar {float: left;width: 25%;}float的好處是,如果寬度太小,放不下兩個(gè)元素,后面的元素會(huì)自動(dòng)滾動(dòng)到前面元素的下方,不會(huì)在水平方向overflow(溢出),避免了水平滾動(dòng)條的出現(xiàn)
另外,絕對(duì)定位(POSition
absolute)的使用,也要非常小心
六、選擇加載CSS"自適應(yīng)網(wǎng)頁設(shè)計(jì)"的核心,就是CSS3引入的Media Query模塊
它的意思就是,自動(dòng)探測屏幕寬度,然后加載相應(yīng)的CSS文件
上面的代碼意思是,如果屏幕寬度小于400像素(max-device-width: 400px),就加載tinyScreen.css文件
如果屏幕寬度在400像素到600像素之間,則加載smallScreen.css文件
除了用html標(biāo)簽加載CSS文件,還可以在現(xiàn)有CSS文件中加載
@import url("tinyScreen.css") screen and (max-device-width
400px);七、CSS的@media規(guī)則同一個(gè)CSS文件中,也可以根據(jù)不同的屏幕分辨率,選擇應(yīng)用不同的CSS規(guī)則
@media screen and (max-device-width
400px) {.column {float: none;width:auto;}#sidebar {display:none;}}上面的代碼意思是,如果屏幕寬度小于400像素,則column塊取消浮動(dòng)(float:none)、寬度自動(dòng)調(diào)節(jié)(width:auto),sidebar塊不顯示(display:none)
八、圖片的自適應(yīng)(fluid image)除了布局和文本,"自適應(yīng)網(wǎng)頁設(shè)計(jì)"還必須實(shí)現(xiàn)圖片的自動(dòng)縮放
這只要一行CSS代碼
img { max-width: 100%;}這行代碼對(duì)于大多數(shù)嵌入網(wǎng)頁的視頻也有效,所以可以寫成:img, object { max-width: 100%;}老版本的IE不支持max-width,所以只好寫成:img { width: 100%; }此外,windows平臺(tái)縮放圖片時(shí),可能出現(xiàn)圖像失真現(xiàn)象
這時(shí),可以嘗試使用IE的專有命令
img { -ms-interpolation-mode: bicubic; }或者,Ethan Marcotte的imgSizer.js
addLoadEvent(function() {var imgs = document.getElementById("content").getElementsByTagName("img");imgSizer.collate(imgs);});不過,有條件的話,最好還是根據(jù)不同大小的屏幕,加載不同分辨率的圖片
有很多方法可以做到這一條,服務(wù)器端和客戶端都可以實(shí)現(xiàn)
(完)文章來源
阮一峰的博客來源:盧松松博客
請(qǐng)立即點(diǎn)擊咨詢我們或撥打咨詢熱線: 18942620423,我們會(huì)詳細(xì)為你一一解答你心中的疑難。項(xiàng)目經(jīng)理在線