移动端的适配方案

时间:2019-11-17 13:14:16   收藏:0   阅读:104

移动端的适配方案

不同的尺寸的手机设备上,页面相对合理的展示(自适应)或者保持统一效果的等比缩放

百分比适配

根据父级计算百分比,需要配合其他布局使用

<div class="container">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</div>
html,body{
    width:100%;
    .container{
        width:100%;
        div{
            float:left;
            width:25%;
        }
    }
}

viewport缩放适配

把所有机型的css像素设置成一致的,需要动态设置
缩放比公式: 缩放比 = css像素/375

<script>
    (function(){
        //获取CSS像素,需要确保缩放为1(minimum-scale=1,maximum-scale=1)
        let pageWidth = document.documentElement.clientWidth;
        let pageWidth = window.innerWidth;
        let pageWidth = window.screen.width;
        //求缩放比
        var scale = pageWidth / 375 ;
        //动态设置缩放比
        给meta标签设置id,用来获取元素
        document.getElementById("metaId").content=`initial-scale=${scale},minimum-scale=${scale},maximum-scale=${scale},user-scalable=no`;
        *注意,一定不要设置width=device-weidth,以及一定要设置最大最小缩放比

    })()
</script>

缺陷:大设备图片失真,缩放比为小数容易出现误差等.

DPR缩放适配

把CSS像素缩放成与设备像素一致的尺寸

和viewport适配类似(反推),根据dpr的值,把视口缩放到和物理像素,也就是把css像素的值设置成物理像素,让所有设备都变成物理像素和css像素1:1的结果

公式:   dpr = 视口宽度/375

<script>
    (function(){
        //先要检查是否有这个标签,有则修改,无则创建
        var meta = document.querySelector("meta[name='viewport']");
        var scale = 1/window.devicePixelRatio;
        if(!meta){
           meta = document.createElement("meta");
           meta.name="viewport";
           mate.content=`width=device-width,initial-scale=${scale},minimum-scale=${scale},maximum-scale=${scale},user-scalable=no`
           document.head.appendChild(meta)
        }else{
            //修改
            meta.setAttribute('content',`width=device-width,initial-scale=${scale},minimum-scale=${scale},maximum-scale=${scale},user-scalable=no`)
        }


    })()
</script>

rem适配

rem的本质是计算元素占屏幕的百分比,单位rem需要设置到html标签上,代表屏幕每一列的宽度

设置rem的方式

根据屏幕设备的区间(min-width)来设置font-size的值
ios9不支持ES6,要么使用es5写法,要么后续使用bable处理

hotcss适配(使用dpr+rem,简单好用)

其使用了dpr的原理和rem结合
开源项目地址:??直达

优点:直接使用在设计图中量出来的尺寸,无需进行计算转化,如元素量出来宽是187.5px,那么在scss/less文件中写为:

width:px2rem(187.5);

vw/vh适配(为适配而生,最优方案)

vw、vh是一个css单位(Viewport‘s Width,Viewport‘s Height)
vmin 取vw\vh中最小的值
vmax 取vw\vh中最大的值
横竖屏切换时,它们会互换
vw/vh是将屏幕宽高都分成100份,1vw为屏幕1%的宽度,1vh为屏幕1%的高度
优点:为适配而生,逮着就用,不需要转化
存在兼容性问题: IOS>=8 Android>=4.4

方案一:全页面使用vw
方案二: 通过vw设置根节点字体,然后使用rem适配,无需使用js

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!