1. 程式人生 > >[轉載]相容性--rem相容適配解決方案

[轉載]相容性--rem相容適配解決方案

REM 相容適配解決方案

什麼是 REM

REM(Font size of the root element)是指相對於根元素的字型大小的單位。

範例:

  • 若根節點font-size設定為 10px,則使用 3rem 時,計算後得 3*10 = 30px
  • 如果根節點設定為 20px,側計算後得 3*20 = 60px

為什麼使用 REM

  • 相對於流佈局響應式佈局等適配方式,REM 適配更為靈活,在不同螢幕尺寸上根據根節點來等比適配
  • 使用便捷,從 px -> rem 可以使用工作流自動完成

tmt-workflow 基準值約定

  1. <html> 根節點預設 font-size = 20px
  2. 視覺稿預設寬度為 375px
    (即 iPhone 6 尺寸)
  3. 其它螢幕寬度以 iPhone 6 的視覺為為基準,進行等比縮放
  4. rem 單位生效範圍為所有內聯、外聯樣式的 CSS 屬性值,1px 除外
tmt-workflow為微信TmT團隊研發的工作流。

tmt-workflow 是一個基於 Gulp(v4.0)、高效、跨平臺(macOS & Win)、可定製的前端工作流程。

現已推出 GUI 桌面工具:WeFlow,無需安裝任何環境依賴即可使用,官網下載:http://weflow.io/

tmt-workflow REM 方案使用思路

  1. 編碼過程中統一使用 px 作為單位
  2. 工作流編譯後,px -> rem 自動完成

開啟 REM

首先,編輯配置檔案 .tmtworkflowrc 如下:

{
  "supportREM": true
}

流程詳述

開啟後,CSS 分為 外聯樣式 和 內聯樣式 兩部分邏輯執行:

  1. Less -> CSS 過程,由外掛 postcssPxtorem 對 LESS 中的 px 進行單位轉換
  2. HTML/EJS -> HTML 過程,會使用外掛 posthtmlPx2rem 對 HTML 中的內聯樣式進行單位轉換

其它注意點

1. 相容 1px 問題
2. 雪碧圖相容問題

為避免雪碧圖遇到小數計算 bug,設定雪碧圖內各個元素之間的間隙為 4px,參見_tasks/TaskBuildDist.js

3. 強制不使用 REM 的預留 hack

如果希望某條 CSS樣式不進行單位轉換,可使用如下大小寫敏感的 px 寫法:

如:12PX 代理 12px,這樣工作流中就會忽略這條 CSS 屬性,不進行單位轉換