详解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 相关文章推荐
jquery图片延迟加载 前端开发技能必备系列
Jun 18 Javascript
js调用图片隐藏&显示实现代码
Sep 13 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Dec 14 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
Jan 04 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
js仿新浪微博消息发布功能
Feb 17 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
Apr 21 Javascript
基于input动态模糊查询的实现方法
Dec 12 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
总结javascript三元运算符知识点
Sep 28 Javascript
element实现合并单元格通用方法
Nov 13 Javascript
uni-app微信小程序登录授权的实现
May 22 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的Yii框架中缓存的一些高级用法
2016/03/29 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
vuex入门最详细整理
2020/03/04 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
Python实现读取并保存文件的类
2017/05/11 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
党课学习思想汇报
2014/01/02 职场文书
2016公司年会通知范文
2015/04/25 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
关于Python中*args和**kwargs的深入理解
2021/08/07 Python
MySQL存储过程及语法详解
2022/08/05 MySQL