vue3如何使用postcss-px-to-viewport适配屏幕
作者:王天平·Jason Wong
这篇文章主要介绍了vue3如何使用postcss-px-to-viewport适配屏幕问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
本教程只使用于vue3+vue-cli5创建的项目,说白了就是使用的webpack环境,不适用于vite,后面会更新。
因为技术总是更新迭代,大多数博主都没有习惯写上自己的配置,总是把一段自认为可以的配置贴出来,很多时候看了不仅误人子弟,还耽误很多开发时间,我,致力于做一个负责人的博主,都会贴出配置和使用环境,方便大家做参考。
使用环境
| 名称 | 版本 | 
|---|---|
| vue | 3.2.13 | 
| vue-cli | 5.x | 
| webpack | 5.x | 
| nodejs | 16.15 | 
| postcss-px-to-viewport | ^1.1.1 | 
安装
npm install postcss-px-to-viewport --save-dev yarn add postcss-px-to-viewport --save-dev pnpm add postcss-px-to-viewport --save-dev
如果devserver正在运行,安装完成以后记得重启devserver。
配置
在项目根目录下创建 postcss.config.js 文件,并填入一下内容:
module.exports = {
  plugins: {
    // ...
    'postcss-px-to-viewport': {
      // options
      unitToConvert: "px",
      viewportWidth: 1920,
      viewportHeight:1080,
      unitPrecision: 3,
      propList: [
        "*"
      ],
      viewportUnit: "vw",
      fontViewportUnit: "vw",
      selectorBlackList: [],
      minPixelValue: 1,
      mediaQuery: false,
      replace: true,
      exclude: /(\/|\\)(node_modules)(\/|\\)/,
    }
  }
}
重新运行,打开浏览器查看属性值已经变为vw计算,就是这么简单。

附上插件的github地址: https://github.com/evrone/postcss-px-to-viewport
| 项目 | 类型 | 描述 | 
|---|---|---|
| unitToConvert | (String) | unit to convert, by default, it is px. | 
| viewportWidth | (Number) | The width of the viewport. | 
| unitPrecision | (Number) | The decimal numbers to allow the vw units to grow to. | 
| propList | (Array) | - The properties that can change from px to vw. | 
| -Values need to be exact matches. | ||
| Use * at the start or end of a word. (['position'] will match background-position-y) | ||
| Use ! to not match a property. Example: ['*', '!letter-spacing'] | ||
| Combine the "not" prefix with the other prefixes. Example: ['', '!font'] | ||
| viewportUnit | (String) | Expected units. | 
| fontViewportUnit | (String) | Expected units for font. | 
| selectorBlackList | (Array)The selectors to ignore and leave as px. | If value is string, it checks to see if selector contains the string. ['body'] will match .body-class | 
| If value is regexp, it checks to see if the selector matches the regexp. [/^body$/] will match body but not .body | ||
| minPixelValue | (Number) | Set the minimum pixel value to replace. | 
| mediaQuery | (Boolean) | replaces rules containing vw instead of adding fallbacks | 
| exclude | (Regexp or Array of Regexp Ignore some files like 'node_modules') | If value is regexp, will ignore the matches files. | 
| If value is array, the elements of the array are regexp. | ||
| include | (Regexp or Array of Regexp) If include is set, only matching files will be converted, for example, only files under src/mobile/ (include: /\/src\/mobile\//) | If value is array, the elements of the array are regexp. | 
| If value is regexp, will ignore the matches files. | ||
| landscape | (Boolean) | Adds @media (orientation: landscape) with values converted via landscapeWidth. | 
| landscapeUnit | (String) | Expected unit for landscape option | 
| landscapeWidth | (Number) | Viewport width for landscape orientation. | 
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
