摘要:前言移動端適配方案回顧總結如何使用單位的計算參考的根節點進行計算,根節點的字體變化,布局參考的頁面也會相應進行縮放,此為布局的本質。動態改變的值幾乎在每個瀏覽器都將的初始化為,我們動態改變的話可以暫時將設置為適配的根節點初始值。
前言
移動端 rem 適配方案回顧總結
如何使用 remrem 單位的計算參考 html 的根節點 font-size進行計算,根節點的字體變化,布局參考的 rem 頁面也會相應進行縮放,此為 rem 布局的本質。
1. 動態改變 html 的 font-size 值幾乎在每個瀏覽器都將 html 的 font-size 初始化 為 16px , 我們動態改變的話可以暫時將 16px 設置為 rem 適配的根節點 font-size 初始值。
那么如何進行適配動態修改?
假定設計稿寬度 為 750px,我們定義了自己使用 1rem = 16px 的單位去布局,如何適配呢?
在 chrome 的 手機 iphone 模擬器寬度為 375px,正好為設計稿的 一半,我們可以口算: 當時的 1rem 應該等于初始化時 html 節點 font-size 的一半,即 newFontSize = 16/2 = 8px,這樣一半對一半不就適配了嗎...
從中得到公式 設計稿寬度/16px = 需要適配的設備寬度/8px,能夠看出 新的 font-size 是參考 當前的設備寬度與原設計稿的寬度,進行等比縮放的
最終得到 newFontSize = 16px * 需要適配的設備寬度 / 原設計稿寬度
(function(doc, win) { var resizeEvt = "orientationchange" in window ? "orientationchange" : "resize", setRemResponse = function() { var vM = 750; var vfontSize = 16; var html = doc.documentElement; var newfontSize = (vfontSize * html.clientWidth) / vM; html.style.fontSize = newfontSize + "px"; }; doc.addEventListener("DOMContentLoaded", setRemResponse, false); win.addEventListener(resizeEvt, setRemResponse, false); })(document, window);2. 實際使用
將測量得出的btn 按鈕的樣式從 px轉換 為 rem
.btn { width: 699px; /* 699/16 => 43.6875rem; */ height: 90px; /* 90/16px => 5.625rem; */ background: rgba(90, 173, 246, 1); border-radius: 6px; /* 6/16=> 0.375rem; */ }
自己計算太繁瑣,使用 scss 定義 函數代替計算過程
@function pxToRem($initialStyle) { @return $initialStyle/16 * 1rem; }
那么上面的 css改寫為:
.btn { width: pxToRem(699); height:pxToRem(90); background: rgba(90, 173, 246, 1); border-radius:pxToRem(6); }
補充: vscode 的插件 cssrem 支持計算 將我們在 css,scss 中輸入的 px 轉換為 rem 單位,默認設置的 font-size 為 16px計算方法變形,口算 rem 1. 簡單分析
分析上一節我們最終得到 newFontSize = 16px * 需要適配的設備寬度 / 原設計稿寬度
每次計算要除以 16 很是繁瑣,我們若將 初始的 html 根節點 font-size變為方便計算的,反正它最終做為一個除數,變為多少呢? 是否 100 更為方便呢?對了!
const oHtml = document.documentElement; const clientWidth = oHtml.clientWidth; var vM = 750; var vfontSize = 100; // 移動設備 oHtml.style.fontSize = (vfontSize * clientWidth) / vM + "px";2. 實際使用
還是上面熟悉的那個 btn, 將px轉換 為 rem, 口算得出結果。
.btn { width: 699px; /* 699/100 => 6.99rem; */ height: 90px; /* 90/100 => 0.9rem; */ background: rgba(90, 173, 246, 1); border-radius: 6px; /* 6/100=> 0.06rem; */ }
不得不說,有了 scss 是真的方便!
@function reduced100($initialStyle) { @return $initialStyle/100 * 1rem; }
那么上面的 css函數方法改寫為:
.btn { width: reduced100(699); height:reduced100(90); background: rgba(90, 173, 246, 1); border-radius:reduced100(6); }
怎么樣,rem 原來就是這么簡單!!!
工具函數上面的方法,二選其一就可以了,畢竟現在 javascript 的 執行效率不差!
(function(doc, win) { var resizeEvt = "orientationchange" in window ? "orientationchange" : "resize", setRemResponse = function() { var vM = 750; var vfontSize = 16; var html = doc.documentElement; var newfontSize = (vfontSize * html.clientWidth) / vM; html.style.fontSize = newfontSize + "px"; }; doc.addEventListener("DOMContentLoaded", setRemResponse, false); win.addEventListener(resizeEvt, setRemResponse, false); })(document, window);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/114506.html
摘要:做移動端頁面以來,經常會聽說移動端的適配這個問題,但是并沒有認真分析過是如何適配各種機型的。目前公司用的是手淘的進行頁面適配的。手淘那個還有的地方看不懂,還是自己太了,但是看不懂車不影響老司機開車。 做移動端頁面以來,經常會聽說移動端的適配這個問題,但是并沒有認真分析過是如何適配各種機型的。目前公司用的是手淘的flexible.js進行頁面適配的。適配的根本原理其實就是將設計稿按一定的...
摘要:做移動端頁面以來,經常會聽說移動端的適配這個問題,但是并沒有認真分析過是如何適配各種機型的。目前公司用的是手淘的進行頁面適配的。手淘那個還有的地方看不懂,還是自己太了,但是看不懂車不影響老司機開車。 做移動端頁面以來,經常會聽說移動端的適配這個問題,但是并沒有認真分析過是如何適配各種機型的。目前公司用的是手淘的flexible.js進行頁面適配的。適配的根本原理其實就是將設計稿按一定的...
摘要:真的是給我們新手學習移動端適配造成不少困惑英語真的很重要呀。細節高清屏上的處理其實并不是所有做移動端適配的人都一定會遇到這個問題。 一次搞清楚移動端這幾個坑爹的單位慨念 目錄: 一、讓坑爹的單位,不再坑爹 二、需要準備什么樣的設計稿 三、rem方案的原理和細節 高清屏上,位圖的處理 高清屏上,關于border: 1px的處理 移動端屏幕的自動適配的處理 移動端屏幕上字體大小的處理...
閱讀 3137·2021-11-24 10:24
閱讀 2928·2021-11-11 16:54
閱讀 3065·2021-09-22 15:55
閱讀 2026·2019-08-30 15:44
閱讀 1901·2019-08-29 18:41
閱讀 2760·2019-08-29 13:43
閱讀 3052·2019-08-29 12:51
閱讀 1169·2019-08-26 12:19