Based on postcss
A plug-in for converting rpx units in CSS into VW units. It is applicable to the design draft with fixed width and uncertain height in the mobile end. You can also set the width and matching unit by yourself.
/* before */
.rule {
margin: 10rpx 375rpx 0rpx 10px;
height: 375rpx;
background: url(icon-16rpx.jpg);
}
/* after */
.rule {
margin: 1.33333vw 50vw 0 10px;
height: 50vw;
background: url(icon-16rpx.jpg);
}
First install postcss-loader
And postcss
。 CLI with CSS loader integrated can skip this step
npm i postcss postcss-loader -D
Install the plug-in
npm i postcss-rpx-plugin -D
Please use the version of postcss@7 postcss@6 postcss@5
# postcss@7 postcss@6 postcss@5
npm i [email protected] -D
in postcss.config.js
module.exports = {
plugins: [
// register
require("postcss-rpx-plugin"),
],
};
custom configure postcss.config.js
module.exports = {
plugins: [
[
"postcss-rpx-plugin",
{
unit: "rpx",
width: 750,
precision: 5,
outUnit: "vw",
exclude: "",
},
],
],
};
or in package.json
{
"dependencies": {},
"devDependencies": {},
"postcss": {
"plugins": {
"postcss-rpx-plugin": {
"unit": "rpx",
"width": 750,
"precision": 5,
"outUnit": "vw",
"exclude": ""
}
}
}
}
const unit = options?.unit || "rpx"; // unit
const width = options?.width || 750; // ui design width
const precision = options?.precision || 5; // decimal places
const outUnit = options?.outUnit || "vw"; // out unit
const exclude = options?.exclude || ""; // exclude some file,support regex
- fix readme
- add test
it("should exclude file", () => { const rules = ".rule { margin: 10rpx 375rpx 0rpx 10px; }"; const expected = ".rule { margin: 10rpx 375rpx 0rpx 10px; }"; const from = "c:/a/b/c/d.css"; const pc = postcss(rpx2vm({ exclude: ".css" })); const processed = pc.process(rules, { from }).css; expect(processed).toBe(expected); });
- support postcss@8
- fix build
options?.unit
error - fix
@type
?
- add @type
-
Float rpx
it("should replace the rpx unit with vw - Float", () => { const rules = ".rule { height: 375.0rpx; }"; const expected = ".rule { height: 50vw; }"; const processed = postcss(rpx2vm()).process(rules).css; expect(processed).toBe(expected); });
-
url ignore
it("should not replace values in `url()`", () => { const rules = ".rule { background: url(icon-16rpx.jpg); }"; const expected = ".rule { background: url(icon-16rpx.jpg); }"; const processed = postcss(rpx2vm()).process(rules).css; expect(processed).toBe(expected); });
- Int rpx
it("should replace the rpx unit with vw - Int", () => { const rules = ".rule { margin: 10rpx 375rpx 0rpx 10px; }"; const expected = ".rule { margin: 1.33333vw 50vw 0 10px; }"; const processed = postcss(rpx2vm()).process(rules).css; expect(processed).toBe(expected); });
You are welcome to put forward your ideas and feedback issues