windicss icon indicating copy to clipboard operation
windicss copied to clipboard

windicss是否有方法配置固定的px

Open yudan215 opened this issue 2 years ago • 6 comments

目前windicss的单位是rem,是否有方法可配置成是固定的px,不使用rem,目前在移动端横屏会改变html的文字大小,尺寸没法固定

yudan215 avatar Feb 25 '22 00:02 yudan215

自己配置一份自定义 theme 不可以吗?如果你不想一个一个字段去覆盖的话也可以用 addDynamic 写一个自定义插件,通过获取到 theme 中 spacing 的 rem 去做一个简单的计算 X rem * 16 = Y px 然后输出为 px 单位的数值

ItsRyanWu avatar Feb 28 '22 05:02 ItsRyanWu

可以通过覆盖theme.spacing来实现

function createSpacing() {
    let ans = {}
    for (let i = 1; i < 1000; ++i) {
        ans[i] = `${i / 100}rem` // 也可以替换成其他的尺寸和单位
    }
    return ans
}

export default defineConfig({
    theme: {
        // spacing:{
        //     100: '1rem'
        // }
        spacing: createSpacing()
    },
}

这种方式虽然看起来有点暴力,但还是比较好用的。

也可以单独定义一个动态工具类,比如rpx-前缀,表示rpx-w-100编译成.rpx-w-100{width:100rm;}

import plugin from 'windicss/plugin'
import { defineConfig } from 'windicss/helpers'

export default defineConfig({
    // ...
    plugins: [
       plugin(({ addDynamic, theme, e, }) => {
            function handleCustomRem(prop: string | string[]) {
                return ({ Utility }) => {
                    return Utility.handler.handleSize()
                        .handleNumber(1, undefined, 'float', (number) => `${number / 100}rem`)
                        .handleNegative()
                        .createProperty(prop)
                }
            }

            // 感觉得把用到的属性都声明一下,还是有点麻烦
            addDynamic('rpx-w', handleCustomRem(['width']))
            addDynamic('rpx-h', handleCustomRem(['height']))
            // ... 
        })
    ],
})

我也是刚接触到windicss,有啥错误的地方请帮忙指正

tangxiangmin avatar Mar 03 '22 06:03 tangxiangmin

我写了一个插件可以自动将 rem 转换成 rpx,此外还包含对于 windicss 自动值推导兼容的功能,感兴趣可以使用一下:https://github.com/dcasia/wechat-mini-program-tailwind 有 issue 我会及时处理

ItsRyanWu avatar Mar 25 '22 07:03 ItsRyanWu

我写了一个插件可以自动将 rem 转换成 rpx,此外还包含对于 windicss 自动值推导兼容的功能,感兴趣可以使用一下:https://github.com/dcasia/wechat-mini-program-tailwind 有 issue 我会及时处理

是否支持自定义?例如是PX?

yudan215 avatar Mar 30 '22 05:03 yudan215

You can directly use px suffix I think.

e.g. w-100px, p-4px

Elinia avatar Apr 18 '22 07:04 Elinia

You can write it like this: ml-[22PX] w-[160PX] h-[160PX], writing it like this will not convert to rem units.

Mrlilili avatar Mar 21 '23 10:03 Mrlilili