美文网首页前端开发
移动端开发,rem布局方式总结

移动端开发,rem布局方式总结

作者: zhao_ran | 来源:发表于2020-09-13 16:31 被阅读0次

    rem是css3中新增加的长度单位,之前我们接触过em单位,em表示1em代表1个字体的宽度。而rem是根元素字体的大小,在网页中也就是设置的html根元素的字体大小。

    html {
      font-size: 16px;
    }
    /* html根元素的字体大小是16px,
     * 那么 1rem = 1* 16px  = 16px
     *      2rem = 2 * 16px = 32px 
    */
    

    可以通过设置元素的宽高直接用rem单位,然后根据不同的屏幕的宽度设置不同的html字体的大小,来实现自动适配不同屏幕的目的。

    1. 媒体查询改变根元素的字体大小

    CSS3新增加了媒体查询功能,也就是可以根据设备媒体的属性做相关的判断,然后执行不同的CSS规则。 媒体查询细节参考。

    /* 媒体查询以@media开头,然后后面可以跟上 判断的条件,比如:screen表示屏幕设备, and是并且的意思, min-width是最小宽度的意思。 */
    @media screen and (min-width: 320px) {
        html {font-size: 50px;}
    }
     
    @media screen and (min-width: 360px) {
        html {font-size: 56.25px;}
    }
     
    @media screen and (min-width: 400px) {
        html {font-size: 62.5px;}
    }
     
    @media screen and (min-width: 440px) {
        html {font-size: 68.75px;}
    }
     
    @media screen and (min-width: 480px) {
        html {font-size: 75px;}
    }
     
    @media screen and (min-width: 640px) {
        html {font-size: 100px;}
    }
    

    以上参考代码的意思是: 根据CSS的媒体查询设备的屏幕的宽度,根据宽度的大小设置密集的html根元素的字体大小。

    由于rem根据不同枚举的屏幕尺寸设置了不同的大小值,所以根据rem布局的元素会根据屏幕自动适配。

    缺点:媒体查询不能完全枚举,毕竟android的屏幕尺寸碎片化严重,各种尺寸都有,不能完全覆盖,只能大体覆盖。如果想要精确覆盖要么通过js实现,要么用最新的浏览器已经支持的calc实现。

    以上假设设计图是640像素。然后在640像素的设备上,1rem = 100px方便计算盒子的尺寸,可以直接口算。

    2. js实现动态改变根元素的字体大小

    通过js动态获取屏幕的宽度(document.clientWidth)然后根据屏幕宽度动态计算出rem的实际值。

    假设,640px的设备 1rem = 100px
    公式: rem = document.clientWidth / 640 * 100px;

    !(function(doc, win) {
        var docEle = doc.documentElement,
            evt = "onorientationchange" in window ? "orientationchange" : "resize",
            fn = function() {
                var width = docEle.clientWidth;
                width = width < 320 ? 320 : width;
                width = width > 640 ? 640 : width;
                width && (docEle.style.fontSize = 100 * (width / 640) + "px");
            };
         
        win.addEventListener(evt, fn, false);
        doc.addEventListener("DOMContentLoaded", fn, false);
     
    }(document, window));
    

    还有缩放自适应布局方式也是不错的

    <meta charset="utf-8">

    简单点说就是,开发的时候根据设计搞完全还原像素,然后根据屏幕的宽度通过js动态改变页面的缩放,恰好是理想视口的大小。

    原理核心就是修改页面mate标签的缩放。

    这样优点非常多,首先开发人员直接像素还原,开发效率很高,也没有移动端1像素的问题。也是推荐大家使用的方式。

    当然缩放布局方式也可以跟rem等方式结合,比如淘宝的flexible方案就是利用页面的缩放和rem模拟vw的方案,使用起来非常简单,稍微有点不爽的就是要像素和rem之间要进行转换,不过还好可以通过cssrem插件进行自动转换。
    具体代码案例参考:https://github.com/amfe/article/issues/17

    相关文章

      网友评论

        本文标题:移动端开发,rem布局方式总结

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