Fork me on GitHub

移动端适配

简单webApp的处理方案

这种app是一种典型的弹性布局:关键元素高宽和位置都不变,只有容器元素在做伸缩变换。对于这类app,记住一个开发原则就好:文字流式,控件弹性,图片等比缩放。

网易的做法(以设计稿为640的计算,还有750等等)

(1)先拿设计稿竖着的横向分辨率除以100得到body元素的宽度
如果设计稿基于iphone4/5,横向分辨率为640,body的width为640 / 100 = 6.4rem
(2)布局时,设计图标注的尺寸除以100得到css中的尺寸
播放器高度为210px,写样式的时候css应该这么写:height: 2.1rem。之所以取一个100作为参照,就是为了这里计算rem的方便!
(3)在dom ready以后,通过以下代码设置html的font-size。
document.documentElement.style.fontSize = document.documentElement.clientWidth / 6.4 + ‘px’;
这里的目的是保证,1rem等于100px,方便后面计算
(4)font-size可能需要额外的媒介查询,并且font-size不能使用rem
@media screen and (max-width:321px){
.m-navlist{font-size:15px}
}
@media screen and (min-width:321px) and (max-width:400px){
.m-navlist{font-size:16px}
}
PS:第一,需要设置视口

第二,当deviceWidth大于设计稿的横向分辨率时,html的font-size始终等于横向分辨率/body元素宽
var deviceWidth = document.documentElement.clientWidth;
if(deviceWidth > 640) deviceWidth = 640;
document.documentElement.style.fontSize = deviceWidth / 6.4 + ‘px’;
第三,当物理分辨率大于1280时,应该去访问PC网站了。

淘宝的做法

(1)动态设置viewport的scale
var scale = 1 / devicePixelRatio;
document.querySelector(‘meta[name=”viewport”]’).setAttribute(‘content’,’initial-scale=’ + scale + ‘, maximum-scale=’ + scale + ‘, minimum-scale=’ + scale + ‘, user-scalable=no’);
(2)动态计算html的font-size
document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + ‘px’;
(3)布局的时候,各元素的css尺寸=设计稿标注尺寸/设计稿横向分辨率/10
(4)font-size可能需要额外的媒介查询,并且font-size不使用rem,这一点跟网易是一样的。
PS:第一,当设备竖着时横向物理分辨率大于1080时,应该去访问PC网站了。

淘宝开源的布局库

lib-flexible
详细介绍

整理于互联网

-------------本文结束感谢您的阅读,如果本文对你有帮助就记得给个star-------------
Donate comment here