wswmsword / postcss-mobile-forever

一款 PostCSS 插件,将固定尺寸的视图转为可跟随宽度变化而等比例伸缩的视图。To adapt different displays by one mobile viewport.
https://wswmsword.github.io/examples/mobile-forever/vanilla/
MIT License
325 stars 19 forks source link

是否有提供js的转换方法? #58

Closed timelic closed 1 month ago

timelic commented 1 month ago

遇到这样一个场景,有一些参数需要js传入px的数值,而不是通过css设置的。

想问下插件是否有提供某个可以导入js内的方法,输入预设的px数值得到转换后的数值?

比如我预设是12px,在某个大屏下应该映射到16px。这个时候就需要一个转换方法。

timelic commented 1 month ago

我知道一般的ui库是可以通过postcss自动转换的。但这次我遇到一个canvas组件,需要传入px来绘制。

wswmsword commented 1 month ago

行内样式要套运行时的函数:

/**
 * 限制大小的 vw 转换
 * @param {number} n
 * @param {number} idealWidth 理想宽度,设计稿的宽度
 * @param {number} maxWidth 表示伸缩视图的最大宽度
 */
export function vw(n, idealWidth = 375, maxWidth = 600) {
  if (n === 0)
    return n

  const vwN = Math.round(n * 100 / idealWidth)
  const maxN = Math.round(n * maxWidth / idealWidth)
  const cssF = n > 0 ? 'min' : 'max'
  return `${cssF}(${vwN}vw, ${maxN}px)`
}

可以参考下上面这个,存在工具文件里导出来,行内样式套就可以了,vw(375) 运行时变成 min(100vw, 600px)。

或者可以用 scale-view 这个库安装导入使用。

timelic commented 1 month ago

get!非常感谢