详解react内联样式使用webpack将px转rem


Posted in Javascript onSeptember 13, 2018

背景

在开发react项目时,很多时候我们把style写在css、less、scss里,经过像postcss这样的配置处理,但有没有这样一种需求呢,像有些样式我们直接写在xml标签上style里,然后也能进行处理,如px2rem能将px转rem,是否在style上写也能实现。

思路

我们在webpack,/.(js|jsx)?$/这样babel-loader之前(webpack从右往左)加一个loader把需要转变的px进行替换,不就好了,先找找有没有这样的loader,我找了下没找到,只能自己写一个了

代码

const loaderUtils = require('loader-utils');

// 默认参数
const defaultopts = {
  remUnit: 100, // rem unit value (default: 100)
  remFixed: 2, // rem value precision (default: 2)
};
// 获取webpack配置好的参数
const opts = loaderUtils.getOptions(this);
// 将参数组合
const config = Object.assign({}, defaultopts, opts);
const ZPXRegExp = /\b(\d+(\.\d+)?)SUPX\b/;

module.exports = function (source) {
  let pxGlobalRegExp = new RegExp(ZPXRegExp.source, 'g');
  if (this.cacheable) {
    this.cacheable();
  }
  // 先test下有没有符合的如果有再进行替换
  if (pxGlobalRegExp.test(source)) {
    return source.replace(pxGlobalRegExp, ($0, $1) => {
      let val = $1 / config.remUnit;
      // 精确到几位
      val = parseFloat(val.toFixed(config.remFixed));
      return val === 0 ? val : val + 'rem';
    });
  } else {
    return source;
  }
};

用法

{
  loader: path.join(rootPath, 'loaders/jsxPx2RemLoader'),
  options: {
    remUnit: 100,
    remFixed: 3
  }
}

源代码

源码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
Javascript 对象的解释
Nov 24 Javascript
Javascript 键盘事件的组合使用实现代码
May 04 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
May 17 Javascript
javascript中call和apply方法浅谈
Sep 27 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
Oct 17 Javascript
用javascript将数据导入Excel示例代码
Sep 10 Javascript
js判断iframe中元素是否存在的实现代码
Dec 24 Javascript
微信小程序 JS动态修改样式的实现代码
Feb 10 Javascript
详解vue过滤器在v2.0版本用法
Jun 01 Javascript
JavaScript设计模式之构造函数模式实例教程
Jul 02 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
Apr 15 Javascript
详解webpack 热更新优化
Sep 13 #Javascript
Vue中使用 setTimeout() setInterval()函数的问题
Sep 13 #Javascript
Angularjs之ngModel中的值验证绑定方法
Sep 13 #Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 #Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
Sep 13 #Javascript
mpvue中使用flyjs全局拦截的实现代码
Sep 13 #Javascript
AngularJS修改model值时,显示内容不变的实例
Sep 13 #Javascript
You might like
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
修复IE9&safari 的sort方法
2011/10/21 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
详解python配置虚拟环境
2019/04/08 Python
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
大学生学年自我鉴定
2014/02/10 职场文书
采购部长岗位职责
2014/06/13 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年护理部工作总结
2014/11/14 职场文书
python实现批量移动文件
2021/04/05 Python
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android