@unocss-applet/preset-rem-rpx
Version:
Coverts rem <=> rpx for utils.
31 lines (28 loc) • 1.07 kB
JavaScript
import { definePreset } from '@unocss/core';
const remRE = /(-?[.\d]+)rem/g;
const rpxRE = /(-?[.\d]+)rpx/g;
const presetRemRpx = definePreset((options = {}) => {
const { baseFontSize = 16, screenWidth = 375 } = options;
const mode = options.mode ?? "rem2rpx";
return {
name: "unocss-preset-rem-rpx",
postprocess: (util) => {
util.entries.forEach((i) => {
const value = i[1];
if (value && typeof value === "string") {
if (mode === "rem2rpx" && remRE.test(value))
i[1] = rem2rpx(value, baseFontSize, screenWidth);
if (mode === "rpx2rem" && rpxRE.test(value))
i[1] = rpx2rem(value, baseFontSize, screenWidth);
}
});
}
};
});
function rem2rpx(value, baseFontSize, screenWidth) {
return value.replace(remRE, (_, p1) => `${p1 * baseFontSize * (750 / screenWidth)}rpx`);
}
function rpx2rem(value, baseFontSize, screenWidth) {
return value.replace(rpxRE, (_, p1) => `${p1 / (750 / screenWidth) / baseFontSize}rem`);
}
export { presetRemRpx as default, presetRemRpx };