教你如何用 lib-flexible 實現移動端H5頁面適配

来源:http://www.cnblogs.com/pwc1996/archive/2017/12/18/8059424.html
-Advertisement-
Play Games

前話 好久沒寫教程了(可能會誤導新手的菜鳥教程( ̄▽ ̄)")。 這是我的github,歡迎前端大大們和我一起學習交流 "https://github.com/pwcong" 最近入職公司做前端實習,這幾個星期來學到了移動端H5頁面適配。(以前根本沒做過移動端網頁/(ㄒoㄒ)/~~,還是微信端的) 所 ...


前話

好久沒寫教程了(可能會誤導新手的菜鳥教程( ̄▽ ̄)")。

這是我的github,歡迎前端大大們和我一起學習交流
https://github.com/pwcong

最近入職公司做前端實習,這幾個星期來學到了移動端H5頁面適配。(以前根本沒做過移動端網頁/(ㄒoㄒ)/~~,還是微信端的)

所以把我學到的一個小知識點寫下來,也分享給前端新手們。


正文

0x00 大概說明

做移動端網頁和pc端很大不同的便是現在移動端視窗解析度繁多。

很多時候UI給的設計圖只有一份,還是按照iphone6設計的,這就讓前端適配其他例如6plus或安卓等其他移動端頭疼。

還好,阿裡巴巴2015年底公開了其成熟的適配方案,lib-flexible,至於其可靠性可參考每年天貓活動的移動端頁面。

這個方案的用法大概是這樣的,HTML 頭部引入 lib-flexible 的樣式和js庫,容器或組件寬高主要使用單位 rem ,字體大小則不變仍然使用單位 px

還有一個約束是,因為只面向移動端,因此我們限制最外層包裹的div最大寬度為 640px

我這裡只簡單介紹怎麼使用 lib-flexible 實現移動端適配,如果需要深入解釋的知識,請閱讀如下文章:
https://github.com/amfe/article/issues/17

0x01 引入 lib-flexible

最新的庫文件可以到這裡下載:
https://github.com/amfe/lib-flexible

clone 下來後在 build 目錄下找到 flexible.cssflexible.js 在HTML頭部引入即可,例如:

<!DOCTYPE html>
<html lang="zh-CN">

    <head>
        <title>lib-flexible demo</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">

        ...

        <link href="css/flexible.css" rel="stylesheet">
        <script src="js/flexible.js"></script>

    </head>

    <body>

        ...

    </body>

</html>

0x02 計算rem

谷歌 rem 的用法後很多人應該大概瞭解 rem 的原理了,大概就是 rem 依賴 font-size 的值,例如預設下 1rem = 16px,因此通過在不同解析度修改 font-size 就可以達到適配不同解析度的移動端了。

需要詳細瞭解 rem 值計算可參考這篇文章 http://www.cnblogs.com/azhai-biubiubiu/p/6003597.html

rem 來做寬高定型有個最大的問題是,font-size 如何計算的問題,如何算得的 font-size 可以在不同解析度下顯示效果一致呢?

不用擔心,lib-flexible 已經幫你算好了,在你調整視窗大小的時候自動計算調整 rem 的基準,你只要做的是,按照設計圖算出能適配不同解析度的移動端的 rem 值。

這裡有個關係圖:

demo2

看不懂沒關係,看那麼多flexible的教程都放了我也就跟著放出來好了。

假如UI給了這個設計圖(找不到工作的UI (/▽\)):
demo1

好,我這辣雞一眼看出了:

  1. 這是以iphone5為標準的ui設計稿,設備視窗寬度為 640px
  2. 中間一個色塊,居中,背景色為 #0075a9,margin-top 為 100px, width 為 240px,height 為 120px

接下來,我們來計算rem值,計算公式很簡單:

需轉換的px值 / 設計稿寬度px值 * 10

上面的尺寸計算一下轉換成下麵的說法:

  1. 這是以iphone5為標準的ui設計稿,設備視窗寬度為 10rem
  2. 中間一個色塊,居中,背景色為 #0075a9,margin-top 為 1.5625rem, width 為 3.75rem,height 為 1.875rem

0x03 按照找不到工作的UI給的設計稿敲出代碼

<!DOCTYPE html>
<html lang="en">

<head>
    <title></title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="css/flexible.css" rel="stylesheet">
    <script src="js/flexible.js"></script>

    <style>
        html, body{
            width: 100%;
            height: 100%;
            position: relative;
            padding: 0;
            margin: 0;
            overflow: hidden;
        }

        body{
            background: #333;
        }

        .container{
            overflow-x: hidden;
            overflow-y: auto;
            position: relative;
            height: 100%;
            max-width: 640px;
            background-color: white;
            margin: 0 auto;
        }

        .block{
            
            margin: 0 auto;
            margin-top: 1.5625rem;

            width: 3.75rem;
            height: 1.875rem;

            background-color: #0075a9;

        }

    </style>

</head>

<body>

    <div class="container">

        <div class="block"></div>

    </div>

</body>

</html>

0x04 不同解析度移動端下瀏覽效果

dev1

dev2

dev3

dev4

可以看到,在多個不同設備間,效果基本差不多


後話

也許你會說,我這個案例 內容太少,沒有什麼說服力

那麼,大佬們快動起手來,在你的移動端網頁項目中用上 lib-flexible 看看能否解決移動端頁面適配問題吧。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 常用標簽的行內類型標簽有:a、span、img;塊級標簽有:div、p、h1~6、ul、ol、li、dl、dt、dd。 行內類型標簽的特征:標簽的大小由標簽的內容決定,不能設置width和height,不會自動換行。 塊級標簽的特征:可以設置width和height,會自動換行。 行內類型標簽還有一 ...
  • 小時候懷念的貪吃蛇游戲~~啦啦啦 ...
  • 所謂的清除浮動實際上就是清除浮動帶來的影響。那麼浮動會帶來什麼影響呢?下麵先看一個正常的例子: 定義一個父div1和子div2,將子div2設置成左浮動。 現象為: 當把div1的height=200px這句話註釋之後就會出現浮動的影響這個問題: 我們發現div1的背景顏色(粉色)沒有了。這個現象可 ...
  • 如圖所示,就是一個5*5的螺旋矩陣 我的思路如下: 第一步:拆分“層”數組 把矩陣根據層數分成N個連續的自然數組,根據如果每一層寬度為n的話,那麼每一層一共就有4(n-1)個數字,且當n=1時個數為1 拆分數字代碼 迴圈調用,n每次減2 第二部:將其組裝為一個“沙漏”數組 將第一步拆分好的數組取第1 ...
  • 原文鏈接:https://www.cnblogs.com/itbainianmei/p/6062249.html 1.每個組件模板template,不再支持片段代碼 之前: <template> <h3>vue-router+vue-loader</h3> <p>hshsh</p> </templa ...
  • 在把微信自定義菜單編輯工具加上又拍雲CDN嘗嘗鮮時,發現頁面上的JS莫名的報錯了。在排查許久無果後,突然想起CDN有個頁面壓縮功能。 菜單編輯器頁面部分JS腳本使用到了頁面註釋進行了語法綁定,CDN開啟壓縮後,直接去除了語法綁定代碼導致程式報錯。 ...
  • IE瀏覽器下的漸變背景 IE瀏覽器下漸變背景的使用需要使用IE的漸變濾鏡。如下代碼: filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=red,endcolorstr=blue,gradientType=1); 相關說明 ...
  • 萬事開頭難,一個好的Hello World程式可以節省我們好多的學習時間,幫助我們快速入門。Hello World程式之所以是入門必讀必會,就是因為其代碼量少,簡單易懂。但我覺得,還應該做到功能豐富,涉及的知識點多。這樣才是一個好的初學者入門指引程式。 之所以選擇Vue,不僅因為其流行,還因為其輕量 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...