Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yugasun/pxtorem-webpack-plugin

A webpack plugin for generating rem for stylesheet and inject auto calculate scripts.
https://github.com/yugasun/pxtorem-webpack-plugin

px2rem webpack-plugin

Last synced: 5 days ago
JSON representation

A webpack plugin for generating rem for stylesheet and inject auto calculate scripts.

Awesome Lists containing this project

README

        

# pxtorem-webpack-plugin

Downloads
Version

A webpack plugin for generating rem for stylesheet and inject auto calculate scripts.

## Install

```
npm install pxtorem-webpack-plugin --save-dev
```

## Usage

This plugin should be used with [html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)

```js
const HtmlWebpackPlugin = require('html-webpack-plugin');
const PxtoremWebpackPlugin = require('pxtorem-webpack-plugin');

module.exports = {
// ...
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
template: './index.html',
}),
new PxtoremWebpackPlugin({
//
templates: [
'index.html'
],
baseWidth: 750,
baseDpr: 2,
remUnit: 10,
}),
],
// ...
}
```

This will generate a file dist/index.html containing the following:

```html

!function(e,t){var n=e.documentElement,i="orientationchange"in window?"orientationchange":"resize",d=function(){var e=n.clientWidth;n.style.fontSize=e/750*10+"px",n.setAttribute("data-dpr",Math.floor(window.devicePixelRatio))};d(),e.addEventListener&&t.addEventListener(i,d,!1)}(document,window);

Vue webpack demo

```

## Options

You can pass a hash of configuration options to html-webpack-plugin. Allowed values are as follows:

|Name|Type|Default|Description|
|:--:|:--:|:-----:|:----------|
|**[`templates`](#)**|`{Array}`|`[]`|The html files need to inject rem calculation scripts|
|**[`baseWidth`](#)**|`{Number}`|`750`|The base width for UI design|
|**[`baseDpr`](#)**|`{Number}`|`2`|base device pixel ratio|
|**[`remUnit`](#)**|`{Number}`|`75`| `rem` unit value |

## Features

- [x] Auto convert px to rem unit depends on customize base configuration.
- [x] Inject script into template for auto calculating `html` root font-size

Below is the source code for injected scripts:

```js
(function (doc, win) {
var docEl = doc.documentElement
var resizeEvent = 'orientationchange' in window ? 'orientationchange' : 'resize'
var recalcFun = function () {
var clientWidth = docEl.clientWidth
// baseWidth will be replace by `options.baseWidth`
// remUnit will be replace by `options.remUnit`
docEl.style.fontSize = remUnit * (clientWidth / baseWidth) + 'px'
// for dpr=2.xx -> 2, dpr=3.xx -> 3
docEl.setAttribute('data-dpr', Math.floor(window.devicePixelRatio))
}
recalcFun()
if (!doc.addEventListener) return
win.addEventListener(resizeEvent, recalcFun, false)
})(document, window)
```

> If you want calculate px to rem more customized, and want to change the convert rules, you can refer to [px2rem.scss](https://github.com/yugasun/px2rem.scss)

## License

[MIT](./LICENSE)