react自适应布局px转rem实现示例详解

 更新时间:2023年08月28日 11:59:14   作者:mengyuhang4879  
这篇文章主要为大家介绍了react自适应布局px转rem实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

在create-react-app项目中配置绝对单位px转换为相对单位rem,其中使用postcss-plugin-px2rem转换css/less/sass文件(此插件不支持内联样式转换),使用编写的loader转换内联样式

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 值的小数点位数。例如,如果设置为 5,那么转换后的 rem 值会保留小数点后的五位
                                      propWhiteList: [],//哪些属性会被转换,不填则是都转换
                                      propBlackList: [],//哪些属性不会被转换
                                      exclude: ['/node_modules/'],//排除文件
                                      selectorBlackList: ['noRem'], //定义了哪些选择器不会被转换。例如,['noRem'] 表示带有类名为 noRem 的选择器不会被转换。
                                      ignoreIdentifier: false,// 是否忽略选择器中的标识符。设置为 false 将会处理选择器中的标识符
                                      replace: true,// 是否替换原始的像素值为转换后的 rem 值。
                                      mediaQuery: false,//是否在媒体查询中也进行转换
                                      minPixelValue: 0// 最小的像素值,小于这个值的像素值将不会被转换。
                                  }
                              ]

这样就完成了对非内联样式的转换

3.编写自定义loader转换内联样式

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 转换为带小数的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端转换基数 适配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')
                              }
                          ]
                      },

借鉴:

https://www.jb51.net/javascript/296510a17.htm

https://www.jb51.net/article/211204.htm

以上就是react自适应布局px转rem实现示例详解的详细内容,更多关于react自适应布局px转rem的资料请关注脚本之家其它相关文章!

相关文章

  • React实现类似于Vue中的插槽的项目实践

    React实现类似于Vue中的插槽的项目实践

    本文主要介绍了React实现类似于Vue中的插槽的项目实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 详解React自定义Hook

    详解React自定义Hook

    在React项目中,我们经常会使用到React自带的几个内置Hooks,如 useState,useContext和useEffect。虽然在React中找不到这些 Hooks,但React提供了非常灵活的方式让你为自己的需求来创建自己的自定义Hooks,想了解更多的,欢迎阅读本文
    2023-04-04
  • react-native-tab-navigator组件的基本使用示例代码

    react-native-tab-navigator组件的基本使用示例代码

    本篇文章主要介绍了react-native-tab-navigator组件的基本使用示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-09-09
  • react-native组件中NavigatorIOS和ListView结合使用的方法

    react-native组件中NavigatorIOS和ListView结合使用的方法

    这篇文章主要给大家介绍了关于react-native组件中NavigatorIOS和ListView结合使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-09-09
  • React实现模糊搜索和关键字高亮的示例代码

    React实现模糊搜索和关键字高亮的示例代码

    这篇文章主要为大家详细介绍了React如何实现模糊搜索和关键字高亮的效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • React 错误边界Error Boundary使用示例解析

    React 错误边界Error Boundary使用示例解析

    这篇文章主要为大家介绍了React 错误边界Error Boundary使用示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 浅析React中的受控组件和非受控组件

    浅析React中的受控组件和非受控组件

    具体来说这是一种react非受控组件,其状态是在input的react内部控制,不受调用者控制。可以使用受控组件来实现。下面就说说这个React中的受控组件与非受控组件的相关知识,感兴趣的朋友一起看看吧
    2021-05-05
  • Remix 路由模块输出对象handle函数

    Remix 路由模块输出对象handle函数

    这篇文章主要为大家介绍了Remix 路由模块输出对象handle函数使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • react配置代理setupProxy.js无法访问v3.0版本问题

    react配置代理setupProxy.js无法访问v3.0版本问题

    这篇文章主要介绍了react配置代理setupProxy.js无法访问v3.0版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • React项目搭建与Echarts工具使用详解

    React项目搭建与Echarts工具使用详解

    这篇文章主要介绍了React项目搭建与Echarts工具使用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03

最新评论