移动端布局

作者: BA_凌晨四点 | 来源:发表于2021-07-30 10:02 被阅读0次

    1. REM布局

    根据设计稿动态计算 html 的font-size

    蓝湖上的设计稿.png
    公式:fontSize = 100 * (clientWidth / 设计稿的宽度) + 'px';
    (function (doc, win) {
          const docEl = doc.documentElement,
            resizeEvt = 'orientationchange' in win ? 'orientationchange' : 'resize',
            recalc = function () {
              const clientWidth = docEl.clientWidth;
              if (!clientWidth) return;
              docEl.style.fontSize = 100 * (clientWidth / 360) + 'px';  // 这里的360是设计稿的宽度
            };
          recalc();
          if (!doc.addEventListener) return;
          win.addEventListener(resizeEvt, recalc, false);
        })(document, window)
    

    如果还要兼容上PC屏幕的话,可以这么写:

    (function (doc, win) {
          const docEl = doc.documentElement,
            resizeEvt = 'orientationchange' in win ? 'orientationchange' : 'resize',
            recalc = function () {
              const clientWidth = docEl.clientWidth;
              if (!clientWidth) return;
              if (clientWidth >= 640) {  // 如果超过手机设计稿,则按照 pc 固定基本 fontSize
                        docEl.style.fontSize = '100px';
                    } else {
                        docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';
                    }
            };
          recalc();
          if (!doc.addEventListener) return;
          win.addEventListener(resizeEvt, recalc, false);
        })(document, window)
    

    用的时候直接把设计稿上的px,小数点往前挪动两位即可
    比如:

    // 设计稿:
    width: 325px;
    
    // 写法:
    width: 3.25rem;
    

    当然啦,也不一定所有单位都用rem,比如一些固定位置的,某些情况的marginpaddingtopleft等可以用px

    2. 微信小程序、uni-app的rpx布局

    公式:750rpx * 元素宽度 / 设计稿宽度

    例如:设计稿750px宽度
    那么恭喜您,你设计稿上量出宽度是多少,那么你就定义多少rpx,即 1px = 1rpx

    例如:设计稿360px宽度
    那么很遗憾,你需要转换一下 1px = 750/360 rpx

    利用 scss:

    @function mRpx($px) {
        @return 750rpx * $px / 360;;  // 这里的360是设计稿的宽度
    }
    

    使用:

    设计稿量出宽度是多少,那么你就定义多少

    // 设计稿:
    width: 325px;
    
    // 写法:
    width: mRpx(325);
    

    3. vw、vh布局

    宽度分为100份,每一份是1vw;高度分为100份,每一份1vh

    利用 scss:

    // 根据设计稿宽度360,设计的vw适应
    $base_width: 360;
    $base_height: 640;
    
    @function vw($px) {
      @return ($px / $base_width) * 100vw;
    }
    
    @function vh($px) {
      @return ($px / $base_height) * 100vh;
    }
    

    使用:

    设计稿量出宽度是多少,那么你就定义多少

    // 设计稿:
    width: 325px;
    
    // 写法:
    width: vw(325);
    

    这些布局不一定每一处都使用,要灵活结合百分比%flexfloat等。
    如果要兼顾多设备的布局变化,需要媒体查询@media

    // 屏幕宽度小于300px时候:
    @media screen and (max-width: 300px) {
        .container {
           width: 300px;
        }
    }
    

    相关文章

      网友评论

        本文标题:移动端布局

        本文链接:https://www.haomeiwen.com/subject/gjiumltx.html