移动端自适应

在进行具体的分析前,首先得了解一些关键性基本概念(术语)。

物理像素(physical pixel):

        一个物理像素是显示器(手机屏幕)上最小的物理显示单元,在操作系统的调度下,每一个设备像素都有自己的颜色值和亮度值。

设备独立像素(density-independent pixel):

        设备独立像素(也叫密度无关像素),可以认为是计算机坐标系统中得一个点,这个点代表一个可以由程序使用的虚拟像素(比如: css像素),然后由相关系统转换为物理像素。

        所以说,物理像素和设备独立像素之间存在着一定的对应关系,这就是接下来要说的设备像素比。

设备像素比(device pixel ratio )

        设备像素比(简称dpr)定义了物理像素和设备独立像素的对应关系,它的值可以按如下的公式的得到:设备像素比 = 物理像素 / 设备独立像素。

        在javascript中,可以通过window.devicePixelRatio获取到当前设备的dpr。

        在css中,可以通过-webkit-device-pixel-ratio-webkit-min-device-pixel-ratio和 -webkit-max-device-pixel-ratio进行媒体查询,对不同dpr的设备,做一些样式适配(这里只针对webkit内核的浏览器和webview)

        在不同的屏幕上(普通屏幕 vs retina屏幕),css像素所呈现的大小(物理尺寸)是一致的,不同的是1个css像素所对应的物理像素个数是不一致的。

扫描二维码关注公众号,回复: 869110 查看本文章

        在普通屏幕下,1个css像素 对应 1个物理像素(1:1)。
        在retina 屏幕下,1个css像素对应 4个物理像素(1:4)。

通常利用rem换算px的时候,这时候要加上meta<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>,根据设计稿尺寸设置出不同的换算比例

(function(doc, win) {

    var docEl = doc.documentElement,

        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',

        recalc = function() {

            var clientWidth = docEl.clientWidth;

            if(!clientWidth) return;

            if(clientWidth >= 769) {

                docEl.style.fontSize = '100px';

            } else {

                docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';

            }

        };

    if(!doc.addEventListener) return;

    win.addEventListener(resizeEvt, recalc, false);

    doc.addEventListener('DOMContentLoaded', recalc, false);

})(document, window);

关于手淘flexible的使用

        1、本地引入flexible.js(注意:通常不要写<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>,交给flexible自动处理)此时,可以看到在模拟器里面html的font-size已经修改成了

        

        2、除font-size外,其它大小都根据750标注稿的尺寸,转换成rem单位的值,转换方法为:标注稿尺寸 / 标注稿基准字体大小;(标注稿基准字体大小 = 标注稿宽度 / 10,如标注稿宽为750,标注稿基准字体大小为75;标注稿宽为640,标注稿基准字体大小为64;(所以淘宝这个方案是可以在任意设计稿尺寸下使用的))

        3、如果需要设置font-size,可跟据html的data-dpr属性来处理,类似下面的写法:

                [data-dpr="2"] p { font-size: 16px; }

                [data-dpr="3"] p { font-size: 24px; }

        4、如果你是用了scss,需要事先定义了一个变量来保存标注稿基准字体大小:

                

        5、借助html元素的data-dpr属性,可以轻松实现另一种媒介查询,以便在devicePixelRatio>=2的时候启用@3x下的图片,以安卓下载按钮的样式为例,写法是:

                .btn-android {

                         background-image: url("../img/@2x/android.png?v=@@version");

                        [data-dpr="3"] & {

                                 background-image: url("../img/@3x/android.png?v=@@version");

                         } }

        参考链接:https://blog.csdn.net/xiaomogg/article/details/50815990

                         http://www.aliued.com/?p=3166&from=groupmessage&isappinstalled=0  

        

        

              

猜你喜欢

转载自my.oschina.net/u/3705266/blog/1813494