移动端根据屏幕宽度适配rem

常见设计稿尺寸为 750px , 此处以 750 为基准,当屏幕宽度为750px 时设置 html 根节点的 font-size 为 100px,1rem = 100px。故此,将屏幕宽度像素与750 的比值与 100px 相乘,得到最后的 font-size 为 html 的字体大小。后面的样式书写中,即可按照设计稿尺寸进行转换,(设计稿尺寸 × 0.01) rem 

<script>
    (function (doc, win) {
      var docEl = doc.documentElement,
        widthPoint = 750,
        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
        recalc = function () {
          var clientWidth = docEl.clientWidth;
          if (!clientWidth) return;
          if (clientWidth >= widthPoint) {
            docEl.style.fontSize = '100px';
          } else {
            docEl.style.fontSize = 100 * (clientWidth / widthPoint) + 'px';
          }
        };
      if (!doc.addEventListener) return;
      win.addEventListener(resizeEvt, recalc, false);
      doc.addEventListener('DOMContentLoaded', recalc, false);

      docEl.addEventListener('touchstart', function (event) {
        if (event.touches.length > 1) {
          event.preventDefault();
        }
      }, false);

    })(document, window);

  </script>

 有些机型上没法监听  DOMContentLoaded  事件,若放在 window.onload 里执行,就会导致页面加载过程中出现一闪而过的缩放过程。考虑以上,引入 jquery ,放在 $(document).ready(function(){}) 中

$(function(){
  // 设置 rem 单位
  setRem(document, window)
})

function setRem(doc, win) {
  var docEl = doc.documentElement,
    widthPoint = 750,
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    recalc = function () {
      var clientWidth = docEl.clientWidth;
      if (!clientWidth) return;
      if (clientWidth >= widthPoint) {
        docEl.style.fontSize = '100px';
      } else {
        docEl.style.fontSize = 100 * (clientWidth / widthPoint) + 'px';
      }
    };
  recalc()
  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  // doc.addEventListener('DOMContentLoaded', recalc, false);

  docEl.addEventListener('touchstart', function (event) {
    if (event.touches.length > 1) {
      event.preventDefault();
    }
  }, false);
}

-- end --

原文地址:https://www.cnblogs.com/_error/p/9619400.html