美文网首页
使用vue cli4中在less中px自动转换为rem

使用vue cli4中在less中px自动转换为rem

作者: 黑白说程序 | 来源:发表于2020-10-09 08:16 被阅读0次

    当我们使用vue开发移动端时,想用rem来做自适应,我们有想使用rem也是有两种方法
    第一种方法:新建一个configrem.js文件,然后在main.js引入这个js,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'] = {}));
    
    

    第二种方法 :npm安装开发依赖
    npm install lib-flexible --save
    npm install px2rem-loader --save-dev
    lib-flexible 使用方法 import ‘lib-flexible’

    px自动转换为rem使用方法

    第一种方法

    安装完 px2rem-loader之后,自建立vue.config.js 文件

    const path = require("path");
    function resolve(dir) {
      return path.join(__dirname, dir);
    }
    module.exports = {
      lintOnSave: true,
      chainWebpack: config => {
        config.module
        .rule('less')
        .oneOf('vue')
        .use('px2rem-loader')
        .loader('px2rem-loader')
        .before('postcss-loader') // this makes it work.
        .options({ remUnit: 75, remPrecision: 8 })
        .end()  //这里就是引用插件
        config.resolve.alias
          .set("@", resolve("src"))
          .set("components", resolve("src/components"))
          .set("assets", resolve("src/assets"))
          .set("views", resolve("src/views"))
          .set("common", resolve("src/common"))
          .set("network", resolve("src/network")).end()
      }
    };
    

    第二种方法

    在vscode里面安装插件px to rem ,然后在首选项设置里面找到配置文件,进行修改,根据效果图的尺寸改成75或者64,改完之后再也没直接输入实际大小,例如导航尺寸一般是88px,那就输入88px,然后按ALT+Z键,就可以自动转换


    image.png

    相关文章

      网友评论

          本文标题:使用vue cli4中在less中px自动转换为rem

          本文链接:https://www.haomeiwen.com/subject/srwkpktx.html