react自適應布局px轉rem實現(xiàn)示例詳解
引言
在create-react-app項目中配置絕對單位px轉換為相對單位rem,其中使用postcss-plugin-px2rem轉換css/less/sass文件(此插件不支持內(nèi)聯(lián)樣式轉換),使用編寫的loader轉換內(nèi)聯(lián)樣式
1.安裝插件
npm i postcss-plugin-px2rem
2.配置webpack
1 找到config/webpack.config.js里postcss-loader,增加以下代碼

[
'postcss-plugin-px2rem',
{
rootValue: 16,//這是基準根元素的大小,用于計算 rem 單位。例如,如果你的 HTML 根元素的 font-size 設置為 16px,那么設置 rootValue 為 16 將會將 16px 轉換為 1rem
unitPrecision: 5,//轉換后的 rem 值的小數(shù)點位數(shù)。例如,如果設置為 5,那么轉換后的 rem 值會保留小數(shù)點后的五位
propWhiteList: [],//哪些屬性會被轉換,不填則是都轉換
propBlackList: [],//哪些屬性不會被轉換
exclude: ['/node_modules/'],//排除文件
selectorBlackList: ['noRem'], //定義了哪些選擇器不會被轉換。例如,['noRem'] 表示帶有類名為 noRem 的選擇器不會被轉換。
ignoreIdentifier: false,// 是否忽略選擇器中的標識符。設置為 false 將會處理選擇器中的標識符
replace: true,// 是否替換原始的像素值為轉換后的 rem 值。
mediaQuery: false,//是否在媒體查詢中也進行轉換
minPixelValue: 0// 最小的像素值,小于這個值的像素值將不會被轉換。
}
]這樣就完成了對非內(nèi)聯(lián)樣式的轉換
3.編寫自定義loader轉換內(nèi)聯(lián)樣式

pxToRemLoader代碼
module.exports = function(content, map, meta) {
// let reg = /(\d+(\\.\d+)?)px/g
let reg = /(?<num1>\d+)\.?(?<num2>\d+)?px/g // 匹配所有px 相關的字符
let content1 = content.replace(reg,function(...data){ // px 轉換為帶小數(shù)的rem
var arr = data[data.length-1]
var num1=0, num2=0;
if(arr.num1)num1=parseFloat(arr.num1)
if(arr.num2)num2=parseFloat(arr.num2)
return parseFloat(num1+'.'+num2)/16 + 'rem' // 這里以16px 為pc端轉換基數(shù) 適配1920分辨率
})
return content1
};webpack修改原有配置
{
test: /\.(js|mjs|jsx|ts|tsx)$/,
include: paths.appSrc,
use: [
{
loader: require.resolve("babel-loader"),
options: {
customize: require.resolve(
"babel-preset-react-app/webpack-overrides"
),
presets: [
[
require.resolve("babel-preset-react-app"),
{
runtime: hasJsxRuntime ? "automatic" : "classic",
},
],
],
plugins: [
isEnvDevelopment &&
shouldUseReactRefresh &&
require.resolve("react-refresh/babel"),
].filter(Boolean),
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true,
// See #6846 for context on why cacheCompression is disabled
cacheCompression: false,
compact: isEnvProduction,
},
},
{
loader: path.resolve('./config/webpack/loader/pxToRemLoader.js')
}
]
},借鑒:
http://chabaoo.cn/javascript/296510a17.htm
http://chabaoo.cn/article/211204.htm
以上就是react自適應布局px轉rem實現(xiàn)示例詳解的詳細內(nèi)容,更多關于react自適應布局px轉rem的資料請關注腳本之家其它相關文章!
相關文章
React Native AsyncStorage本地存儲工具類
這篇文章主要為大家分享了React Native AsyncStorage本地存儲工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
create-react-app使用antd按需加載的樣式無效問題的解決
這篇文章主要介紹了create-react-app使用antd按需加載的樣式無效問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
react搭建在線編輯html的站點通過引入grapes實現(xiàn)在線拖拉拽編輯html
Grapes插件是一種用于Web開發(fā)的開源工具,可以幫助用戶快速創(chuàng)建動態(tài)和交互式的網(wǎng)頁元素,它還支持多語言和多瀏覽器,適合開發(fā)響應式網(wǎng)頁和移動應用程序,這篇文章主要介紹了react搭建在線編輯html的站點通過引入grapes實現(xiàn)在線拖拉拽編輯html,需要的朋友可以參考下2023-08-08
React中使用async validator進行表單驗證的實例代碼
react上進行表單驗證是很繁瑣的,在這里使用async-validator處理起來就變的很方便了,接下來通過本文給大家介紹React中使用async validator進行表單驗證的方法,需要的朋友可以參考下2018-08-08
基于Webpack5 Module Federation的業(yè)務解耦實踐示例
這篇文章主要為大家介紹了基于Webpack5 Module Federation的業(yè)務解耦實踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12

