rem布局

rem布局

- 为head添加 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
- js设置根节点字体大小 一般可以选择设计图屏宽的10分之一。因为这样可以通过sass等变量计算直接写设计图的数量单位。rem对应大小 = 设计图山大小/(设计图手机宽/10)
- css rem书写
我写了端js,直接放在头部就好了。

(function () {
      var dpr = window.dpr = window.devicePixelRatio || 1;
      var scale = 1;
      var rootFontSize;
      var docEl = document.documentElement;
      var metaEl = document.querySelector('meta[name="viewport"]');
      // 无需缩放,避免模糊
      metaEl.setAttribute('content', 'initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale + ',user-scalable=no');
      
      // 设置根字体大小
      function setRootSize() {
        var rootWidth = docEl.offsetWidth;
        // 将设计图分成10等份
        rootFontSize = rootWidth / 10;
        window.rootFontSize = rootFontSize;
        docEl.style.fontSize = rootFontSize + 'px';
        // 防止部分手机rem换算bug,需要打个补丁,检测修复一下
        remPatch();
      }

      // 检测rem比,并调整
      function remPatch() {
        var remTestFragment = document.createElement("div");
        remTestFragment.id = 'rem-test';
        remTestFragment.style.width = '10rem';
        remTestFragment.style.boxSizing = 'border-box';
        remTestFragment.style.opacity = 0;
        remTestFragment.style.position = 'absolute';
        remTestFragment.style.bottom = '-1000px';
        setTimeout(function () {
          document.body.appendChild(remTestFragment);
          var remTestNode = document.getElementById('rem-test');
          var currentTestWidth = remTestNode.offsetWidth;
          var rootFontSize = docEl.style.fontSize.replace(/px/, '') * 100;
          var scale = currentTestWidth*10 / rootFontSize;
          rootFontSize = rootFontSize / 100 / scale;
          window.rootFontSize = rootFontSize;
          docEl.style.fontSize = rootFontSize + 'px';
          remTestNode.parentNode.removeChild(remTestNode);
        })
      };

      var delay;
      function onResize() {
        clearTimeout(delay);
        delay = setTimeout(setRootSize, 300);
      }

      window.addEventListener('resize', onResize, false);
      setRootSize();

      // 计算
      window.px2rem = function (designPx) {
        return designPx / dpr / rootFontSize;
      }

    })();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容