next(react)框架結合lib-flexible,postcss-pxtorem做pc端rem適配解決font-size一直是54px


安裝lib-flexible,postcss-pxtorem

1 yarn add lib-flexible
2 yarn add postcss-pxtorem

 

配置postcss-pxtorem

在根目錄下建立postcss.config.js文件

 1 const pxtorem = require("postcss-pxtorem");
 2 module.exports = {
 3 plugins: [
 4 pxtorem({
 5 rootValue: 136,//我這里配置的是我1366分辨率下的基准值,會在下面解釋
 6 unitPrecision: 5,
 7 propList: ["*"],
 8 selectorBlackList: [/^\.nop2r/, /^\.am/,'html'],
 9 //排除antd樣式,由於我給html設置了min-width,所以把html也排除在外不做rem轉換
10 replace: true,
11 mediaQuery: false,
12 minPixelValue: 0
13 })
14 ]
15 }

 

配置lib-flexible

正常情況下我們在app.js中import ‘lib-flexible’就可以實現引入,但我在引入后啟動項目,一直在報window is not defined,研究了很久才找到解決方法。

1 const setRem = async ()=>{
2 await require('lib-flexible')
3 }
4 useEffect(()=>{
5 setRem()
6 window.addEventListener('resize',setRem)
7 })

 

終於沒有報錯了!

在這種情況下適配移動端已經沒問題了,可是pc端屏幕情況下用控制台查看元素,發現font-size一直是54px

1 <html data-dpr="1" style="font-size: 54px;">

 

 

解決方法:
修改node_modules\lib-flexible\flexible.js文件的refreshRem,可見原代碼中width / dpr > 540的情況下默認不隨width改變,我們把這段代碼修改如下:

1 function refreshRem(){
2 var width = docEl.getBoundingClientRect().width;
3 if (width / dpr > 540) {
4 width = width * dpr;
5 }
6 var rem = width / 10;
7 docEl.style.fontSize = rem + 'px';
8 flexible.rem = win.rem = rem;
9 }

 

最后

根據設計圖以及開發情況下的分辨率,修改postcss-pxtorem.js文件的rootValue值,正常是 分辨率寬/10


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM