<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