移动端适配

flexible随笔

2016-12-19  本文已影响71人  classic_

1.什么是flexible?

flexible是responsive的低端形态和基础。直观来说,在任何宽度的屏幕上,网页显示不会两边留白,相当于PC端的流体布局,两者的区别在于,流体布局的表现角度在于实现,flexible的表现角度注重结果。

网页的设计常用的后两种方式:

关于像素的几个概念

物理像素:显示屏的最佳分辨率,即屏幕实际存在的像素行数乘以列数的数学表达式,是显示屏固有的参数,不能调节,其含义是指显示屏最高可显示的像素数。单位:px

逻辑像素:在不同大小的屏幕中 逻辑像素不同,可以根据需要来设定多少倍的px,如:1pt=4px

Retina屏:Retina是一种显示技术,可以将更多的像素点压缩至一块屏幕里,从而达到更高的分辨率并提高屏幕显示的细腻程度。最初该技术用于Moto Aura上,通常这种分辨率在正常观看距离下无法使肉眼分辨其中的显像单元,也 称为视网膜显示屏。

2.lib-flexbile

<meta name="flexible" content="initial-dpr=2" />

其中initial-dpr会把dpr强制设置为给定的值。如果手动设置了dpr后,不管设备是多少dpr,都会强制使用手动设置的值。

if (!dpr && !scale) {
var isAndroid = win.navigator.appVersion.match(/android/gi);
var isIPhone = win.navigator.appVersion.match(/iphone/gi); 
var devicePixelRatio = win.devicePixelRatio; 
    if (isIPhone) { // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案
        if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { 
              dpr = 3;
        } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){ 
              dpr = 2;
        } else {
               dpr = 1;
       }
    } else { // 其他设备下,仍旧使用1倍的方案 
          dpr = 1;
    } 
           scale = 1 / dpr;
}

js做了这么几件事:

1.动态改写<meta>标签
2.给<meta>元素添加data-dpr属性,并且动态改写data-dpr的值
3.<html>元素添加font-size属性,并且动态改写font-size的值

div { 
    width: 1rem; 
    height: 0.4rem; 
    font-size: 12px; // 默认写上dpr为1的fontSize
}
[data-dpr="2"] div {
    font-size: 24px;
}
[data-dpr="3"] div {
    font-size: 36px;
}
上一篇下一篇

猜你喜欢

热点阅读