1. 程式人生 > >響應式Web之流式網格系統

響應式Web之流式網格系統

隨著移動端使用者的增加,我們希望設計出來的網頁能同時使用PC和移動端裝置,同一個網頁增對不同的裝置顯示效果也不一樣,這時需要用到響應式設計。這裡我先介紹一下流式網格系統。如果瞭解過 Bootstrap和Foundation框架的讀者就能發現這兩個框架都提供了獨特的網格系統。但是我們一般不會只為了使用網格系統而引入某一個框架,因此這裡介紹一下如何根據自己需求設計一個流式網格系統。
為了網頁能根據裝置自由縮放,在 \<\head> 元素中新增以下 \<\meta> 標籤:

<meta name="viewport" content="width=device-width, initial-scale=1.0"
/>
  • width 屬性控制裝置的寬度。假設您的網站將被帶有不同螢幕解析度的裝置瀏覽,那麼將它設定為 device-width 可以確保它能正確呈現在不同裝置上。
  • initial-scale=1.0 確保網頁載入時,以 1:1 的比例呈現,不會有任何的縮放。在移動裝置瀏覽器上,通過為 viewport meta 標籤新增 user-scalable=no 可以禁用其縮放(zooming)功能。通常情況下,maximum-scale=1.0 與 user-scalable=no 一起使用。這樣禁用縮放功能後,使用者只能滾動螢幕。

@media查詢

@media 查詢是CSS3的語法規則。使用@media 查詢可以針對不同的媒體型別定義不同的樣式,另外可以針對不同的螢幕尺寸設定不同的樣式。@media的CSS語法規則如下:

@media mediatype and|not|only (media feature) {
    CSS-Code;
}

例如:

@media only screen and (max-width: 400px){
    body {
        background-color:lightblue;
    }
}

表示只在媒體型別是數字螢幕而且寬度為400px或者更小時,則修改背景演示(background-color)。
另外我們也可以通過@media針對不同的媒體使用不同 stylesheets :

<link rel="stylesheet" media
="mediatype and|not|only (media feature)" href="mystylesheet.css">

構造網格

需求描述:設計一個網格系統,在PC端顯示1行8列,而在手機端顯示2行4列

HTML程式碼如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />
</head>

<body>
  <div class="row">
  <div class="grid m-grid-1 d-grid-1">
  </div>
  <div class="grid m-grid-1 d-grid-1">
  </div>
  <div class="grid m-grid-1 d-grid-1">
  </div>
  <div class="grid m-grid-1 d-grid-1">
  </div>
  <div class="grid m-grid-1 d-grid-1">
  </div>
  <div class="grid m-grid-1 d-grid-1">
  </div>
  <div class="grid m-grid-1 d-grid-1">
  </div>
  <div class="grid m-grid-1 d-grid-1">
  </div>
</div>
</body>
</html>

CSS程式碼如下:

.row{
  width:100%;
  max-width:1024px; /*設定最大的寬度,一般為PC端才起作用*/
  margin:0 auto;
  outline: 1px solid blue; 

}

/*為row類清除浮動來防止由浮動元素造成的外邊距摺疊*/
.row:before,.row:after {content: " ";display: table;}
.row:after {clear: both;}

/*設定每一列的格式*/
.grid{
  height:20px;
  float:left;
  margin:1%;
  outline:1px solid red;
}

/*設定每一個移動裝置上m-grid-1類的寬度值,m-grid-2類為m-grid-1的兩倍,以此類推*/
.m-grid-1{width:23%;}
.m-grid-2{width:48%;}
.m-grid-3{width:73%;}
.m-grid-4{width:98%;}

/*為寬度大於或等於960px的裝置設定列的寬度*/
@media (min-width:960px){
  .d-grid-1{width:10.5%;}
  .d-grid-2{width:23%;}
  .d-grid-3{width:35.5%;}
  .d-grid-4{width:48%;}
  .d-grid-5{width:60.5%;}
  .d-grid-6{width:73%;}
  .d-grid-7{width:85.5%;}
  .d-grid-8{width:98%;}
}

在PC 端顯示結果如下:
這裡寫圖片描述

在手機端顯示如下:
這裡寫圖片描述