移動端布局總結


一、流式布局(百分比布局)

使用非固定像素來定義網頁內容,也就是百分比布局,(特別適合於電商網站的布局)通過盒子的寬度設置成百分比來根據屏幕的寬度來進行伸縮,不受固定像素的限制,內容向兩側填充。這樣的布局方式,就是移動web 開發使用的常用布局方式。這樣的布局可以適配移動端不同的分辨率設備。

二、rem布局局限條件:主要用來適配手機和ipad,除了手機和ipad,其他的都不能適配。

rem布局方案(用rem這個單位來做不同手機的適配)是現在做手機端頁面最好的。

首先說一下px、em、rem取用選擇依據?

1.  px 像素(Pixel),絕對單位,是相對於顯示器屏幕分辨率而言的,是一個虛擬長度單位,是計算機系統的數字化圖像長度單位,如果px要換成物理長度,需要指定精度DPI。

2.  em 是相對長度單位,相對於當前對象內文本的字體尺寸。如當前對象內文本的字體尺寸未被人設置,則相對於瀏覽器的默認字體尺寸。它會繼承父級元素的字體大小,因此不是一個固定的值。

3.  rem 是CSS3新增的一個相對單位(root em,根em),使用rem為元素設定字體大小時,仍然是相對大小,但相對的是HTML根元素。

4.  區別:IE無法調整那些使用px作為單位的字體大小,而em和rem可以進行縮放,rem相對的是HTML根元素,這個單位可謂集相對大小和絕對大小的優點於一身,通過它既可以做到只修改根元素就成比例地調整所有字體大小,又可以避免字體大小逐層復合的連鎖反應。目前,除了IE8及更早版本外,所有瀏覽器均已支持rem。

rem布局中的尺寸是怎樣計算的?

本質是等比縮放,一般是基於寬度,試想一下假設UE圖能等比縮放,假設我們將屏幕寬度平均分成100份,每一份用x表示,x=屏幕寬度/100,如果將x作為單位,x前面的數值就代表屏幕寬度的百分比。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
      /*目標:就是把box適配到常見的iphone5 三星 iphone6手機上*/
      /*1.通過切圖工具,我們得知 box在設計圖(640px)上的大小是16*16px */
      /*2.把設計圖分成20份 1份=32px*/
      /*3.iphone5的寬度=320  iphone6的寬度=375  這里指的是設備獨立像素*/
      /*4.使用媒體查詢*/
      @media screen and (width: 320px){
          html {
              /*在320寬的屏幕中 一份是16px*/
              font-size: 16px;/*320/20=16*/
          }
      }
      /*三星*/
      @media screen and (width: 360px){
          html {
              /*在360寬的屏幕中 一份是18px*/
              font-size: 18px;/*360/20=18*/
          }
      }
      @media screen and (width: 375px){
          html {
              /*在375寬的屏幕中 一份是18.75px*/
              font-size: calc(375px/20);/*375/20=18.75*/
          }
      }
      .box {
          /* 在某一屏幕中的大小=元素的尺寸/32 * 屏幕中一份的大小,即16/32*18或16/32*16,就能得到px為單位的*/
          width: 0.5rem;
          height: 0.5rem;
          background-color: red;
      }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

 例:給了我們一張640px的設計圖(把640px分成20份,則每份32px)

       適配代碼:

@media screen and (width: 320px){
          html {
              /*在320寬的屏幕中 一份是16px*/
              font-size: 16px;/*320/20=16*/
          }
      }
      /*三星*/
      @media screen and (width: 360px){
          html {
              /*在360寬的屏幕中 一份是18px*/
              font-size: 18px;/*360/20=18*/
          }
      }
      @media screen and (width: 375px){
          html {
              /*在375寬的屏幕中 一份是18.75px*/
              font-size: calc(375px/20);/*375/20=18.75*/
          }
      }

html中,加入一個div量出來height是90px,那么應該這樣寫: 

.box {
/*90/32意思是這個尺寸在設計圖中占了多少份*/
height: 90/32rem; }

 我在工作中是這樣用的:

給一個750px的設計稿

(我們這里所說的750px並不是絕對的,750px是iphone6的物理像素,也叫屏幕分辨率。所以這里只是泛指移動端設計稿是按照設備的物理像素所給。)

物理像素:顧名思義,就是設備屏幕上的實際像素,也就是說這個手機被出廠造出來的時候,這個屏幕上有多少個像素點,它的物理像素就是多少。

設備獨立像素:也叫邏輯像素(對於前端來說,和我們的css像素是一樣的),這個不同的設備是不一樣的。在viewport為ideal-viewport模式時,如iphone6此時的viewport為375排序,代表着我們在css中寫375px就可以達到全屏的效果。

在index.html中添加一段js代碼

<script>
      var u = navigator.userAgent;
      var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android終端或者uc瀏覽器
      var isiOS = u.indexOf('iPhone') > -1; //ios終端
      if(isAndroid || isiOS) {
        var windowWidth = document.documentElement.clientWidth;
        document.documentElement.style.fontSize = windowWidth / 7.5 + 'px';
      } else {
        var windowWidth = document.documentElement.clientWidth;
        if(windowWidth > 480) {
          document.documentElement.style.fontSize = 480 / 7.5 + 'px';
        } else {
          document.documentElement.style.fontSize = windowWidth / 7.5 + 'px';
        }
      }
    </script>

然后只需要將設計稿量出來的長度(px),小數點向左移2位,單位變成rem就好了。

還可以這樣來寫,添加如下代碼

(function(){
            function changeRootFont(){
                var designWidth = 750,rem2px = 100;
                document.documentElement.style.fontsize=((window.innerWidth/designWidth)*rem2px) +'px';
                //iphon6: (375/750)*100 + 'px'
            }
            changeRootFont();
            window.addEventListener('resize',changeRootFont,false);
        })();

可以看到,我們通過動態的獲取設備獨立像素,然后除以設計稿的寬度,然后賦給根字體的大小,以致來改變根字體大小,做到自適應。但至於為什么要乘100,首先375/750是0.5,瀏覽器默認最小字體為12px,所以我們需要放大一些,而100又很好算,然后只需要將設計稿量出來的長度(px),小數點向左移2位,單位變成rem就好了。

三、響應式布局(使用媒體查詢這個工具實現)

簡而言之,就是一個網站能夠兼容多個終端。

CSS3中的 Media Query(媒介查詢),通過查詢 screen 的寬度來指定某個寬

度區間的網頁布局。它主要是通過查詢設備的寬度來執行不同的 css 代碼,最終達到界面的配置。核心語法是:

@media screen and (max-width: 600px) { /*當屏幕尺寸小於600px時,應用下面的CSS樣式*/
  /*你的css代碼*/
}

如下所示:

@media screen and (width: 320px){
          body {
              background-color:red
          }
}
@media screen and (width: 375px){
          body {
              background-color:green
          }
}
              

由於響應式開發顯得繁瑣些,一般使用第三方響應式框架來完成,比如bootstrap來完成一部分工作,當然也可以自己寫響應式。

bootstrap中常用類名:

.col-xs-*超小屏幕(移動設備) 768px以下

.col-sm-*小屏設備 768px-992px

.col-md-*中等屏幕 992px-1200px

.col-lg-*寬屏設備 1200px 以上

四、flex彈性布局

以天貓的實現方式進行說明:

它的viewport是固定的:

<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">

高度定死,寬度自適應,元素都采用px做單位。

隨着屏幕寬度變化,頁面也會跟着變化,效果就和PC頁面的流體布局差不多,在那個寬度需要調整的時候使用響應式布局調調就行(比如網易新聞),這就實現了適配。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM