在以往我们使用vue-cli构建的项目中,通常使用postcss-px-to-viewport这个库把px转为vw做不同设备的兼容,兼容方法也很简单,npm i postcss-px-to-viewport安卓依赖,在根目录新建 .postcssrc.js(优先级高) 或者 postcss.config.js,重启项目即可实现px转vw。

如果我们使用vite构建项目或者使用vue@latest创建项目,在根目录新建 .postcssrc.js(优先级高) 或者 postcss.config.js就会报错。解决方案如下

在vite.config.js文件中

import { fileURLToPath, URL } from 'node:url'
import postcsspxtoviewport from 'postcss-px-to-viewport'
// import Components from 'unplugin-vue-components/vite';
// import { VantResolver } from '@vant/auto-import-resolver';
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
  plugins: [
    vue(),
    // 解析模板自动注册vant组件
    // Components({
    //  resolvers: [VantResolver()],
    // }),
  ],
  css: {
    postcss: {
      plugins: [
        postcsspxtoviewport({
          unitToConvert: 'px',
          viewportWidth: 375,
          unitPrecision: 6,
          propList: ['*'],
          viewportUnit: 'vw',
          fontViewportUnit: 'vw',
          selectorBlackList: ['ignore-'],
          minPixelValue: 1,
          mediaQuery: false,
          replace: true,
          exclude: [/^(?!.*node_modules\/vant)/],
          landscape: false
        }),
        postcsspxtoviewport({
          // 要转化的单位
          unitToConvert: 'px',
          // UI设计稿的大小
          viewportWidth: 750,
          // 转换后的精度
          unitPrecision: 6,
          // 转换后的单位
          viewportUnit: 'vw',
          // 字条转换后的单位
          fontViewportUnit: 'vw',
          // 能转换的属性,*表示所有属性,!border表示border不转
          propList: ['*'],
          // 指定不转换为视窗单位的类名,
          selectorBlackList: ['ignore-'],
          // 最小转换的值,小于等于1不转
          minPixelValue: 1,
          // 是否在媒体查询的css代码中也进行转换,默认false
          mediaQuery: false,
          // 是否转换后直接更换属性值
          replace: true,
          // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
          exclude: [],
          // 包含那些文件或者特定文件
          include: [],
          // 是否处理横屏情况
          landscape: false
        }),
      ]
    }
  },
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐