zoukankan      html  css  js  c++  java
  • JS 自动计算HTML的font-size

    Rem尺寸解决方案,需要配合一些js动态设置<html>标签的font-size 和 viewport来配合

    <script>
    (function(doc, win) {
    var dpr, rem, scale;
    var docEl = document.documentElement;
    var metaEl = document.querySelector('meta[name="viewport"]');
    var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
    
    
    /*isAndroid = navigator.userAgent.match(/(Android)/) ? true:false;
    isIos = navigator.userAgent.match(/(iPad|iPhone)/) ? true:false;*/
    if (navigator.userAgent.match(/(Android)/)) {
    dpr = 1;
    } else {
    dpr = win.devicePixelRatio || 1;
    }
    scale = 1 / dpr;
    // 设置viewport,进行缩放,达到高清效果
    metaEl.setAttribute('content', 'width=device-width,initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale + ',user-scalable=no,shrink-to-fit=no');
    // 设置data-dpr属性,留作的css hack之用
    docEl.setAttribute('data-dpr', dpr);
    var recalc = function() {
    // if (docEl.style.fontSize) return;
    clientWidth = docEl.clientWidth;
    // console.log(clientWidth);
    if (!clientWidth) return;
    docEl.style.fontSize = clientWidth / 10 + 'px';
    if (document.body) {
    document.body.style.fontSize = docEl.style.fontSize;
    }
    if (dpr == 1) {
    // 动态写入样式
    var fontEl = document.getElementById('init_style');
    var pxscale = clientWidth / 750;
    docEl.firstElementChild.appendChild(fontEl);
    fontEl.innerHTML = '.px-scale{transform:scale(' + pxscale + ') !important;-webkit-transform:scale(' + pxscale + ') !important;}'; //雪碧图缩放
    }
    };
    recalc();
    
    // 给js调用的,某一dpr下rem和px之间的转换函数
    window.rem2px = function(v) {
    v = parseFloat(v);
    return v * rem;
    };
    window.px2rem = function(v) {
    v = parseFloat(v);
    return v / rem;
    };
    
    window.dpr = dpr;
    window.rem = rem;
    
    if (!doc.addEventListener) return;
    win.addEventListener(resizeEvt, recalc, false);
    doc.addEventListener('DOMContentLoaded', recalc, false);
    // doc.addEventListener('touchstart', function(e) { e.preventDefault();}, false);
    
    })(document, window);
    </script>

    这样一来,页面的所有css尺寸单位都得换成rem了。但计算又特别麻烦。有两种解决方案:

    1、sass、less、postcss 的 @function

    @charset 'utf-8';
    
    $base-font-size: 75px; //design iphone6: 375px * 2 / 10 = 75px; --design
    // $base-font-size: 32px; //design iphone3gs: 320px / 10 = 32px
    // $base-font-size: 64px; //design iphone4/5: 320px * 2 / 10 = 64px
    // $base-font-size: 124.2px; //design iphone6: 414px * 3 / 10 = 124.2px;
    
    
    @function pxToRem($px) {
        @return  $px / $base-font-size * 1rem;
    }

    2、sublime Text 插件的解决方案

    github地址:https://github.com/flashlizi/cssrem

    http://www.cnblogs.com/CyLee/p/6494567.html
  • 相关阅读:
    flask-离线脚本、with在上下文的应用
    websocket原理及实时投票
    微信消息的推送
    Django + Uwsgi + Nginx 的生产环境部署2
    UVA 11853 Paintball
    UVA 12171 Sculpture
    UVA 10305 Ordering Tasks
    UVA 816 Abbott's Revenge
    UVA 699 The Falling Leaves
    UVA 12657 Boxes in a Line
  • 原文地址:https://www.cnblogs.com/CyLee/p/6494211.html
Copyright © 2011-2022 走看看