在nuxt项目中使用vw/vh做移应端适配

410 阅读2分钟
公司让做官网,使用了非常先进的nuxt.js有利于seo优化,并考虑到了移应端。为此我就头疼了,思来想去还是做成响应式的网页,这样适配机型就非常容易了,于是乎就想到了主流的移应端适配的解决方vw/vh.

一、安装postcss-px-to-viewport

npm安装

npm install postcss-px-to-viewport --save-dev 注意 (include用不了)

这里乍一看好像就没什么问题,就先按正常流程走,下完包就去正常配置就能使用了

export default {
    ...
    ...
    ...

  /*
  ** Build configuration
  */
  build: {
    /*
    ** You can extend webpack config here
    */
    postcss: {
      // 添加插件名称作为键,参数作为值
      plugins: {
        "postcss-px-to-viewport": {
          unitToConvert: "px", // 默认值`px`,需要转换的单位
          viewportWidth: 375, // 视窗的宽度,对应设计稿宽度
          viewportHeight: 667, // 视窗的高度, 根据375设备的宽度来指定,一般是667,也可不配置
          unitPrecision: 3, // 指定`px`转换为视窗单位值的小数位数
          propList: ["*"], // 转化为vw的属性列表
          viewportUnit: "vw", // 指定需要转换成视窗单位
          fontViewportUnit: "vw", // 字体使用的视窗单位
          selectorBlaskList: [".ignore-"], // 指定不需要转换为视窗单位的类
          mediaQuery: false, // 允许在媒体查询中转换`px`
          minPixelValue: 1, // 小于或等于`1px`时不转换为视窗单位
          replace: true, // 是否直接更换属性值而不添加备用属性
          exclude: [], // 忽略某些文件夹下的文件或特定文件
          landscape: false, // 是否添加根据landscapeWidth生成的媒体查询条件 @media (orientation: landscape)
          landscapeUnit: "vw", // 横屏时使用的单位
          landscapeWidth: 1134 // 横屏时使用的视窗宽度
        }
      },
      preset: {
        // 更改postcss-preset-env 设置
        autoprefixer: {}
      }
    }
  }
}

但是!!!

我是最开始就做的pc端的官网用的是px为单位,如果像这样直接引入这配置就会导致它自动把所有的px转换为vw,这样就导致样式全垮了。

所以!!!

我们就要把scss文件全部提出来。单独存放一个目录,然后再写一套样式适配移应端的样式

image.png

像这样,网页在不同设备上加载不同的样式,就做到了响应式布局。 然后再去配置文件中找到exclude:配置项排除pc端样式,给移应端样式做转化。 exclude填一个正则表达式 表示排除pc文件夹,但是我们无论怎么写都没办法排除, 费了老大功夫终于在GitHub上找到一个包,可以解决这个问题

"postcss-px-to-viewport": "git+https://github.com/evrone/postcss-px-to-viewport.git",

然后加include写需要转化的文件夹就完成了

image.png