當前位置:
首頁 > 知識 > 移動 Web 適配利器:rem

移動 Web 適配利器:rem

作者:tennylv


出處:騰訊前端


原文:www.alloyteam.com/2016/03/mobile-web-adaptation-tool-rem/


提到rem,大家首先會想到的是em,px,pt這類的詞語,大多數人眼中這些單位是用於設置字體的大小的,沒錯這的確是用來設置字體大小的,但是對於rem來說它可以用來做移動端的響應式適配哦。


兼容性

移動 Web 適配利器:rem



先看看兼容性,關於移動端


ios:6.1系統以上都支持


android:2.1系統以上都支持


大部分主流瀏覽器都支持,可以安心的往下看了。


rem設置字體大小


rem是(font size of the root element),官方解釋


意思就是根據網頁的根元素來設置字體大小,和em(font size of the element)的區別是,em是根據其父元素的字體大小來設置,而rem是根據網頁的跟元素(html)來設置字體大小的,舉一個簡單的例子,


現在大部分瀏覽器IE9+,Firefox、Chrome、Safari、Opera ,如果我們不修改相關的字體配置,都是默認顯示font-size是16px即

那麼如果我們想給一個P標籤設置12px的字體大小那麼用rem來寫就是


基本上使用rem這個單位來設置字體大小基本上是這個套路,好處是假如用戶自己修改了瀏覽器的默認字體大小,那麼使用rem時就可以根據用戶的調整的大小來顯示了。 但是rem不僅可以適用於字體,同樣可以用於width height margin這些樣式的單位。下面來具體說一下


rem進行屏幕適配


在講rem屏幕適配之前,先說一下一般做移動端適配的方法,一般可以分為:


簡單一點的頁面,一般高度直接設置成固定值,寬度一般撐滿整個屏幕。


稍複雜一些的是利用百分比設置元素的大小來進行適配,或者利用flex等css去設置一些需要定製的寬度。


再複雜一些的響應式頁面,需要利用css3的media query屬性來進行適配,大致思路是根據屏幕不同大小,來設置對應的css樣式。


上面的一些方法,其實也可以解決屏幕適配等問題,但是既然出來的rem這個新東西,也一定能兼顧到這些方面,下面具體使用rem:


rem適配


先看一個簡單的例子:

移動 Web 適配利器:rem



這是一個div,寬度和高度都用rem來設置了,在瀏覽器裡面是這樣顯示的, 可以看到,在瀏覽器裡面width和height分別是160px,正好是16px * 10,那麼如果將html根元素的默認font-size修改一下呢?


再來看看結果:

移動 Web 適配利器:rem



這時width和height都是170px,這就說明了將rem應用與width和height時,同樣適用rem的特性,根據根元素的font-size值來改變自身的值,由此我們應該可以聯想到我們可以給html設定不同的值,從而達到我們css樣式中的適配效果。


rem數值計算


如果利用rem來設置css的值,一般要通過一層計算才行,比如如果要設置一個長寬為100px的div,那麼就需要計算出100px對應的rem值是 100 / 16 =6.25rem,這在我們寫css中,其實算比較繁瑣的一步操作了。


對於沒有使用sass的工程:

為了方便起見,可以將html的font-size設置成100px,這樣在寫單位時,直接將數值除以100在加上rem的單位就可以了。


對於使用sass的工程:


前端構建中,完全可以利用scss來解決這個問題,例如我們可以寫一個scss的function px2rem即:


這樣,當我們寫具體數值的時候就可以寫成:


看到這裡,你可能會發現一些不理解的地方,就是上面那個rem:37.5px是怎麼來的,正常情況下不是默認的16px么,這個其實就是頁面的基準值,和html的font-size有關。


rem基準值計算


關於rem的基準值,也就是上面那個37.5px其實是根據我們所拿到的視覺稿來決定的,主要有以下幾點原因:


由於我們所寫出的頁面是要在不同的屏幕大小設備上運行的


所以我們在寫樣式的時候必須要先以一個確定的屏幕來作為參考,這個就由我們拿到的視覺稿來定


假如我們拿到的視覺稿是以iphone6的屏幕為基準設計的

iPhone6的屏幕大小是375px,


這樣計算出來的rem基準值就是37.5(iphone6的視覺稿),這裡為什麼要除以10呢,其實這個值是隨便定義的,因為不想讓html的font-size太大,當然也可以選擇不除,只要在後面動態js計算時保證一樣的值就可以,在這裡列舉一下其他手機的


iphone3gs: 320px / 10 = 32px


iphone4/5: 320px / 10 = 32px


iphone6: 375px / 10 =37.5px


動態設置html的font-size


現在關鍵問題來了,我們該如何通過不同的屏幕去動態設置html的font-size呢,這裡一般分為兩種辦法


1利用css的media query來設置即


2利用javascript來動態設置 根據我們之前算出的基準值,我們可以利用js動態算出當前屏幕所適配的font-size即:


然後我們看一下之前那個demo展示的效果

iPhone6下,正常顯示200px

移動 Web 適配利器:rem



在iphone4下,顯示169px

移動 Web 適配利器:rem



由此可見我們可以通過設置不同的html基礎值來達到在不同頁面適配的目的,當然在使用js來設置時,需要綁定頁面的resize事件來達到變化時更新html的font-size。


rem適配進階


我們知道,一般我們獲取到的視覺稿大部分是iphone6的,所以我們看到的尺寸一般是雙倍大小的,在使用rem之前,我們一般會自覺的將標註/2,其實這也並無道理,但是當我們配合rem使用時,完全可以按照視覺稿上的尺寸來設置。


1設計給的稿子雙倍的原因是iphone6這種屏幕屬於高清屏,也即是設備像素比(device pixel ratio)dpr比較大,所以顯示的像素較為清晰。

2一般手機的dpr是1,iphone4,iphone5這種高清屏是2,iphone6s plus這種高清屏是3,可以通過js的window.devicePixelRatio獲取到當前設備的dpr,所以iphone6給的視覺稿大小是(*2)750×1334了。


3拿到了dpr之後,我們就可以在viewport meta頭裡,取消讓瀏覽器自動縮放頁面,而自己去設置viewport的content例如(這裡之所以要設置viewport是因為我們要實現border1px的效果,加入我給border設置了1px,在scale的影響下,高清屏中就會顯示成0.5px的效果)


4設置完之後配合rem,修改


雙倍75,這樣就可以完全按照視覺稿上的尺寸來了。不用在/2了,這樣做的好處是:


解決了圖片高清問題。


解決了border 1px問題(我們設置的1px,在iphone上,由於viewport的scale是0.5,所以就自然縮放成0.5px)


在iphone6下的例子:


我們使用動態設置viewport,在iphone6下,scale會被設置成1/2即0.5,其他手機是1/1即1.


我們的css代碼,注意這裡設置了1px的邊框


在iphone6下的顯示:

移動 Web 適配利器:rem



在android下的顯示:


rem進行屏幕適配總結


下面這個網址是針對rem來寫的一個簡單的demo頁面,大家可以在不同的手機上看一下效果


但是rem也並不是萬能的,下面也有一些場景是不適於使用rem的


1 當用作圖片或者一些不能縮放的展示時,必須要使用固定的px值,因為縮放可能會導致圖片壓縮變形等。


在列舉幾個使用rem的線上網站:


網易新聞:http://3g.163.com/touch/news/subchannel/all?version=v_standard


聚划算:https://jhs.m.taobao.com/m/index.htm#!all

微信公眾號內回複數字「1」


小編拉你進粉絲微信群


不是在文章評論里回復


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員之家 的精彩文章:

2017年PHP 程序員未來路在何方?
為什麼演算法這麼難?
響應式圖片的3種解決方案
Github入門與實踐

TAG:程序員之家 |

您可能感興趣

Valve:Knuckles完全支持Vive無線適配器
三星為Note 9用戶提供免費的Gear VR適配器
V社取消Index VirtualLink適配器
如何創建Istio Mixer適配器——來自Circonus公司的分享
AbleGamers和Twitch慶祝殘疾玩家 PS適配器確認用於PC
Valve官方:Knuckles完全支持Vive無線適配器
三星為Note 9用戶免費提供Gear VR適配器
三星Galaxy Note 9支持Gear VR用戶可免費得適配器
Inclusive Technology發布通過滑鼠操縱iOS設備的適配器
Valve砍掉Index頭顯VirtualLink適配器
Serrano-Santos:適配體結構變化控制釋放納米器件的表徵
外國公司Innerexile開啟ThunderMag磁吸適配器眾籌
如何用適配器使VirtualLink介面顯卡支持Oculus Rift頭
新砝碼!三星Galaxy Note 9支持Gear VR,官方免費贈送適配器
Windows Core OS及Lite系統曝光:彈性適配Holoens 2、摺疊本
Win10 ARM Chromium瀏覽器適配爆料
Valve終放棄VR頭顯VirtualLink適配器
Surface筆記本Type-C適配器來了!
Spotify正式推出適配Apple Watch的APP
Valve Index支持VirtualLink,但要額外購買適配器