我在網上找到了一些資料你們也能夠去閱讀下 從網易與淘寶的font-size思考前端設計稿與工做流、移動web資源整理。可是在讀到單位換算時我有點蒙圈,下面我就講我本身的理解說給你們聽聽,也歡迎你們留言探討不一樣的解決方案。css
首先網易的設計稿是基於iPhone5設計的也就是寬度640px。(先不考慮dpr的問題下面會說)而後設置1rem等於100px( HTML font-size爲100px),至關於6.4rem = 100%寬度 = 設備的寬度。html
因爲是基於6.4rem開發。iPhone5 的物理像素是320px(dpr是2.0),若是此時還想讓6.4rem等於設備寬度只能調整1rem對應font-size的比例, 320 / 6.4 = 50 讓1rem=50px就能夠實現。若是想讓 iPhone6 適配只須要 1rem = (375 / 6.4) = 58.59375px 就能夠實現iPhone6的適配,這個方法能夠適配市面上絕大多數的移動端設備。前端
只須要加下面這句話能夠實現我上述效果。web
document.documentElement.style.fontSize = document.documentElement.clientWidth / 6.4 + 'px';
複製代碼
此次我們仍是拿iPhone5(640px)的設計稿舉例,淘寶的思想是不管當前頁面多寬,讓10rem = 頁面寬度 = 100%,因此1rem = 64px 而後經過dpr設置縮放整個頁面,以達到高保真的效果。npm
iPhone5的寬度是640px,頁面最終完成效果也是640px,iPhone的dpr是2,因此設置 <meta name="viewport" content="initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no">
就能夠了適配iPhone5了。固然這些東西lib-flexible都幫咱們作好了。我只不過說一下,讓好奇的小夥伴知道原理。bash
cnpm intall lib-flexible // 安裝lib-flexible
import 'lib-flexible' // 在 src\main.js 中引入 lib-flexible
複製代碼
完成上面代碼就至關於實現了rem動態計算了,若是此時在iPhone5上有一個元素是寬150px,高是200px,想計算rem寬是 150/64 = 2.34375rem,高是200/64 = 3.125rem。less
至於dpr的縮放問題,那個就不用關心了。lib-flexible已經幫你作好了。你只須要關心px轉換rem便可。佈局
cnpm intall px2rem-loader // 安裝px2rem-loader
複製代碼
在 build\utils.js 修改爲下面的代碼。post
// 在 cssLoaders 方法內添加下列代碼
const px2remLoader = {
loader: 'px2rem-loader',
options: {
remUnit: 64 //設計稿寬度/10
}
// 將 cssLoaders 方法內的generateLoaders的方法內的 loaders 變量添加 px2remLoader
const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader, lessLoader ] : [cssLoader, px2remLoader, lessLoader ]
複製代碼
後語:寫這篇文章已經計劃好久了,但是一直沒有時間寫。寫完後發現最近網上很流行vm配合rem佈局方案,而且淘寶也升級了佈局方案,改爲了定位方式的寫法。我近期深究下vm的解決方案。到時候分享一篇文章給你們。flex