1、安装
yarn add postcss-px2rem-exclude
2、在config-overrides.js
文件中配置addPostcssPlugins
const{override,addPostcssPlugins}=require('customize-cra')
module.exports=override(addPostcssPlugins([require('postcss-px2rem-exclude')({
remUnit:75,
propList:['*'],// exclude: /node_modules/,
exclude:/node_modules\/antd-mobile/})]))
3、在index.html
文件的<head></ head>
中添加配置即可,我这里是以750px为基准
<script>(function(win, lib){var doc= win.document;var docEl= doc.documentElement;var metaEl= doc.querySelector('meta[name="viewport"]');var flexibleEl= doc.querySelector('meta[name="flexible"]');var dpr=0;var scale=0;var tid;var flexible= lib.flexible||(lib.flexible={});if(metaEl){
console.warn("将根据已有的meta标签来设置缩放比例");var match= metaEl.getAttribute("content").match(/initial-scale=([d.]+)/);if(match){
scale=parseFloat(match[1]);
dpr=parseInt(1/ scale);}}elseif(flexibleEl){var content= flexibleEl.getAttribute("content");if(content){var initialDpr= content.match(/initial-dpr=([d.]+)/);var maximumDpr= content.match(/maximum-dpr=([d.]+)/);if(initialDpr){
dpr=parseFloat(initialDpr[1]);
scale=parseFloat((1/ dpr).toFixed(2));}if(maximumDpr){
dpr=parseFloat(maximumDpr[1]);
scale=parseFloat((1/ dpr).toFixed(2));}}}if(!dpr&&!scale){var isAndroid= win.navigator.appVersion.match(/android/gi);var isIPhone= win.navigator.appVersion.match(/iphone/gi);var devicePixelRatio= win.devicePixelRatio;if(isIPhone){// iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案if(devicePixelRatio>=3&&(!dpr|| dpr>=3)){
dpr=3;}elseif(devicePixelRatio>=2&&(!dpr|| dpr>=2)){
dpr=2;}else{
dpr=1;}}else{// 其他设备下,仍旧使用1倍的方案
dpr=1;}
scale=1/ dpr;}
docEl.setAttribute("data-dpr", dpr);if(!metaEl){
metaEl= doc.createElement("meta");
metaEl.setAttribute("name","viewport");
metaEl.setAttribute("content","initial-scale="+
scale+", maximum-scale="+
scale+", minimum-scale="+
scale+", user-scalable=no");if(docEl.firstElementChild){
docEl.firstElementChild.appendChild(metaEl);}else{var wrap= doc.createElement("div");
wrap.appendChild(metaEl);
doc.write(wrap.innerHTML);}}functionrefreshRem(){var width= docEl.getBoundingClientRect().width;// if (width / dpr > 540) {// width = 540 * dpr;// }var rem= width/10;
docEl.style.fontSize= rem+"px";
flexible.rem= win.rem= rem;}
win.addEventListener("resize",function(){clearTimeout(tid);
tid=setTimeout(refreshRem,300);},false);
win.addEventListener("pageshow",function(e){if(e.persisted){clearTimeout(tid);
tid=setTimeout(refreshRem,300);}},false);if(doc.readyState==="complete"){
doc.body.style.fontSize=12* dpr+"px";}else{
doc.addEventListener("DOMContentLoaded",function(e){
doc.body.style.fontSize=12* dpr+"px";},false);}refreshRem();
flexible.dpr= win.dpr= dpr;
flexible.refreshRem= refreshRem;
flexible.rem2px=function(d){var val=parseFloat(d)*this.rem;if(typeof d==="string"&& d.match(/rem$/)){
val+="px";}return val;};
flexible.px2rem=function(d){var val=parseFloat(d)/this.rem;if(typeof d==="string"&& d.match(/px$/)){
val+="rem";}return val;};})(window, window["lib"]||(window["lib"]={}));</script>