隨著越來越多不同解析度和大小的顯示器終端出現在市場上,原先用一個板式的web頁面設計和佈局來應對所有裝置的做法遇到了越來越多的問題,針對寬屏裝置開發的頁面在手機或者pad上佈局會產生各種錯位或者Bug,大幅度降低了使用者體驗。
響應式佈局就是為了應對這樣的情況而出現的一種設計方式,其核心理念是在不同的裝置寬度上應用不同的樣式和設計。Responsive web design(RWD):的基本設計思路是:
1、採用 CSS 的 media query 技術
2、流體佈局( fluid grids )
3、自適應的圖片/視訊等資源素材
此外,記得帶上常常使用的標籤:
<link type=”text/css” rel=”stylesheet” href=”css/normalize.css”>
<meta name=”viewport” content=”width=device-width,height=device-height,initial-scale=1.0″>
<meta http-equiv=X-UA-Compatible content=”IE=edge”>
1、基於多大的模板?
目前的web開發一般基於pc端,顯示器的尺寸一般在13寸以上,因此模板的大小往往超過1200px,而蘋果手機的顯示器寬度在320px,為了適應這種寬度的變化,網頁在設計時必須考慮到寬度在320px-1200px時網頁排版有可能發生的各種變化。
在有專門的設計師或者美工時,可以根據他的設計圖來進行不同頁面的開發,比如根據1200px寬度、800px和320px寬度下的設計圖進行頁面開發。
2、對頁面的不同部分進行修改?
可以將頁面分為頭部、主體和頁尾三個部分,每個部分對解析度的變化的反應程度可以有所不同,比如頭部可以在320 480 800時分別擁有不同的佈局,而主體在600和1000時分別有各自的佈局,這是沒有問題的。
3、解析度單位
前端在開發的時候常常要和三種畫素單位打交道,rem em和px。下面來介紹一下三種解析度的不同:
PX
px畫素(Pixel)。相對長度單位。畫素px是相對於顯示器螢幕解析度而言的。
PX特點
1. IE無法調整那些使用px作為單位的字型大小;
2. 國外的大部分網站能夠調整的原因在於其使用了em或rem作為字型單位;
3. Firefox能夠調整px和em,rem,但是96%以上的中國網民使用IE瀏覽器(或核心)。
EM
em是相對長度單位。相對於當前物件內文字的字型尺寸。如當前對行內文字的字型尺寸未被人為設定,則相對於瀏覽器的預設字型尺寸。
EM特點
1. em的值並不是固定的;
2. em會繼承父級元素的字型大小。
注意:任意瀏覽器的預設字型高都是16px。所有未經調整的瀏覽器都符合: 1em=16px。那麼12px=0.75em,10px=0.625em。為了簡化font-size的換算,需要在css中的body選擇器中宣告Font-size=62.5%,這就使em值變為 16px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說只需要將你的原來的px數值除以10,然後換上em作為單位就行了。
所以我們在寫CSS的時候,需要注意兩點:
1. body選擇器中宣告Font-size=62.5%;
2. 將你的原來的px數值除以10,然後換上em作為單位;
3. 重新計算那些被放大的字型的em數值。避免字型大小的重複宣告。
也就是避免1.2 * 1.2= 1.44的現象。比如說你在#content中宣告瞭字型大小為1.2em,那麼在宣告p的字型大小時就只能是1em,而不是1.2em, 因為此em非彼em,它因繼承#content的字型高而變為了1em=12px。
REM
rem是CSS3新增的一個相對單位(root em,根em),這個單位引起了廣泛關注。這個單位與em有什麼區別呢?區別在於使用rem為元素設定字型大小時,仍然是相對大小,但相對的只是HTML根元素。這個單位可謂集相對大小和絕對大小的優點於一身,通過它既可以做到只修改根元素就成比例地調整所有字型大小,又可以避免字型大小逐層複合的連鎖反應。目前,除了IE8及更早版本外,所有瀏覽器均已支援rem。對於不支援它的瀏覽器,應對方法也很簡單,就是多寫一個絕對單位的宣告。這些瀏覽器會忽略用rem設定的字型大小。下面就是一個例子:
p {font-size:14px; font-size:.875rem;}
注意: 選擇使用什麼字型單位主要由你的專案來決定,如果你的使用者群都使用最新版的瀏覽器,那推薦使用rem,如果要考慮相容性,那就使用px,或者兩者同時使用。
px 與 rem 的選擇?
對於只需要適配少部分手機裝置,且解析度對頁面影響不大的,使用px即可 。
對於需要適配各種移動裝置,使用rem,例如只需要適配iPhone和iPad等解析度差別比較挺大的裝置。
來源:http://www.runoob.com/w3cnote/px-em-rem-different.html
由於這樣的差別,我們在製作響應式佈局頁面的時候,應該優先選擇相對根大小的rem單位了,在html中將font-size設定為62.5%, 這樣1rem就和10px等值了。
4、自適應佈局
在製作響應式佈局時,我們往往會使用自適應的佈局,因為目前移動端裝置五花八門,螢幕的寬度也沒有統一標準,因此可以隨著螢幕拉伸改變寬度的自適應的頁面肯定要由於固態寬度的佈局。
那麼在製作自適應的佈局時,要儘量避免使用固定困高,而是用百分比寬高,在多列布局時可以用calc() 來對內容進行佈局,如calc(%50 – 20rem);也可以對子元素進行佈局,比如div中進行三列布局時,可以設定每個子元素的大小為calc(100%/3),此時要注意,一定要在父元素中設定font-size:0,如若不然,子元素之間的空白符會被計算成字元單位,從而使子元素之間產生空隙,導致錯位。
對於一些希望使其浮動的元素,也可以用display:inline-block 來代替float:left;希望圖片等元素居中時,可以設定display為block,之後設定margin為 0 auto 。
5、media query
媒體查詢可以說是響應式佈局的核心,語法為:
@media only screen and (max-width: 50em){
[Content]
}
也就是在螢幕寬度為800px(50*16)是,頁面採取該樣式,花括號中的樣式會覆蓋預設的樣式,但是不會進行重寫,因此對需要的屬性進行操作即可。要注意的地方是,這裡儘量使用em而不是rem單位,這裡的數值和單位由於是讀取瀏覽器的,不收到html 或者 body中font-size的影響,換算比例始終為1:16 。
6、自適應圖片
用srcset屬性或者picture標籤,來對不同位置的圖片使用不同解析度的檔案。