点击上方 前端瓶子君,关注公众号

回复算法,加入前端编程面试算法每日一题群


浅析rem布局方案-LMLPHP

  • 浅析rem布局方案-LMLPHP

    以此类推

    这里说明一下,无论dpr多大,1px的大小通常来说是一致的,这也就意味着,随着dpr的增大,物理像素点会越来越小,这样才能容纳更多的物理像素,才能更高清,更retina

    说完基本概念,来说一下几个问题:

    retina屏图片模糊

    那为什么在dpr高的retina屏上反而会模糊呢?看图~

    虽然这样在dpr1的屏幕上会导致1个物理像素上有4个位图像素,但是这种情况的取色算法更优,影响不大,不做讨论。

    1px的粗细问题

    viewport

    三个概念

    layout viewport

    visual viewport

    ideal viewport

    一个特性

      <meta name='viewport' content='initial-scale=1' />

    rem适配方案

    // 第一版:
    function initRem({
      const meta = document.querySelector('meta[name="viewport"]');;
      const html = document.documentElement;
      const cliW = html.clientWidth;
      const dpr = window.devicePixelRatio || 1;
      meta.setAttribute('name''viewport');
      meta.setAttribute(
          'content',
          `width=${cliW * dpr}, initial-scale=${1 /
              dpr} ,maximum-scale=${1 /
     dpr}
    , minimum-scale=${1 /
              dpr},user-scalable=no`
      );
      html.setAttribute('data-dpr', dpr);
      /
    / 这样计算的好处是,你可以直接用ui的px/100得到的就是rem大小,方便快捷,无需mixin
      html.style.fontSize = 10 / 75 * cliW * dpr + 'px';
    }
    initRem();
    window.onresize = window.onorientationchange = initRem();

    最后



    本文分享自微信公众号 - 前端瓶子君(pinzi_com)。
    如有侵权,请联系 [email protected] 删除。
    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    04-20 14:50