【乾貨】前端rem單位的正確使用姿式

簡單闡述下px、em、rem以前的關係(其實網上不少,我這裏稍微提一下)。css

先拋出一個問題:爲何要選擇rem?

px:像素是相對於顯示器屏幕分辨率而言的相對長度單位。pc端使用px倒也無所謂,但是在移動端,由於手機分辨率種類頗多,不可能一個個去適配,這時px就顯得很是無力,因此就要考慮em和rem。html

em:繼承父級的,假設html的font-size默認爲16px,body字體大小定義爲50%,那麼在body裏字體大小就是1em=8px了。可當你又定義了一個div,而後把字體設置成了50%,請問,如今div下的1em等於多少?由於繼承了父級的值,如今這個div裏的1em=4px,這麼嵌套下去的話,抱歉,我數學很差!全部rem就出現了。css3

rem:是em的升級版,rem只會相對html的值,不會受到父級的影響,這樣的好處在於:從em裏的例子來說,1rem始終會等於8px。使用的時候不須要從新計算rem此時的大小。rem由於是css3增長的,因此ie8或如下請無視(始終想不明白,爲何國人至今對微軟都放棄的ie這麼依依不捨)。git

以上也算是講清了他們之間的區別和關係,rem更多的運用於移動H5頁面的適配使用。github

下面來講說怎麼更方便的使用rem和本身開文處提到的坑!

以前遇到的坑是這樣的。瀏覽器默認的字體大小都是16px(注意這裏),因此要使1rem=10px,那麼只要在html選擇器中聲明Font-size=62.5%(10÷16*100%=62.5%)就能夠直接使用1rem=10px單位進行換算,其實這個算法是沒有錯的。但是,哪裏來的自信讓每一個瀏覽器默認字體都是16px????反正我也不知道自信哪來。。如今Chrome默認大小能夠是12px也能夠是16px,那麼問題來了,國內瀏覽器,有幾個不是用的谷歌內核。因此html選擇器中聲明Font-size=62.5%,1rem就等於10px的換算就有點坑爹了,對於我這種一個像素都糾結的人來講,很蛋疼。這坑是我當時買書學h5的時候預留下的後遺症,如今這個毛病還有,由於快和方便 T_T!真是矛盾。。。算法

坑能夠填。rem單位仍是能夠變的容易換算和精準。因此就去找了些工具和資料。瀏覽器

由於rem是相對html的,那麼只要將html選擇器設置一個絕對大小的值:好比在html選擇器設置font-size:20px;那麼1rem=20px(解釋下爲何是20而不是其餘的,首先10的倍數容易計算,那爲何不是10自己而是20?如今Chrome最小的字體是12px,因此10px是無效的,進一步就取20px);如今是否是和效果圖一個像素都不差?!!!grunt

且要兼容手機各個分別率,使用媒體查詢media 能夠設置不一樣的大小,這樣在常規的設備中均可以精準到每個像素。工具

這麼換算來換算去好麻煩有木有!!全部發現了下面的換算工具,媽媽不再用說我數學題不會作了!字體

下面是我直接在工具複製過來的現成rem換算適配代碼↓(設計稿寬度:640,字體值:20)

@media only screen and (max-width: 1080px), only screen and (max-device-width:1080px) {
 html,body {
 font-size:16.875px;
 }
 }
 @media only screen and (max-width: 960px), only screen and (max-device-width:960px) {
 html,body {
 font-size:15px;
 }
 }
 @media only screen and (max-width: 800px), only screen and (max-device-width:800px) {
 html,body {
 font-size:12.5px;
 }
 }
 @media only screen and (max-width: 720px), only screen and (max-device-width:720px) {
 html,body {
 font-size:11.25px;
 }
 }
 @media only screen and (max-width: 640px), only screen and (max-device-width:640px) {
 html,body {
 font-size:10px;
 }
 }
 @media only screen and (max-width: 600px), only screen and (max-device-width:600px) {
 html,body {
 font-size:9.375px;
 }
 }
 @media only screen and (max-width: 540px), only screen and (max-device-width:540px) {
 html,body {
 font-size:8.4375px;
 }
 }
 @media only screen and (max-width: 480px), only screen and (max-device-width:480px) {
 html,body {
 font-size:7.5px;
 }
 }
 @media only screen and (max-width: 414px), only screen and (max-device-width:414px) {
 html,body {
 font-size:6.46875px;
 }
 }
 @media only screen and (max-width: 400px), only screen and (max-device-width:400px) {
 html,body {
 font-size:6.25px;
 }
 }
 @media only screen and (max-width: 375px), only screen and (max-device-width:375px) {
 html,body {
 font-size:5.859375px;
 }
 }
 @media only screen and (max-width: 360px), only screen and (max-device-width:360px) {
 html,body {
 font-size:5.625px;
 }
 }
 @media only screen and (max-width: 320px), only screen and (max-device-width:320px) {
 html,body {
 font-size:5px;
 }
 }
 @media only screen and (max-width: 240px), only screen and (max-device-width:240px) {
 html,body {
 font-size:3.75px;
 }

下載是下載地址,離線和在線都有

離線版本:https://github.com/leon776/grunt-px2rem

在線版本:http://mxd.tencent.com/wp-content/uploads/2014/11/rem.html
相關文章
相關標籤/搜索