1.下載lib-flexible
使用的是vue-cli+webpack,通過npm來安裝的
npm i lib-flexible --save
2.引入lib-flexible
在main.js中引入lib-flexible
import 'lib-flexible/flexible'
3.設置meta標簽
通過meta標簽镊折,設置設備寬度以及縮放比例
<meta name="viewport" content="width=device-width, initial-scale=1.0">
4.安裝px2rem-loader
npm install px2rem-loader
5.配置px2rem-loader
這里是重要的一步~~
在build文件中找到util.js,將px2rem-loader添加到cssLoaders中着降,如:
const cssLoader = {
loader: 'css-loader',
options: {
minimize: process.env.NODE_ENV === 'production',
sourceMap: options.sourceMap
}
}
**const px2remLoader = {
loader: 'px2rem-loader',
options: {
remUnit: 75
}
}
同時撕氧,在generateLoaders方法中添加px2remLoader
function generateLoaders (loader, loaderOptions) {
**const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader]**
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
6.重啟,一切ok~
當配置完之后易结,只需要重啟下服務精算,就自動轉化為rem了
postcss-pxtorem
npm install -D postcss-pxtorem
postcss.config.js
module.exports = {
plugins: {
autoprefixer: {},
'postcss-pxtorem': {
// 假設設計稿的寬度為750px瓢宦,font-size的基準值為16px
// 動態(tài)設置html的font-size
// 在寬度375的iPhone6下開發(fā),rootValue值通過公式可設置為50px
/*
(function (doc) {
console.log(doc);
var timeoutAdjust = null;
var adjust = function () {
var idealViewWidth = window.screen.width;
var BASEVALUE = 750;
doc.documentElement.style.fontSize = (idealViewWidth / BASEVALUE) * 100 + 'px';
};
adjust();
window.addEventListener('resize', function () {
clearTimeout(timeoutAdjust);
timeoutAdjust = setTimeout(adjust, 50);
}, false);
} (document));
*/
rootValue: 50, // 根元素字體大小(Number)
unitPrecision: 5, // 允許REM單位增長的十進制數(shù)灰羽,即小數(shù)點后可帶多少位
// 需要替換的屬性
propList: ['font', 'font-size', 'line-height', 'letter-spacing'],
// 需要排除轉換的css選擇器
selectorBlackList: ['wx'],
// 替換包含rems的規(guī)則驮履,而不是添加回退
replace: true,
// 允許在媒體查詢中轉換px
mediaQuery: false,
// 設置要替換的最小像素值
minPixelValue: 0
}
}
}
說明
1. `rootValue` (Number)根元素字體大小。
2. `unitPrecision` (Number)允許REM單位增長的十進制數(shù)谦趣。
3. `propList` (Array)可以從px更改為rem的屬性疲吸。
- 值必須完全匹配。
- 使用通配符`*`匹配所有屬性前鹅。例:`['*']`
- `*`在單詞的開頭或結尾使用摘悴。( `['*position*']` 會匹配background-position-y)
- `!`用于不匹配這個屬性。例:`['*', '!letter-spacing']`舰绘,除了不會轉換`letter-spacing`的px為rem蹂喻,其他的都會轉換葱椭。
- 將`!`前綴與其他前綴組合在一起口四。例:`['*', '!font*']`
4. `selectorBlackList` (Array)要忽略的選擇器并保留為px孵运。
- 如果value是string,則檢查selector是否包含字符串蔓彩。
- `['body'] `會匹配 `.body-class`
- 如果value是regexp治笨,它會檢查選擇器是否與正則表達式匹配。
- `[/^body$/]`會匹配`body`但不會`.body`赤嚼。
5. `replace` (Booleam)替換包含rems的規(guī)則旷赖,而不是添加回退。
6. `mediaQuery` (Booleam)允許在媒體查詢中轉換px更卒。
7. `minPixelValue` (Number)設置要替換的最小像素值等孵。
···