1. 程式人生 > >移動端響應式佈局基礎

移動端響應式佈局基礎

搭建一個H5頁面,我們需要在head中新增一個meta標籤

快捷鍵:meta:vp + tab鍵

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

viewport:視口

width=device - width 設定視口的寬度等於裝置的寬度,如果不設定的話,預設視口寬度為980px。通俗的理解:我們這個操作其實就是告訴當前的瀏覽器按照多少寬度來渲染頁面,換句話說,就是展示當前這個頁面的區域一共有多寬(瀏覽器的寬度)

user-scalable=no 禁止使用者手動縮放

initial-scale=1.0 設定螢幕預設的縮放比例

maximum-scale=1.0 設定螢幕最大的縮放比例

minimum-scale=2.0 設定螢幕最小的縮放比例





/*正常普通屏*/
        .box {
            background: url("ban.jpg") no-repeat;
        }

        /*2倍屏*/
        @media all and (-webkit-device-pixel-ratio: 2) {
            .box {
                background: url("
[email protected]
") no-repeat; } } /*3倍屏*/ @media all and (-webkit-device-pixel-ratio: 3) { .box { background: url("[email protected]") no-repeat; } }

媒體查詢:@media

->媒體裝置:all所有裝置  screen所有螢幕裝置PC+移動端 print印表機裝置...

->媒體條件:指定在 什麼樣的條件下執行對應的樣式

        @media all and (max-width: 319px) {
            /*寬度小於320px*/
            .box {
                height: 110px;
            }
        }

        @media all and (min-width: 320px) and (max-width: 359px) {
            /*寬度大於等於320px小於360px*/
            .box {
                height: 120px;
            }
        }

蘋果手機的尺寸:5s以下都是320px  6是375px寬度 6plus是414px

常用的安卓機尺寸:320, 360, 480, 540, (640, 720...)

在真實專案中,設計師給我們的設計稿一般都是640*1136  /  640*960  /   750*1334

響應式佈局的解決方案:

①流式佈局法:

->一般是用在PC端和手機端共用一套前端頁面

->容器的寬度一般都不寫固定的值,而是使用百分比(相對於視口區域寬度的百分比)

->其餘的樣式:字型,高度,margin,padding等等都按照設計稿上標註尺寸的一半來設定

->對於有些螢幕尺寸下,我們設定的固定值看起來不是特別好看的話,使用@media進行微調整

特殊情況:

設計師的設計稿是640px的,我們的素材圖也是640px,這樣iPhone6以及6plus展示的時候,圖片不夠大,對於這種情況就和UI設計師要1280px大圖

        @media all and (-webkit-min-device-pixel-ratio: 2) and (min-width: 320px) {
            .box {
                background: url("[email protected]") no-repeat;
            }
        }

        @media all and (min-width: 641px) {
            .box {
                background: url("[email protected]") no-repeat;
            }
        }

②REM響應式佈局

->我們做的H5頁面只在移動端訪問(REM不相容低版本的瀏覽器)

->REM:當前頁面中元素的REM單位的樣式值都是針對於HTML元素的font-size的值進行動態計算的

->  html{

font-size: 100px;   //1REM = 100px

}

Width: 2rem; 這樣就是相當於width=200px

Height:2rem;

按照平時如果想要讓頁面中的所有比例所有一半,就需要修改所有的單位為px的值,而採用rem的話,只需要改變font-size: 50px;

這樣就代表1REM = 50px,所以

Width: 2rem; 這樣就是相當於width=100px

Height:2rem;

步驟:

①從UI設計師拿到設計稿(PSD格式的設計稿)640*1136

②在樣式中給HTML設定一個font-size的值,我們一般都設定一個方便後面計算的值,例如:10px,100px...這裡我們之所以用100px,主要是瀏覽器最小的字型大小都是12px,用10px比例計算的結果和真實UI設計稿會存在那麼一點點的偏差

html{

font-size: 100px;   //1REM = 100px

}

③寫頁面,寫樣式

完全按照設計稿的尺寸來寫樣式,此時不用管任何的事情,設計稿給你的高度,寬度,字型大小,margin,padding的值是多少,我們就寫多少

但是我們在寫樣式值的時候,需要把得到的畫素值除以100,計算出對應的rem的值,我們設定的也都是rem的值

值得注意的是:真實專案中外層盒子的寬度我們一般還是不寫固定值,沿用流式佈局法的思想,我們用百分比的方式佈局

④根據當前螢幕的寬度和設計稿的寬度來計算我們HTML的font-size

設計稿   640   600*300                      font-size=100             6rem*3rem

手機:   320    300*150                     font-size=50               6rem*3rem

手機:   375  351.5625*175.78125    font-size=58.59375    6rem*3rem



根據當前的螢幕寬度和設計稿寬度的比例,動態計算一下當前寬度下的fontsize值應該是多少,如果fontsize的值改變了,之前設定的所有rem單位的值自動會跟著放大或者縮小

~function () {
    var desW = 640,
        winW = document.documentElement.clientWidth,
        ratio = winW / desW,
        oMain = document.querySelector(".main");
    if (winW > desW) {
        oMain.style.margin = "0 auto";
        oMain.style.width = desW + 'px';
        return;
    }
    document.documentElement.style.fontSize = ratio * 100 + 'px';
}();