vite配置vw(vue所有版本可用),代码直接写px,自动转换成vw

1,521 阅读1分钟

vue2版本也可以用,只不过我用的是vue3版本,借助几个插件,在vite中配置,就可以实现vw单位自动编译。 此方法不限移动端和PC端,但vw单位在移动端使用较多,PC端很少用。

vite配置

 
import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import externalGlobals from 'rollup-plugin-external-globals';
 
const dotenv = require("dotenv");
 
export default defineConfig(({ command, mode }) => {
    return {
        plugins: [
            vue(),
            vueJsx({}),
        ],
        css: {
            preprocessorOptions: {
                less: {
                    sourceMap: true,
                    javascriptEnabled: true,
                    modifyVars: defaultStyle()
                }
            },
            postcss: {
                plugins: [
                    require('postcss-import'),
                    require('postcss-url'),
                    require('postcss-aspect-ratio-mini'),
                    require('postcss-write-svg')({ utf8: false }),
                    require('postcss-px-to-viewport')({
                        viewportWidth: 3440, // 视口宽度,对应设计稿宽度
                        viewporHeight: 1440, // 视口高度,对应设计稿高度
                        unitPrecision: 3, // 指定px转换之后的小数位数
                        viewportUnit: 'vw', // 转换的单位
                        fontViewportUnit: 'vw', // 字体使用的单位
                        replace: true, //  是否直接更换属性值,而不添加备用属性
                        selectorBlackList: ['.ignore', '.hairlines'], // 指定不转换的类
                        exclude: /(\/|\\)(node_modules)(\/|\\)/, //禁止更改第三方UI框架样式
                        minPixelValue: 1, // 小于或等于1px不转换
                        mediaQuery: true, // 允许在媒体查询中转换
                    }),
                    require('cssnano')({
                        'cssnano-preset-advaced': {
                            zindex: false,
                            autoprefixer: false,
                        },
                    })
                ]
            }
        }
    }
})

package.json,安装以下插件

{
    "cssnano": "^5.1.7",
    "cssnano-preset-advanced": "^5.3.3",
    "postcss": "^8.4.13",
    "postcss-aspect-ratio-mini": "^1.1.0",
    "postcss-cssnext": "^3.1.1",
    "postcss-focus": "^5.0.1",
    "postcss-import": "^14.1.0",
    "postcss-px-to-viewport": "^1.1.1",
    "postcss-url": "^10.1.3",
    "postcss-viewport-units": "^0.1.6",
    "postcss-write-svg": "^3.0.1",
    "less": "^4.1.2",
    "less-loader": "^10.2.0",
}

效果

代码中写px单位:

d83d4b45201b49c69ee8939d2a2c6bbc.jpeg

浏览器编译后效果:已经是vw单位了

579287128daa4af69ac2db305eb8c793.jpeg