亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue-cli3.X使用px2 rem遇到的問題及解決方法

2019-11-19 11:03:37
字體:
來源:轉載
供稿:網友

把項目腳手架升級為cli3.X了以后,模板簡潔了很多,運行起來也更加快速。但是也隨之而來是某些兼容問題。比如我們要在項目鐘使用px2rem來計算設計稿的時候,我們不能像以前老的腳手架那樣操作了。那我們應該來如何設置呢?

首先,我們應該用NPM來安裝postcss-px2rem

npm i postcss-plugin-px2rem  --save -dev

然后我們需要在vue.config.js中創建一個配置。由于在vue-cli3.X中。去掉了build和config文件夾。所有的配置都放到了vue.config.js,然而這個文件腳手架并沒有生成,所以需要手動在項目的根目錄創建一個文件

在vue.config.js里配置

module.exports = {  lintOnSave: true,  css: {    loaderOptions: {      postcss: {        plugins: [          require('postcss-plugin-px2rem')({            rootValue:75,      // 新版本的是這個值            mediaQuery: false, //(布爾值)允許在媒體查詢中轉換px。            minPixelValue: 3 //設置要替換的最小像素值(3px會被轉rem)。 默認 0          }),        ]      }    }  },}

這里需要說明一點。網上搜的一堆教程都強調應該增加remUnit來設置rem的計算標準。但是其實在新版后,這個值換成了rootValue這個。例如你設計稿為750的寬度標準,那么這里的值設置為75則可。

接下來還有一個工作。由于rem是根據根字體的大小來作為基準值的,然而我們的移動設備屏幕大小以及有些屏幕為視網膜屏的,會是普通屏幕的2倍,所以這個基準值我們需要根據不同設備來進行計算。這里我們在src/plugins下新建一個rem.js文件(代碼如下)。

(function (win, lib) {  var doc = win.document;  var docEl = doc.documentElement;  var metaEl = doc.querySelector('meta[name="viewport"]');  var flexibleEl = doc.querySelector('meta[name="flexible"]');  var dpr = 0;  var scale = 0;  var tid;  var flexible = lib.flexible || (lib.flexible = {});  if (metaEl) {    //console.warn('將根據已有的meta標簽來設置縮放比例');    var match = metaEl.getAttribute('content').match(/initial/-scale=([/d/.]+)/);    if (match) {      scale = parseFloat(match[1]);      dpr = parseInt(1 / scale);    }  } else if (flexibleEl) {    var content = flexibleEl.getAttribute('content');    if (content) {      var initialDpr = content.match(/initial/-dpr=([/d/.]+)/);      var maximumDpr = content.match(/maximum/-dpr=([/d/.]+)/);      if (initialDpr) {        dpr = parseFloat(initialDpr[1]);        scale = parseFloat((1 / dpr).toFixed(2));      }      if (maximumDpr) {        dpr = parseFloat(maximumDpr[1]);        scale = parseFloat((1 / dpr).toFixed(2));      }    }  }  if (!dpr && !scale) {    var isAndroid = win.navigator.appVersion.match(/android/gi);    var isIPhone = win.navigator.appVersion.match(/iphone/gi);    var devicePixelRatio = win.devicePixelRatio;    if (isIPhone) {      // iOS下,對于2和3的屏,用2倍的方案,其余的用1倍方案      if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {        dpr = 3;      } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {        dpr = 2;      } else {        dpr = 1;      }    } else {      // 其他設備下,仍舊使用1倍的方案      dpr = 1;    }    scale = 1 / dpr;  }  docEl.setAttribute('data-dpr', dpr);  if (!metaEl) {    metaEl = doc.createElement('meta');    metaEl.setAttribute('name', 'viewport');    metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');    if (docEl.firstElementChild) {      docEl.firstElementChild.appendChild(metaEl);    } else {      var wrap = doc.createElement('div');      wrap.appendChild(metaEl);      doc.write(wrap.innerHTML);    }  }  function refreshRem() {    var width = docEl.getBoundingClientRect().width;    if (width / dpr > 540) {      width = 540 * dpr;    }    var rem = width / 10;    docEl.style.fontSize = rem + 'px';    flexible.rem = win.rem = rem;  }  win.addEventListener('resize', function () {    clearTimeout(tid);    tid = setTimeout(refreshRem, 300);  }, false);  win.addEventListener('pageshow', function (e) {    if (e.persisted) {      clearTimeout(tid);      tid = setTimeout(refreshRem, 300);    }  }, false);  if (doc.readyState === 'complete') {    doc.body.style.fontSize = 12 * dpr + 'px';  } else {    doc.addEventListener('DOMContentLoaded', function (e) {      doc.body.style.fontSize = 12 * dpr + 'px';    }, false);  }  refreshRem();  flexible.dpr = win.dpr = dpr;  flexible.refreshRem = refreshRem;  flexible.rem2px = function (d) {    var val = parseFloat(d) * this.rem;    if (typeof d === 'string' && d.match(/rem$/)) {      val += 'px';    }    return val;  }  flexible.px2rem = function (d) {    var val = parseFloat(d) / this.rem;    if (typeof d === 'string' && d.match(/px$/)) {      val += 'rem';    }    return val;  }})(window, window['lib'] || (window['lib'] = {}));

然后在main.js里面引入該文件

import './plugins/rem.js'

這樣,我們的工作就完成了。可以直接在css里面寫px的絕對值。

總結

以上所述是小編給大家介紹的Vue-cli3.X使用px2 rem遇到的問題及解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久影视| 丝袜情趣国产精品| 1769国产精品| 人人做人人澡人人爽欧美| 中日韩美女免费视频网站在线观看| 国产精品极品美女在线观看免费| 91产国在线观看动作片喷水| 91久久精品在线| 日韩欧美有码在线| 亚洲精品电影在线观看| 日本道色综合久久影院| 97久久超碰福利国产精品…| 久久亚洲精品成人| 亚洲国产精久久久久久久| 日韩国产精品亚洲а∨天堂免| 国产精品色婷婷视频| 欧美专区日韩视频| 久久精品电影网站| 国内精品久久久久影院 日本资源| 92国产精品久久久久首页| 亚洲区免费影片| 九九九久久久久久| 美日韩精品免费视频| 欧美日韩国产色视频| 中文字幕久热精品在线视频| 午夜精品一区二区三区av| 日韩在线一区二区三区免费视频| 国产一区二区三区18| 欧美日产国产成人免费图片| 日韩av综合网| 中文字幕亚洲欧美| 国产一区二区三区直播精品电影| 亚洲一区二区三区在线视频| 狠狠做深爱婷婷久久综合一区| 国产精品久久久久久av福利软件| 久久久久久久久久久91| 久久久999国产精品| 成人免费观看49www在线观看| 疯狂蹂躏欧美一区二区精品| 欧美高清一级大片| 亚洲精品女av网站| 欧美一级淫片aaaaaaa视频| 裸体女人亚洲精品一区| 91tv亚洲精品香蕉国产一区7ujn| 久久97精品久久久久久久不卡| 国产亚洲视频中文字幕视频| 青青精品视频播放| 欧美久久精品一级黑人c片| 成人激情视频网| 国产999在线| 九九九久久国产免费| 亚洲香蕉av在线一区二区三区| 国产97在线观看| 久久视频在线视频| 欧美久久精品午夜青青大伊人| 国产精品99蜜臀久久不卡二区| 国产成人拍精品视频午夜网站| 国产亚洲精品久久久久久牛牛| 日本一区二区在线免费播放| 欧美国产精品人人做人人爱| 麻豆乱码国产一区二区三区| 亚洲天堂男人天堂| 日韩三级影视基地| 日本精品性网站在线观看| 国产一区二区三区在线| 亚洲欧美日韩成人| 91在线观看免费高清完整版在线观看| 亚洲综合自拍一区| 成人亚洲综合色就1024| 日韩在线观看高清| 国产午夜精品全部视频在线播放| 欧美精品在线免费| 久久不射热爱视频精品| 久久天天躁狠狠躁夜夜躁2014| 亚洲精品视频中文字幕| 日韩在线视频观看| 日韩欧美在线网址| 中文字幕亚洲一区二区三区| 亚洲国产精品久久91精品| 91久久精品一区| 久久久国产在线视频| 国产成人高潮免费观看精品| 久久精品电影网| 国产日韩av在线播放| 欧美激情视频网站| 亚洲自拍高清视频网站| 国产精品亚洲片夜色在线| 久热在线中文字幕色999舞| 久久国产精品影片| 在线视频国产日韩| 粉嫩老牛aⅴ一区二区三区| 国产精品草莓在线免费观看| 亚洲福利小视频| 国产在线精品自拍| 日韩中文字幕在线精品| 中文字幕亚洲一区| 欧美成人精品一区二区三区| 欧美激情久久久| 精品国产一区二区三区四区在线观看| 国产免费一区视频观看免费| 亚洲国产精品99久久| 欧美激情一区二区三区高清视频| 国产精品jizz在线观看麻豆| 中文字幕视频在线免费欧美日韩综合在线看| 精品国产乱码久久久久久天美| 欧美激情亚洲一区| 97视频在线观看免费| 91精品免费看| 国产一区深夜福利| 成人av在线亚洲| 日本久久久久久久久久久| 4438全国亚洲精品在线观看视频| 日本久久久久久| 亚洲精品97久久| 日本中文字幕久久看| 国产精品日韩欧美大师| 欧美午夜性色大片在线观看| xxx成人少妇69| 欧美裸体男粗大视频在线观看| 欧美床上激情在线观看| 91精品在线播放| 久久躁狠狠躁夜夜爽| 亚洲三级黄色在线观看| 91精品久久久久久久久不口人| 国产精品久久久久久av福利软件| 亚洲美女av电影| 欧美性xxxx在线播放| 精品久久久久久久久久久久久久| 亚洲人成网站999久久久综合| 欧美性猛交xxxx免费看久久久| 亚洲日韩欧美视频| 91人人爽人人爽人人精88v| 在线午夜精品自拍| 国模gogo一区二区大胆私拍| 久久久精品一区二区| 国产激情999| 96精品久久久久中文字幕| 日韩av免费在线播放| 欧美一级免费视频| 欧美亚洲国产视频小说| 久久免费少妇高潮久久精品99| 日韩乱码在线视频| 日韩精品视频在线| 欧美激情视频一区二区| 国产在线观看精品| 日韩高清免费在线| 狠狠躁18三区二区一区| 久久精品国产欧美激情| 日本a级片电影一区二区| 亚洲人成人99网站| 欧美国产视频日韩| 亚洲男人天堂2024| 亚洲成人精品在线| 欧美成人精品激情在线观看| 国产精品一区二区三区成人| 久久久在线免费观看| 97视频人免费观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产裸体写真av一区二区| 亚洲电影免费在线观看| 麻豆国产精品va在线观看不卡| 欧美中文字幕在线| 欧美三级xxx| 亚洲一区二区免费在线|