rem移動端適配
關於移動端適配更多內容可以參閱移動端web適配方案詳解一章節。
下面單獨介紹一下如何實現rem實現各種規格移動端適配效果。
關於rem的基本用法可以參閱CSS3 rem一章節。
一.基本適配方案:
rem以html根元素字型大小為參考,當前絕大多數瀏覽器html預設字型大小為16px。
首先看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> * { margin:0px; padding:0px; } #antzone { width:10rem; height:5rem; background-color:green; text-align:center; } </style> <script> window.onload = function () { let odiv = document.getElementById("antzone"); odiv.innerHTML = odiv.offsetWidth; } </script> </head> <body> <div id="antzone"></div> </body> </html>
沒有顯式設定html的字型大小,所以預設是16px,那麼1rem=16px,10rem=160px。
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> * { margin:0px; padding:0px; } html { font-size:18px; } #antzone { width:10rem; height:5rem; background-color:green; text-align:center; } </style> <script> window.onload = function () { let odiv = document.getElementById("antzone"); odiv.innerHTML = odiv.offsetWidth; } </script> </head> <body> <div id="antzone"></div> </body> </html>
將html字型顯式設為18px,那麼1rem=18px,10rem=180px。
不同規格移動端裝置適配,通常選定一個裝置作為基準,比如iphone6,裝置寬度(device-width)為375px。
(1).首先給HTML設定font-size字型大小,值通常是device-width/10,等同於:
[JavaScript] 純文字檢視 複製程式碼執行程式碼window.innerWidth / 10
(2).然後根據切圖將px轉換為rem,手動計算比較繁瑣,可以通過SCSS實現:
[Scss] 純文字檢視 複製程式碼@function px2rem($px){ $rem : 37.5px; @return ($px/$rem) + rem; }
於是,當我們轉換具體數值的就可以直接呼叫函式即可:
[Scss] 純文字檢視 複製程式碼height: px2rem(160px); width: px2rem(80px);;
(3).前兩部完成的程式碼可以適配iphone6,程式碼如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <meta name="viewport" content="width=device-width, user-scalable=0"/> <title>螞蟻部落</title> <style type="text/css"> * { margin:0px; padding:0px; } html { font-size:37.5px; } #antzone { width:10rem; height:5rem; background-color:green; text-align:center; } </style> </head> <body> <div id="antzone"></div> </body> </html>
程式碼雖然簡單,足以說明問題,div的寬度是375px,恰好鋪滿整個螢幕,能夠適配iphone6。
對於其他規格的移動裝置呢,原理是一樣的,例如iphone4,它的裝置寬度是320px,那麼可以通過JavaScript動態計算並設定html字型大小為32px,程式碼如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <meta name="viewport" content="width=device-width, user-scalable=0"/> <title>螞蟻部落</title> <style type="text/css"> * { margin:0px; padding:0px; } #antzone { width:10rem; height:5rem; background-color:green; text-align:center; } </style> <script> window.onload = function () { let docEl = document.documentElement; docEl.style.fontSize = window.innerWidth / 10 + "px"; } </script> </head> <body> <div id="antzone"></div> </body> </html>
很簡單頁面佈局的rem資料不變,該10rem還是10rem,唯一改變的就是1rem所表示的畫素數。
特別說明:
(1).之所以將裝置寬度除以10,主要目的是為了不至於font-size值過大,當然也可以不除。
(2).html的font-size值通過JavaScript動態計算而來:
[JavaScript] 純文字檢視 複製程式碼let docEl = document.documentElement; docEl.style.fontSize = window.innerWidth / 10 + "px";
二.rem適配進階:
使用rem為單位進行適配的目的是為了得到一個與螢幕寬度相關的單位,比如1rem=device-width/10,1rem等於十分之一螢幕寬度。其實vw更加合適,考慮到瀏覽器相容問題,所以當前(2018-2-13)普遍採用rem進行適配,不過隨著軟硬體的更新,可以嘗試使用vw替代rem,具體參閱vw移動端適配一章節。
前面的rem適配是將設計稿的標註除以2,比如750px寬的設計稿,然後統一除以2。當前高清螢幕已經普及,dpr值大多是2或者3,那麼可以完全按照設計稿的尺寸來設定,淘寶就採用此種型別適配方案(flexible.js)。
實現過程簡單介紹如下:
(1).通常以750px作為標準制作設計稿。
(2).完全按照設計稿的尺寸製作頁面。
(3).與上面方案類似,html的font-size也是通過JavaScript動態計算而來:
[JavaScript] 純文字檢視 複製程式碼let docEl = document.documentElement; docEl.style.fontSize = window.innerWidth / 10 + "px";
視口根據dpr事先進行縮放,例如iphone6的dpr=2,那麼縮放1/2,window.innerWidth原本值是375px,縮放後變為750px,所以html的font-size計算值為75px,於是實現了適配。如果裝置是iphone4,dpr=2,window.innerWidth原本值是320px,縮放後變為640px,所以html的font-size計算值為64px,最終也實現了適配。
圖示如下:
字型大小設定:
元素的尺寸單位使用rem,但是字型大小依然推薦使用px,加入750px設計稿的字型大小是12px,但是縮放0.5之後,視覺上只有6px的大小,很明顯是不合理的,所以要根據螢幕dpr進行一下適配:
[CSS] 純文字檢視 複製程式碼.a{ font-size:12px; } [data-dpr="2"] .a{ font-size: 24px; } [data-dpr="3"] .a{ font-size: 36px; }
flexible.js優點:
(1).清晰度高,能達到物理畫素的清晰度。
(2).由於1px css畫素用1px物理畫素表示,那麼實現了高清屏1px邊框效果。
(3).向後相容較好,即便螢幕寬度增加、PPI 增加該方案依舊適用。
說明:安卓機採用dpr=1處理,因為安卓機規格複雜,甚至沒有devicePixelRatio屬性,或者返回值比較怪異。
完整程式碼如下:1518544569552427.rar
相關文章
- 移動端適配-rem(新)REM
- 移動端rem怎樣適配REM
- 移動端適配-Rem 佈局篇REM
- 移動 web 端螢幕適配 – remWebREM
- 移動端配適與掌握動態 REMREM
- 移動web適配利器-remWebREM
- 移動端第十八章 rem適配佈局REM
- 今天分享下移動端rem 適配REM
- vue移動端h5適配解決方案(rem or vw)VueH5REM
- 移動web適配利器-rem In CSS3WebREMCSSS3
- 用REM單位進行移動端適配的最佳實現REM
- H5移動端使用rem適配(外掛postcss-pxtorem)H5REMCSS
- viewport移動端適配View
- 移動端適配總結
- vue-cli中使用rem完成適配,讓移動端快樂起來~~VueREM
- 用rem和px做單位哎移動端的文字適配問題REM
- (移動端適配px轉rem)react配置rem外掛lib-flexible和postcss-px2rem-excludeREMReactFlexCSS
- 移動端適配-實踐篇
- 「移動端」Web頁面適配Web
- Web移動端適配總結Web
- 利用vw+rem實現移動web適配佈局REMWeb
- 移動端自適應個人理解與收集——remREM
- 移動端rem方案REM
- 移動端的適配及佈局
- 移動端適配頁面快速搭建
- 移動端開發適配總結
- postcss-px-to-viewport 移動端適配CSSView
- Rem 等比適配始末REM
- rem 適配佈局REM
- 移動端自適應佈局的最好工具-remREM
- vue移動端專案使用第三方ui框架適配rem的問題VueUI框架REM
- 移動端適配 - 基礎知識篇
- React專案使用vw適配移動端React
- 解決vue移動端適配問題Vue
- 移動端適配問題解決方案
- 移動端使用rem原理REM
- 最簡單的移動端適配方案(rem+vw)REM
- 【移動適配】移動Web怎麼做螢幕適配(一)Web