教你如何用 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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...