您的位置:首页 > 其它

多屏适配解决方案

2017-06-26 11:16 120 查看
多屏适配初步方案

1、确定设计稿(以iphone为例)

由上图可知iPhone6为基准,及设计稿出750*1334px,物理尺寸:375*667

2、高清屏与普通屏的设备像素比不同,如何确保图片不失真,文字大小一致。

图片:图片不失真的具体方案,不同像素比下,引用不同图片



但是,我们需要考虑,如何保持图片容器大小一致。写死宽高,显然不是最佳方法。缩放,对这是个不错的方法;可是接下来,文字缩放,显然会变得很小,这时候rem就派上了用场,我们可以设置不同的根元素的font-size(rem)



ok接下来实践一下,如下图,基本达到预期



其他:

less的变量、Mixin、函数可以提高写样式效率;

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

var dpr, rem, scale;
var docEl = document.documentElement;
var metaEl = document.querySelector('meta[name="viewport"]');
dpr = window.devicePixelRatio || 1;
rem = docEl.clientWidth * dpr / 10;
scale = 1 / dpr;
//
//          // 设置viewport,进行缩放,达到高清效果
metaEl.setAttribute('content', 'width=' + dpr * docEl.clientWidth + ',initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale + ',user-scalable=no');
// 设置data-dpr属性,留作的css hack之用
docEl.setAttribute('data-dpr', dpr);


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

图片的统一替换:(此处以1、2、3为分界点)

var lowres,images = $('img');
if(window.devicePixelRatio > 1 && window.devicePixelRatio < 3) {
images.each(function(i) {
var lowres = $(this).attr('src');
var highres = lowres.replace(".", "@2x.");
$(this).attr('src', highres);

});
} else if(window.devicePixelRatio >= 3) {
images.each(function(i) {
var lowres = $(this).attr('src');
var highres = lowres.replace(".", "@3x.");
$(this).attr('src', highres);
})
}


一些基本概念:

视窗 viewport

简单的理解,viewport是严格等于浏览器的窗口。在桌面浏览器中,viewport就是浏览器窗口的宽度高度。但在移动端设备上就有点复杂。

移动端的viewport太窄,为了能更好为CSS布局服务,所以提供了两个viewport:虚拟的viewportvisualviewport和布局的viewportlayoutviewport。

meta标签

标签有很多种,而这里要着重说的是viewport的meta标签,其主要用来告诉浏览器如何规范的渲染Web页面,而你则需要告诉它视窗有多大。在开发移动端页面,我们需要设置meta标签如下:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">


代码以显示网页的屏幕宽度定义了视窗宽度。网页的比例和最大比例被设置为100%。

物理像素(physical pixel)

物理像素又被称为设备像素,他是显示设备中一个最微小的物理部件。每个像素可以根据操作系统设置自己的颜色和亮度。正是这些设备像素的微小距离欺骗了我们肉眼看到的图像效果。

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

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

CSS像素

CSS像素是一个抽像的单位,主要使用在浏览器上,用来精确度量Web页面上的内容。一般情况之下,CSS像素称为与设备无关的像素(device-independent pixel),简称DIPs。

屏幕密度

屏幕密度是指一个设备表面上存在的像素数量,它通常以每英寸有多少像素来计算(PPI)。

设备像素比(device pixel ratio)

设备像素比简称为dpr,其定义了物理像素和设备独立像素的对应关系。它的值可以按下面的公式计算得到:

设备像素比 = 物理像素 / 设备独立像素

如下图所示,某元素的CSS样式:width: 2px;height: 2px;



在不同的屏幕上,CSS像素所呈现的物理尺寸是一致的,而不同的是CSS像素所对应的物理像素具数是不一致的。在普通屏幕下1个CSS像素对应1个物理像素,而在Retina屏幕下,1个CSS像素对应的却是4个物理像素。

CSS单位rem:rem就是相对于根元素的font-size来做计算

CSS单位em:em就是相对于元素的font-size来做计算

如下图:


感谢:https://github.com/amfe/article/issues/17
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多屏适配