vue3+vite+ts自适应实现(postcss-pxtorem)

当pc端或移动端H5等项目中需要根据当前浏览器窗口或屏幕尺寸来自适应的改变页面内元素尺寸时,就可以借助下述插件和相关配置来实现。

适用范围:vue3+vite+ts

如果靓仔你的项目是使用vue2或是使用vue-cli和webpack的vue3,也不用惊慌,请直接跳转:

vue2/vue3自适应实现icon-default.png?t=N7T8https://blog.csdn.net/m0_71537867/article/details/137442448?spm=1001.2014.3001.5502步骤一:相关依赖下载

npm install postcss-pxtorem --save

npm install amfe-flexible --save

步骤二:在main.ts中进行引入

import 'amfe-flexible'

步骤三:在vite.config.ts中进行配置

当项目内只需要有UI设计稿这一种基准宽度时,使用下述配置方法

// 引入pxtorem插件
import postCssPxToRem from "postcss-pxtorem";

export default defineConfig({
  plugins: [vue()],
  css: {
    postcss: {
      plugins: [
        postCssPxToRem({
          // 配置在将px转化为rem时 1rem等于多少px(因为我们搭配使用了amfe-flexible插件 此处我们需要设置的值应是UI设计稿全屏基准宽度的十分之一)
          // 当UI设计稿的全屏基准宽度是1920px时 此处设置的值为192
          rootValue: 192,
          // 所有px均转化为rem
          propList: ["*"]
          // 若想设置部分样式不转化 可以在配置项中写出
          // eg: 除 border和font-size外 所有px均转化为rem
          // propList: ["*", "!border","!font-size"], 
        })
      ]
    }
  }
})

当项目内引入了vantUI组件库,vant的UI设计稿基准宽度是375px,如果与我们开发时UI给出的设计稿基准宽度不同,使用下述配置方法(移动端有时会引入vant组件库)

// 引入pxtorem插件
import postCssPxToRem from "postcss-pxtorem";

export default defineConfig({
  plugins: [vue()],
  css: {
    postcss: {
      plugins: [
        postCssPxToRem({
          // 配置在将px转化为rem时 1rem等于多少px(因为我们搭配使用了amfe-flexible插件 此处我们需要设置的值应是UI设计稿全屏基准宽度的十分之一)
          // 当UI设计稿的全屏基准宽度是750px时 此处设置的值为75 但项目中使用了vant组件库 vant的设计稿总宽度是375px 其十分之一应是37.5(需要区分设置)
          rootValue ({ file }) {
            return file.indexOf('vant') !== -1 ? 37.5 : 75
          },
          // 所有px均转化为rem
          propList: ["*"]
          // 若想设置部分样式不转化 可以在配置项中写出
          // eg: 除 border和font-size外 所有px均转化为rem
          // propList: ["*", "!border","!font-size"], 
        })
      ]
    }
  }
})

验证效果:

可以设置一个元素的宽度为我们UI设计稿的基准宽度,使其正好占满一行。此时,可以看到不论浏览器窗口如何放大缩小,该元素宽度都是正好占满一行。

转换原理:

rem单位的特点,是1rem对应的px值等于<html>的font-size值。也就是说,当<html>的font-size值变化时,1rem的值会跟随着动态变化。比如:

有一个div,他的高度设置为1rem,当页面内<html>的font-size为16px时,这个div的高度就是16px;当页面内<html>的font-size为32px时,这个div的高度就是32px。

<html>自由飞,rem永相随!

postcss-pxtorem插件会将我们写在样式中的px根据我们在vite.config.ts中设置的rootValue值,按比例转化为rem。(要注意哦,行内样式中的px不会被转化为rem)

amfe-flexible插件会根据当前可展示区域的实际宽度,动态设置<html>的font-size为可展示区域宽度的十分之一。(这也就是为什么我们在vite.config.ts中设置rootValue值时需要设置为UI设计稿的十分之一,是为了与此插件对font-size的设置相对应)

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了在Vue3+TS+Vite项目中使用postcss-px-to-viewport-8-plugin,需要按照以下步骤进行操作: 1. 安装依赖: ```shell npm install postcss-px-to-viewport-8-plugin -D ``` 2. 在项目根目录下创建postcss.config.js文件,并添加以下内容: ```javascript const autoprefixer = require('autoprefixer'); const pxtoviewport = require('postcss-px-to-viewport-8-plugin'); module.exports = { plugins: [ autoprefixer(), pxtoviewport({ viewportWidth: 375, // 视窗的宽度,对应设计稿的宽度 viewportHeight: 667, // 视窗的高度,对应设计稿的高度 unitPrecision: 5, // 指定`px`转换为视窗单位值的小数位数 viewportUnit: 'vw', // 指定需要转换成的视窗单位,建议使用vw selectorBlackList: ['.ignore', '.hairlines'], // 指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名 minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位,你也可以设置为你想要的值 mediaQuery: false // 允许在媒体查询中转换`px` }) ] } ``` 3. 在vite.config.ts文件中添加postcss配置: ```typescript import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; export default defineConfig({ plugins: [vue()], css: { postcss: { plugins: [ require('autoprefixer'), require('postcss-px-to-viewport-8-plugin')({ viewportWidth: 375, viewportHeight: 667, unitPrecision: 5, viewportUnit: 'vw', selectorBlackList: ['.ignore', '.hairlines'], minPixelValue: 1, mediaQuery: false }) ] } } }); ``` 4. 重启项目即可实现px转vw。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MakerZz

创作不易,给点鼓励,万分感激!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值