1. 程式人生 > >Rem-- ui圖與適配手機的px換算

Rem-- ui圖與適配手機的px換算

找了很多的文件,就這個問題,越看越糊塗,寫的公式都是直接給出,但是並沒有說公式是怎麼推演出來的,搞得我好煩。rem =x/75, 實在搞不懂,就自己寫了,

大家都明白,假設html的fontSize:16px;那麼1rem = 16px;是不是可以理解為1個rem單位等於16px;

以750的設計稿為例:(手淘外掛 flexible.js)

1--把設計稿平均分成10份,每份是750/10=75px;把每份假設為一個叫xm單位,那麼就是1xm = 75px;這句是不是和上一句很像,可以假設為750px的頁面,他的html的fontsize=75px;

2--現在想一下手機是375px的頁面,也把他按照步驟1平均分成10份,每份375/10 = 37.5px,  設定為html的fontsize ,結果:1rem = 37.5px; 那麼其他的手機的html的fontsize用js表示

     fontSize = document.documentElement.clientWidth/10 + "px";

3--暫時忘記1,2步驟,iphone6是2倍畫素的手機,與設計稿對比,750的寬,在iphone6是375px,或者,量取設計稿中一個元素,width = 100px,  那麼在手機端css的值應為50px,看下列表格,已經知道的資料就是前兩列的值。那麼後兩列的值是怎麼算的呢

750UI圖假設的fontsize的值(步驟1) 手機 html fontsize的值(步驟2) UI量取的寬度(fontsize = 75)
與手機端的css的寬度 css 寫的最終rem值
 fontsize  = 75px iphone6(fontsize = 37.5px) 750px 375px 10rem
 fontsize  = 75px iphone6(fontsize=37.5px) 100px 50px 1.3333rem==(font-size/50)
 fontsize  = 75px iphone5(fontsize = 32px)
100px 42.66px 1.3333rem==(font-size/32)
 fontsize  = 75px iphone6plus(fontsize=41.4px) 100px 55.19px 1.3333rem==(font-size/41.4)

 

那麼現在用小學數學寬高比想一下,x1/y1 = x2/y2,分子都是寬,分母都是高,已經知道其中三個元素的值,另一個就不難求了吧,現在已經知道了設計稿的fontsize的值75px,裝置的手機html的fontSize,假設量取設計稿中的一個元素的寬為100px,求在手機端顯示的css寬度是多少,

求取的css width = 100*37.5/75 = 50px  ;     

若量取的設計稿寬度是200px,  css widht = 200*37.5/75 = 100px;  那麼rem的值,在手機端應是rem = 100px/(fontsize)37.5px=2.666rem  ;   設計稿的換算 200px/75px = 2.666rem;

由此可以證明, 75 就是設計稿轉手機適配的基數     ,css 寫的rem值 就應該是  rem = 量取的設計稿元素的寬/75 ;  這個值用在cssrem外掛的轉換單位的值。

再說下,px轉rem的工具,

1 如果你使用sublime ,那麼可以在sublime上安裝cssrem的外掛,

2 postcss-px2rem https://www.npmjs.com/package/postcss-px2rem

3 px2rem-loader https://www.npmjs.com/package/px2rem-loader

以上任意一種都要比sass less 的前處理器寫的要簡單。

ok, 就解釋到這裡。

以上純屬個人理解。