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>