Vue開發中的移動端適配(px轉換成vw)

1.項目根目錄下,建立 .postcssrc.js 文件。javascript

2.安裝插件。css

-D (開發依賴)html

postcss-importvue

postcss-urljava

cssnano-preset-advancednpm

-S (開發、運行都依賴)svg

postcss-aspect-ratio-minipost

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

 

3.配置  .postcssrc.jsui

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;
  width: 1px;
  margin-left: -1px;
  height: 0;
}

[aspectratio-content] {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  width: 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] {
    width: 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   這一篇好文。

本文只是學習並實踐後的總結。插件不是都必須安裝,可根據實際項目須要,自行決定。

相關文章
相關標籤/搜索