postcss.config.js 配置(vue移动端自适应)

配置postcss解决Vant组件自适应问题与尺寸调整
本文介绍了如何在项目中安装并配置postcss-write-svg和postcss-px-to-viewport-multichange插件,以确保Vant UI库的样式在不同设备上自适应,并解决了因屏幕适配引起的尺寸变化。通过添加自定义规则,解决了针对Vant库的特定转换问题。

  安装依赖

 npm install postcss-write-svg  postcss-px-to-viewport-multichange --D

 直接在根目录下创建postcss.config.js

module.exports = {

  plugins: {

    // autoprefixer: {},  // cssnext中启用

    // 'postcss-import': {},

    // 'postcss-url': {},

    // 'postcss-preset-env': {},

    // 'postcss-aspect-ratio-mini': {},

    'postcss-write-svg': { utf8: false },

    'postcss-px-to-viewport-multichange': {

      // 使用非官方开发的可以自定义针对UI库的处理函数的插件

      viewportWidth: 750, // (Number) The width of the viewport.

      viewportHeight: 1334, // (Number) The height of the viewport.

      unitPrecision: 3, // (Number) The decimal numbers to allow the REM units to grow to.

      viewportUnit: 'vw', // (String) Expected units.

      fontViewportUnit: 'vmin', // (String) Expected units for font.

      minPixelValue: 1, // (Number) Set the minimum pixel value to replace.

      mediaQuery: false, // (Boolean) Allow px to be converted in media queries.

      // selectorBlackList: [

      //   '.ignore',

      //   '.hairlines',

      //   /\.hairline[\w-_]*/,

      //   /\.van-hairline[\w-_]*/,

      // ], // (Array) The selectors to ignore and leave as px.

     

      // 以下为此插件新增配置项

      // exclude: ['node_modules'],

      // multiple: 100,

      // rules: {

      //   path: 'vant',

      //   fn(pixels, translated) {

      //     return `${translated * 2}vw`;

      //   },

      // },

    },

    cssnano: {},

  },

};

重新跑一遍代码

使用vant的没有出现样式问题

再babel.config.js文件中添加

 plugins: [

    [

      'import',

      {

        libraryName: 'vant',

        libraryDirectory: 'es',

        style: name => `${name}/style/less`,

      },

      'vant',

    ],

  ],

添加后发现样式好像变小了,这是因为安装配置了屏幕自适应,只需要再postcss.config.js文件中添加

 rules: {

          path: 'vant',

          fn(pixels, translated) {

            return `${translated * 2}vw`;

          },

        },

 

 

Vue 移动端自适应布局有多种方案,以下为你详细介绍: ### 运用 CSS 布局技术与相对单位 综合运用 Flex/Grid 处理元素排列,通过 rem/vw 和 PostCSS 插件简化适配。结合 Vue3 响应式 API 还能动态调整界面。对于常见问题,如 1px 边框、图片模糊等,可采用特定技巧解决[^1]。 ### 在 vue.config.js配置 可在 `vue.config.js` 里配置 CSS 前缀,将 px 转换为 rem。代码如下: ```javascript const { defineConfig } = require("@vue/cli-service"); const autoprefixer = require("autoprefixer"); const pxtorem = require("postcss-pxtorem"); module.exports = defineConfig({ // 配置css前缀,px转rem css: { loaderOptions: { postcss: { postcssOptions: { plugins: [ autoprefixer(), pxtorem({ rootValue: 192, // 根据设计稿宽度/10 propList: ["*"] }) ] } } } } }); ``` 这样配置后,就能自动将样式中的 px 转换为 rem,实现自适应布局[^2]。 ### loader 配置 还可进行 loader 配置,如下: ```javascript { test: /\.vue$/, loader: 'vue-loader', options: { cssModules: { localIdentName: '[path][name]---[local]---[hash:base64:5]', camelCase: true }, extractCSS: true, loaders: env.production? { css: ExtractTextPlugin.extract({ use: 'css-loader!px2rem-loader?remUnit=40&remPrecision=8', fallback: 'vue-style-loader' }), scss: ExtractTextPlugin.extract({ use: 'css-loader!px2rem-loader?remUnit=40&remPrecision=8!sass-loader', fallback: 'vue-style-loader' }) } : { css: 'vue-style-loader!css-loader!px2rem-loader?remUnit=40&remPrecision=8', scss: 'vue-style-loader!css-loader!px2rem-loader?remUnit=40&remPrecision=8!sass-loader' } } } ``` 该配置可在不同环境下将 px 转换为 rem,实现自适应[^3]。 ### 在 build/util.js配置 在 `build/util.js` 中进行如下配置: ```javascript const px2remLoader = { loader: 'px2rem-loader', options: { remUnit: 64 // 设计稿宽度/10 } } // generate loader string to be used with extract text plugin function generateLoaders(loader, loaderOptions) { const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader] if (loader) { loaders.push({ loader: loader + '-loader', options: Object.assign({}, loaderOptions, { sourceMap: options.sourceMap }) }) } } ``` 这能利用 `px2rem-loader` 把 px 转换为 rem,实现自适应布局[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值