vue project adaptive screen and browser

1. install dependencies

npm i lib-flexible -S
npm i px2rem-loader -D

2. create a new folder in the src utils folder, the new folder utils flexible.js in which code is as follows

(function() {
    // flexible.css
    var cssText =
        '' +
        '@charset "utf-8";html{color:#000;background:#fff;overflow-y:scroll;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-overflow-scrolling:touch}html *{outline:0;-webkit-text-size-adjust:none;-webkit-tap-highlight-color:transparent}body,html{font-family:"Microsoft YaHei",sans-serif,Tahoma,Arial}article,aside,blockquote,body,button,code,dd,details,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,input,legend,li,menu,nav,ol,p,pre,section,td,textarea,th,ul{margin:0;padding:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}input,input[type=button],input[type=reset],input[type=submit]{resize:none;border:none;-webkit-appearance:none;border-radius:0}input,select,textarea{font-size:100%}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}abbr,acronym{border:0;font-variant:normal}del{text-decoration:line-through}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:500}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:500}q:after,q:before{content:\'\'}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}a:hover{text-decoration:underline}a,ins{text-decoration:none}a:active,a:hover,a:link,a:visited{background:0 0;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent;outline:0;text-decoration:none}';
    // cssText end

    var styleEl = document.createElement('style');
    document.getElementsByTagName('head')[0].appendChild(styleEl);
    if (styleEl.styleSheet) {
        if (!styleEl.styleSheet.disabled) {
            styleEl.styleSheet.cssText = cssText;
        }
    } else {
        try {
            styleEl.innerHTML = cssText;
        } catch (e) {
            styleEl.innerText = cssText;
        }
    }
})();


;
(function(win, lib) {
    var doc = win.document;
    var docEl = doc.documentElement;
    var metaEl = doc.querySelector('meta[name="viewport"]');
    doc.querySelector flexibleEl = var ( 'Meta [name = "flexible"]'); 
    var DPR = 0; 
    var Scale = 0; 
    var TID; 
    var flexible lib.flexible = || (lib.flexible = {}); 

    IF (METAEL) { 
        console.warn ( 'will be set in accordance with the existing scaling meta tags'); 
        var match = metaEl.getAttribute ( 'Content') match (/ Initial \ -scale = (. [\ D \.] +) /); 
        IF (match) { 
            Scale = parseFloat (match [. 1]); 
            DPR = the parseInt (. 1 / Scale); 
        } 
    } the else IF (flexibleEl) { 
        var flexibleEl.getAttribute Content = ( '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)); 
            } 
        } 
    } 

    (!! && Scale DPR) IF { 
        var isAndroid win.navigator.appVersion.match = (/ Android / GI ); 
        var isIPhone win.navigator.appVersion.match = (/ iPhone / GI); 
        var = devicePixelRatio win.devicePixelRatio; 
        IF (isIPhone) { 
            // at the iOS, 2 and 3 for the screen, with 2 solutions, the remaining 1 by scheme times
            IF (devicePixelRatio> =. 3 && (DPR DPR ||> =. 3)!) { 
        IF ( docEl.firstElementChild) {
                dpr = 3;
            } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {
                2 = DPR; 
            } the else { 
                DPR = 1; 
            } 
        } the else { 
            // other devices, still using 1x embodiment 
            DPR = 1; 
        } 
        Scale = 1 / DPR; 
    } 

    docEl.setAttribute ( 'Data-DPR', DPR ); 
    ! IF (METAEL) { 
        METAEL = doc.createElement ( 'Meta'); 
        metaEl.setAttribute ( 'name', 'the viewport'); 
        metaEl.setAttribute ( 'Content', 'Initial-Scale =' + + Scale ' , maximum-Scale = '+ + Scale', Minimum-Scale = '+ + Scale', User-Scalable = NO '); 
            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 = width * 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'] = {}));

3. flexible.js introduced in the main.js

import './utils/flexible.js'

4. Modify in the build utils.js

 

 

const px2remLoader = {
        loader: 'px2rem-loader',
        options: {
            remUnit: 192
        }
}

  

const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader]

5. Start project

reference:

 https://www.jianshu.com/p/a7c4ff4ed14c?utm_campaign=haruki

Guess you like

Origin www.cnblogs.com/shannen/p/12545382.html