美文网首页
flexable +postcss-px2rem 大屏

flexable +postcss-px2rem 大屏

作者: Hello杨先生 | 来源:发表于2020-03-27 10:19 被阅读0次
    安装 lib-flexible
    npm install lib-flexible --save-dev
    
    引入 lib-flexible
    在main.js中引入lib-flexible
    
    // px2rem 自适应
    import 'lib-flexible'
    
    npm install px2rem-loader --save-dev
    cnpm install postcss-px2rem --save
    

    由于3.x版本需要自己配置,在项目根目录新建文件vue.config.js,然后如下配置:

    module.exports = {
        css: {
            loaderOptions: {
                css: {},
                postcss: {
                    plugins: [
                        require('postcss-px2rem')({
                            // 以设计稿750为例, 750 / 10 = 75
                            remUnit: 75
                        }),
                    ]
                }
            }
        },
    };
    

    大屏怎么办?
      正常情况下,如果是教程,那么到此就结束了。可本文中心是如何在大屏中正常使用lib-flexible。
      例如我们屏幕尺寸要做以3840 x 2160为设计稿的适配,那么我们的remUnit的值则改为384。然后呢?重启项目,发现……咦?布局全部乱掉!经过排查,自己的代码基本上不会导致该问题的出现,那么只能是源码在作怪了。重点来了。

    3.1 找到源码
    打开./node_modules/lib-flexible/flexible.js,找到如下片段源码:

    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;
    }
    

    从此段源码中我们不难看出,当屏幕宽度除以dpr(dpr是一个倍数,此处一般为1)大于540这个特定值的时候,那么就不再进行适配了。那么我们如何解决这个问题呢?

    3.2 修改源码
      在上述源码中,进行修改。例如我要适配的大屏幕尺寸是基于3840的设计稿,而要求最小范围是1980,最大为5760,那么我们要修改的则变为:

    function refreshRem(){
        var width = docEl.getBoundingClientRect().width;
        if (width / dpr < 1980) {
            width = 1980 * dpr;
        } else if (width / dpr > 5760) {
            width = 5760 * dpr;
        }
        var rem = width / 10;
        docEl.style.fontSize = rem + 'px';
        flexible.rem = win.rem = rem;
    }
    
    

    相关文章

      网友评论

          本文标题:flexable +postcss-px2rem 大屏

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