详解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中next()方法用法实例
Jan 07 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
jquery实现的横向二级导航效果代码
Aug 26 Javascript
javascript闭包(Closure)用法实例简析
Nov 30 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
May 05 Javascript
javascript运算符——位运算符全面介绍
Jul 14 Javascript
Angular2  NgModule 模块详解
Oct 19 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
Feb 15 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
Aug 23 Javascript
JS实现从对象获取对象中单个键值的方法示例
Jun 05 Javascript
js抽奖转盘实现方法分析
May 16 Javascript
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
详解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
如何设置mysql允许外网访问
2013/06/04 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
Django实现自定义404,500页面教程
2017/03/26 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
Python变量类型知识点总结
2019/02/18 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
大学生军训广播稿
2014/01/24 职场文书
给老师的检讨书
2014/02/11 职场文书
商务日语专业自荐信
2014/04/17 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
大明湖导游词
2015/02/03 职场文书
长江七号观后感
2015/06/11 职场文书
Django程序的优化技巧
2021/04/29 Python
Python3接口性能测试实例代码
2021/06/20 Python
Nginx配置之禁止指定IP访问
2022/05/02 Servers