美文网首页
Vue 使用lib-flexible适配PC端(rem)

Vue 使用lib-flexible适配PC端(rem)

作者: Rising_life | 来源:发表于2022-04-29 11:11 被阅读0次

    安装lib-flexible与postcss-px2rem

    npm install lib-flexible
    或
    yarn add lib-flexible
    

    代码直接使用rem单位不方便阅读,安装postcss-px2rem插件可以自动把px转成rem

    npm install postcss-px2rem
    或
    yarn add postcss-px2rem
    

    使用及配置

    在 main.js中直接引入lib-flexible

    import "lib-flexible";
    

    在vue.config.js中配置css

    css: {
        // 启用 CSS modules
        modules: false,
        // 是否使用css分离插件
        extract: true,
        // 开启 CSS source maps?
        sourceMap: false,
        // css预设器配置项
        loaderOptions: {
          css: {},
          postcss: {
            plugins: [
              //remUnit这个配置项的数值根据设计图来定这个值,便于开发。
              //假如设计图给的宽度是1920,按照24等份来划分(1920/24),remUnit设置为80(1rem = 80px)
              // 需要去改lib-flexible源码(node_modules\lib-flexible\flexible.js  69行refreshRem()函数)
              require("postcss-px2rem")({
                remUnit: 80,//1rem = 80px
              }),
            ],
          },
        },
      },
    

    修改lib-flexible的源码

    在node_modules依赖文件中找到flexible.js,修改 refreshRem() 函数。
    (node_modules\lib-flexible\flexible.js 大概在69行的refreshRem()函数)

            /**
               * lib-flexible源码 修改前 
               */
              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;
              }
              /**
               * lib-flexible源码 修改后 
               */
                function refreshRem(){
                  var width = docEl.getBoundingClientRect().width;
                  if (width / dpr > width) {
                      width = width * dpr;
                  }
                  var rem = width / 24;
                  docEl.style.fontSize = rem + 'px';
                  flexible.rem = win.rem = rem;
              }
    

    注意:
    行内样式设置的px无法被转换成自适应的rem。
    lib-flexible给body元素加上了12px的字体大小。
    官方解释:body上设置12 * dpr的font-size值,为了重置页面中的字体默认值,不然没有设置font-size的元素会继承html上的font-size,变得很大。
    如果不需要body加字号,可去源码中进行注销:
    // 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);
    // }

    测试

    设置字体为40px

    .home {
      font-size: 40px;
    }
    

    在1920宽度展示:


    1920

    在960宽度展示:


    960

    相关文章

      网友评论

          本文标题:Vue 使用lib-flexible适配PC端(rem)

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