移动端开发 经典坑 第一弹

问题1.retina下图片的高清的问题css

解决:两倍图片html

举例:200*300 css pixel 的img标签,要提供 400*600 的图片。  -- 这样位图像素点的个数就是原来的四倍,在retina下,位图像素点个数就能够跟物理像素点个数造成 1:1的比例。app

缺点:1)普通屏幕下,一样下载了2倍大小的图片  2)因为downsampling 会失去锐利度函数

完美解决办法: 不一样的dpr下,加载不一样尺寸的图片,(经过css媒体查询,js判断均可以)布局

准备两套图片经过url参数控制图片的质量。字体

示例:url

如,这样一张原图:spa

https://img.alicdn.com/tps/TB1AGMmIpXXXXafXpXXXXXXXXXX.jpg // 原图

能够相似这样,进行图片裁剪:
// 200×200scala

https://img.alicdn.com/tps/TB1AGMmIpXXXXafXpXXXXXXXXXX.jpg_200x200.jpg

// 100×100code

https://img.alicdn.com/tps/TB1AGMmIpXXXXafXpXXXXXXXXXX.jpg_100x100.jpg

(ps: 固然裁剪只是对原图的等比裁剪,得保证图片的清晰嘛~)

 

问题2 reatina下 border:1px的问题

解决:页面的scale的方案,对于dpr = 2的retian屏幕,

<meta name="viewport" content="width=640,initial-scale=0.5,maximum-scale=0.5, minimum-scale=0.5,user-scalable=no">

这样将页面中全部的 border:1px 都缩小0.5,从而达到了border:0.5px 的效果

缺点:1.字体的大小 和页面的元素会被缩放???

 

问题3 多屏适配布局问题

解决:rem 概念略

示例:rem = document.documentElement.clientWidth * dpr / 10

具体:1.经过css 媒体查询的方案  -- 不够精确,具体略

2.js计算

var dpr, rem, scale;
var docEl = document.documentElement;
var fontEl = document.createElement('style');
var metaEl = document.querySelector('meta[name="viewport"]');
scale = 1 / dpr;
dpr = win.devicePixelRatio || 1;
rem = docEl.clientWidth * dpr / 10;
// 设置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);
// 动态写入样式
docEl.firstElementChild.appendChild(fontEl);
fontEl.innerHTML = 'html{font-size:' + rem + 'px!important;}';
// 给js调用的,某一dpr下rem和px之间的转换函数
window.rem2px = function(v) {
    v = parseFloat(v);
    return v * rem;
};
window.px2rem: function(v) {
    v = parseFloat(v);
    return v / rem;
};
window.dpr = dpr;
window.rem = rem;

优势:

1.解决了border:1px问题,2.解决了图片高清问题, 3. 屏幕

相关文章
相关标签/搜索