原來一直覺得響應式布局很神秘需要用js來進行實現。
今天無意中發現了一篇文章,一切都那麼容易了~ 就用了個媒體查詢 來判斷螢幕的大小,根據螢幕的大小來使用相應的樣式。
目前已經越來越多的網站以及wap網站使用響應式設計,因為大螢幕的行動裝置越來越普及。而調適型配置已經無法勝任各種瀏覽需求。響應式設計的目的是儘可能以最好的布局顯示您的資料,以實現方便使用的 Web 頁面。
css2的時期有一個不是很常用的media type,他擁有比如aural(聲音)braille(觸摸)print(列印)handheld(行動裝置)等等十種媒體類型,(附加媒體類型詳細http://www.w3.org/TR/CSS2/media.html#media-types)利用@media規則可以在同一樣式表裡為不同終端使用不同的樣式。尷尬的是這個media
type並沒有被多少終端真正的支援。
現在CSS3有了個更為實用的 media query。而移動終端的瀏覽器基本已經完全支援了css3.他可以為你擷取各種終端的資料。
先舉個例子,大家看這個demo。(由於相應地區過大,就不了,請大家點擊開啟這個串連)
http://www.caihong.cc/demo/media/
一個普通的自適應顯示的三欄網頁,當你用不同的終端來查看這個頁面的時候,他會根據幾種終端來顯示不同的樣式,在電腦上是三列,在pad上應該也是三列,在大屏手機上是三行,在螢幕小於320的手機上只顯示主要內容,隱藏掉了次要元素。(這裡關於響應式布局還有個比較好的訊息,就是拖動瀏覽器也可以觸發判斷條件,測試的時候你不需要去找一堆手機,只要把自己的瀏覽器視窗縮小到一定尺寸就可以了,這個demo也可以用拖動瀏覽器大小的方式測試。)
這就是一個最簡單的 響應式布局 的頁面。我們就從這個例子裡認識下media query屬性吧。
- @media screen and (min-width: 320px) and (max-width : 479px)
就從這個條件陳述式開始介紹,media屬性後面跟著的是一個 screen 的媒體類型(上面說過的十種媒體類型之一)。然後用 and 關鍵字來串連條件(其他關鍵字還有 not, only,看字面大家能理解,就不多說。),然後括弧裡就是一個媒體查詢語句,稍微懂點css的同學都能看懂,這個條件陳述式意思是在大於320小於479的解析度下所啟用的樣式表。
這個語句,就是響應式布局的基礎應用了。在判斷終端解析度大小之後,賦予不同的樣式進去,就像我們的例子裡
- @media screen and (max-width : 320px){
- body{...}
- }
- @media screen and (min-width: 800px) and (max-width: 1024px){
- body{...}
- }
至於要判斷多少種解析度,完全取決於你產品的需求,常見的解析度有手機,平板(注意這些終端是存在 橫屏 豎屏 區別的,這個下一篇裡提),案頭顯示器。自己為自己所面對的終端定製樣式。
一般大於960的顯示器都可以用預設樣式而不必在媒體查詢裡判斷了。有一種情況除外,就是高像素比的終端,比如 iphone4以上的retina屏,一個iphone5的小小的螢幕(iphone的螢幕是真小啊),他的解析度竟然達到了1136*640,如何讓放大了兩倍的螢幕顯示依然清晰?
在面對這種解析度精細的終端,我們有另外一個條件查詢語句 device-pixel-ratio。
比如例子裡的
- @media only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2)
就是判斷終端的像素比是2的話,所渲染的樣式。iphone4以上像素比是2,高解析度Andriod裝置像素比是1.5,例子裡只有像素比為2的查詢,1.5的或者其他比例方法一樣,前面用的是幾種瀏覽器的私人屬性,最後一種是通用屬性,
- @media only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2)
等於
- @media only screen and (min-device-pixel-ratio: 2)
為了一些版本的相容性,不得已寫的長了。
- body{
- font-size:24px;
- }
- .box2{
- background: url(d/20.png) #ccc;
- background-size:50%;
- }
在像素比為2的終端裡這樣寫的目的,就是讓他顯示的更容易識別,一般來說顯示一張1px的背景圖片,我們要準備一張2px的,然後再background-size:50%這樣。1.5像素比同例。
比如上面的demo,如果你用iphone4以上的蘋果手機來看,中間的背景圖片應該是顯示“2.0像素比”。
這裡也暴露了響應式一個很大的缺點:需要多做若干背景圖(作為內容顯示的圖片暫時無視,彈性圖片與彈性字型,下次單獨寫一篇介紹博文介紹)。
對於media query的相容性,我想不是很重要,因為很少有終端內建IE9以下的瀏覽器。基本都是進階瀏覽器。如果特殊需要,可以下載一個相容的JS檔案
- <!--[if lt IE 9]>
- <scriptsrc="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
- <![endif]-->
以條件注釋的方式加在檔案裡。