详解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打印网页部分内容的脚本
Nov 17 Javascript
javascript 页面划词搜索JS
Sep 28 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
Jul 07 Javascript
jQuery中before()方法用法实例
Dec 25 Javascript
jQuery oLoader实现的加载图片和页面效果
Mar 14 Javascript
javascript实现确定和取消提示框效果
Jul 10 Javascript
干货!教大家如何选择Vue和React
Mar 13 Javascript
Vue 2.0 服务端渲染入门介绍
Mar 29 Javascript
最实用的JS数组函数整理
Dec 05 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
Vue实现表格中对数据进行转换、处理的方法
Sep 06 Javascript
JS typeof fn === 'function' && fn()详解
Aug 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
国内咖啡文化
2021/03/03 咖啡文化
php中变量及部分适用方法
2008/03/27 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
Python之读取TXT文件的方法小结
2018/04/27 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
Python: 传递列表副本方式
2019/12/19 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
问卷调查计划书
2014/01/10 职场文书
优秀村官事迹材料
2014/01/10 职场文书
服装行业创业计划书范文
2014/02/05 职场文书
教师远程培训感言
2014/03/06 职场文书
学校募捐倡议书
2014/05/14 职场文书
应届生求职信范文
2014/05/26 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
导师对论文的学术评语
2015/01/04 职场文书
导游词之神仙居景区
2019/11/15 职场文书
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA