UNPKG

@unocss-applet/preset-rem-rpx

Version:
31 lines (28 loc) 1.07 kB
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 };