<html>
,咱們經過設置<html>
的字體大小就能夠控制 rem 的大小(1rem = 1根元素字體大小)。<html>
的字體大小,其餘已經使用了rem單位的元素就會自適應顯示相應的尺寸。px2rem
或postcss-px2rem
的原理:將css中px編譯爲rem,配合js根據不一樣手機型號計算出dpr的值,修改<meta>
的viewport值和置<html>
的font-size。create-react-app my-app
複製代碼
yarn eject
複製代碼
yarn
安裝項目所需依賴後,安裝 lib-flexible
、 postcss-px2rem
和 postcss-loader
:yarn add postcss-px2rem lib-flexible
yarn add postcss-loader --dev
複製代碼
<meta>
標籤:<meta name="viewport" content="width=device-width,inital-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
複製代碼
lib-flexible
:import 'lib-flexible';
複製代碼
postcss-px2rem
:const px2rem = require('postcss-px2rem')
複製代碼
postcss-loader
loader裏面添加 :{
loader: require.resolve('postcss-loader'),
options: {
/* 省略代碼... */
plugins: () => [
require('postcss-flexbugs-fixes'),
require('postcss-preset-env')({
autoprefixer: {
flexbox: 'no-2009',
},
stage: 3,
}),
px2rem({remUnit: 37.5}), // 添加的內容
/* 省略代碼... */
],
sourceMap: isEnvProduction && shouldUseSourceMap,
},
},
複製代碼
yarn start
重啓項目,則會發現項目中的postcss-px2rem
配置完成。vue init webpack my-app
複製代碼
cd my-app
複製代碼
yarn
安裝項目所需依賴後,安裝 lib-flexible
和 px2rem-loader
:yarn add lib-flexible
yarn add px2rem-loader --dev
複製代碼
<meta>
標籤:<meta name="viewport" content="width=device-width,inital-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
複製代碼
lib-flexible
:import 'lib-flexible/flexible.js';
複製代碼
px2rem-loader
添加到cssLoaders中。經過搜索找到 generateLoaders
方法,在這裏添加:exports.cssLoaders = function (options) {
/* 省略代碼塊 */
const cssLoader = {
/* 省略代碼塊 */
}
/* 添加的代碼塊 */
const px2remLoader = {
loader: 'px2rem-loader',
options: {
remUnit: 37.5 // 基準大小 baseSize,設計稿寬度/10
}
}
/* 添加的代碼塊 */
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = [cssLoader, px2remLoader] // 添加px2remLoader
if (loader) {
/* 省略代碼塊 */
}
/* 省略代碼塊 */
}
複製代碼
yarn dev
重啓項目,會發現本身設置的px被轉爲rem 了。 以上實現轉換適用於:css
(1)vue 組件中編寫的<style>
</style>
下的css。html
(2)從 react 項目的 index.js 或者 vue 項目的 main.js 中經過import ‘../../static/css/reset.css’
引入css。vue
(3)在 vue 組件的<script type=」text/ecmascript-6″>import ‘../../static/css/reset.css'</script>
中引入css。react
另外的狀況不適用:webpack
(1)在 vue 組件的<style>
</style>
中經過@import 「../../static/css/reset.css
(可考慮上面(2)、(3)的形式引入)。web
(2)外部樣式:<link rel=」stylesheet」 href=」static/css/reset.css」>
。vue-cli
(3)元素內部樣式:style="height: 417px; width: 550px;"
。bash