libflexible 知识点整理

目标:解决移动端界面适配问题

观点:一、不同像素比的设备上的文字呈现出来的大小应该是一致的 

         二、ios设备的设备像素比分为1,2;android设备的设备像素比都为1

         三、以540为基准宽度,以width/10为根源素fontsize

         四、图片采用2x以上的

解决方案:

        一:将1/dpr设置为缩放比例且body上的fontsize设置为12*dpr,这样就能保证字体在不同设备像素比的设备字体一致(仅能保证默认字体大小是一致的,如果存在自定义的字体大小需要自己手动或者插件进行转换)

        二:都是经验之谈,减少不必要的工作量

        三:这个540其实是个经验值,或者最大值,这个经验是怎么得出来的呢?
目前主流手机最大的css像素尺寸,是540(比如devicePixelRatio为2,分辨率是1080x1920的手机),所以用了这个经验值。这样可以让在ipad横屏这种情况下浏览无线页面,不至于因为拉伸适配后体验太差。
换句话说,这个540像素值是手机屏幕能到达的最大宽度(在考虑dpr以后),如果有宽度超过540的情况,则说明该网页被显示在 dpr超过1的大屏安卓机、ipad、PC端上。这时候,就使用540这个宽度(代码里是dpr*540,除了iPhone不会有dpr超过1的情况出现,所以基本上就是540)作为默认宽度。然后将屏幕宽度除以10作为rem值(模拟vw/vh实现),应用在document元素上,并且将计算得到的rem值输出到全局变量以供调用。

       四:由于ios端dpr的值为2所以物理像素/css像素的值为2,意味者1个css占据一4个物理像素,一个CSS像素点实际分成了四个,这样就造成了颜色只能近似选取,于是,我们看上去就变得模糊了,反之位图图像质量是由单位长度内像素的多少来决定的。单位长度内像素越多,分辨率越高,图像的效果越好,所以要采用2x以上的图片。

其他:设置user-scalable=no在手机浏览器上面并不能生效,webview可以生效

         脚本禁止用户手动缩放:

     

document.documentElement.addEventListener('touchstart', function (event) {
    if (event.touches.length > 1)event.preventDefault();
}, false);
var lastTouchEnd = 0;
document.documentElement.addEventListener('touchend', function (event) {
    var now = (new Date()).getTime();
    if (now - lastTouchEnd <= 300)event.preventDefault();
    lastTouchEnd = now;
}, false);

     链接:https://github.com/amfe/article/issues/17#ref-issue-382582765

              https://blog.csdn.net/hu_mouse/article/details/46805251

              https://www.w3cplus.com/css/viewports.html

原文地址:https://www.cnblogs.com/zale-blogs/p/12426599.html