在前端模拟dp单位
公司设计师给的移动web的设计图都用dp作为标注,dp是一个安卓中使用的单位,能根据屏幕的ppi伸缩。使用ppi为单位,能解决很多自适应的问题。但是,前端并没有dp单位,所以需要使用别的方法模拟出来。
在手机中,如果屏幕为160ppi,则1dp=1px;如果屏幕为320ppi,则1dp=2px。dp和px的换算关系如下
现在设计师一般使用360dp作为手机屏幕的宽度,然后给开发人员1080px(@3x),720px(@2x)和360px(@1x)尺寸的素材。我就以屏幕宽度360dp在前端模拟dp单位。
在html代码中,加上
<script>
(function(doc,win){
var docElem=doc.documentElement;
var resizeEvt='orientationchange' in win ? 'orientationchange' : 'resize';
var setRootFontSize=function(){
var clientWidth=docElem.clientWidth;
var rootFontSize=clientWidth/18;
docElem.style.fontSize=rootFontSize+'px';
};
win.addEventListener(resizeEvt,setRootFontSize,false);
setRootFontSize();
})(document,window);
</script>
然后在less代码中,加上
// 1个栅格的宽度 = 1rem = 20dp
@dpA: 20;
// 模拟DP单位
@dp: 1/@dpA*1rem;
以后在调试html时,在chrome调试器中直接把屏幕宽度设置成360就好,这时1px = 1dp,在调试器中使用px单位,在less代码中再改成dp单位即可