• Vue开发中的移动端适配(px转换成vw)


    1.项目根目录下,创建 .postcssrc.js 文件。

    2.安装插件。

    -D (开发依赖)

    postcss-import

    postcss-url

    cssnano-preset-advanced

    -S (开发、运行都依赖)

    postcss-aspect-ratio-mini

    postcss-px-to-viewport
    postcss-write-svg
    postcss-cssnext
    cssnano
    postcss-viewport-units

    3.配置  .postcssrc.js

    module.exports = {
      "plugins": {
        "postcss-import": {},
        "postcss-url": {},
        "postcss-aspect-ratio-mini": {}, 
          "postcss-write-svg": {
            utf8: false
          },
          "postcss-cssnext": {},
          "postcss-px-to-viewport": {
            viewportWidth: 750,  //视窗的宽度,对应的是我们设计稿的宽度,一般是750
            viewportHeight: 1334, // 视窗的高度,根据750设备的宽度来指定,一般指定1334,也可以不配置
            unitPrecision: 3,       // 指定`px`转换为视窗单位值的小数位数(很多时候无法整除)
            viewportUnit: 'vw',     // 指定需要转换成的视窗单位,建议使用vw
            selectorBlackList: ['.ignore', '.hairlines'],  // 指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名
            minPixelValue: 1,       // 小于或等于`1px`不转换为视窗单位,你也可以设置为你想要的值
            mediaQuery: false       // 允许在媒体查询中转换`px`
          }, 
          "postcss-viewport-units":{},
          "cssnano": {
            preset: "advanced",
            autoprefixer: false,
            "postcss-zindex": false
          },
      }
    }
    

    4. 根组件 App.vue 的style 中,加入以下样式:( 统一的宽度比默认属性 )

    [aspectratio] {
      position: relative;
    }
    [aspectratio]::before {
      content: '';
      display: block;
       1px;
      margin-left: -1px;
      height: 0;
    }
    
    [aspectratio-content] {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
       100%;
      height: 100%;
    }
    /*vm兼容处理使用Viewport Units Buggyfill造成的副作用,需要如下设置img*/
    img {
      content: normal !important; 
    }
    

    比如:想要一个 750:250 的比例容器,html中的代码:

    <div class="banner" w-750-250 aspectratio aspect-ratio="750/250"> 
         <div aspectratio-content> 
            <img src="" alt="" width="100%" height="100%"> 
         </div> 
    </div> 
    

    它对应的css样式:

    [w-750-250] {
         750px;
    }
    [w-750-250]{
        aspect-ratio:'750:250';
    }
    

    5.vw的兼容处理 (有些手机不支持vw单位 )  

      5.1 Vue项目的index.html中引入如下JS 文件: 

    <script src="//g.alicdn.com/fdilab/lib3rd/viewport-units-buggyfill/0.6.2/??viewport-units-buggyfill.hacks.min.js,viewport-units-buggyfill.min.js"></script>
    

      5.2 在html底部调用 viewport-units-buggyfill

    <script>
        window.onload = function () {
          window.viewportUnitsBuggyfill.init({
            hacks: window.viewportUnitsBuggyfillHacks
          });
    </script>
    

    6.自己没用第5点的方式使用 viewport-units-buggyfill,而是使用了 npm 安装的方式引入。

      6.1 npm  install  viewport-units-buggyfill  -S

      6.2 项目的入口文件中(比如 main.js),引入:

    var hacks = require('viewport-units-buggyfill.hacks');
    require('viewport-units-buggyfill').init({
      hacks: hacks
    });
    

      

    注:详细的配置说明,可以阅读  https://www.w3cplus.com/mobile/vw-layout-in-vue.html   这一篇好文。

    本文只是学习并实践后的总结。插件不是都必须安装,可根据实际项目需要,自行决定。

  • 相关阅读:
    [转]关于ORA00979 不是 GROUP BY 表达式错误的解释
    【转】mongodb简介及源码编译安装mongo2.0.0服务器
    mysql 缓存(转)
    iostat命令详解(转)
    C++虚函数,纯虚函数,抽象基类,虚基类(转)
    C++虚类的作用(转)
    C++ 纯虚类(转)
    虚函数的应用特性(转)
    2、Linux多线程,线程的分离与结合(转)
    mongodb js shell不能使用退格键的问题(转)
  • 原文地址:https://www.cnblogs.com/zy20160429/p/8915637.html
Copyright © 2020-2023  润新知