使用 rem 实现移动端的自适应布局

先看一下网上对 rem 的介绍:rem 是CSS3新增的相对长度单位,是指相对于根元素htmlfont-size计算值的大小;

设计思路:可以看出 rem 是一个相对长度单位,而且是 “相对于根元素 html的 font-size计算值的大小”,例如:我们 设置一页面的 html 标签的 font-size 为 16px,如下:

html {
    font-size: 16px;
}

然后,我们给该页面内一 div 标签设置如下 css:

div {
    width: 2rem;
}

那么该div的实际宽度应该是:2 *  16px = 32px;基于这种特性,我们可以为不同宽度的设备屏幕为根节点设置不同 font-size,然后页面元素宽度根据视觉稿给出的计算出对应的 rem,便可实现宽度自适应。

项目初始,我们会拿到 视觉工程师提供的视觉稿,该视觉稿通常是根据某一固定机型(如 iphone6s)所设计,如下:

 

       我们知道,iphone6s 的屏幕宽度为 375px(这里的的 375 是指 设备独立像素),但通常视觉稿给出的宽度却是 750px,是实际宽度的2倍,这是因为 iphone6s 使用的是 retina 屏幕,dpr = 2(设备像素比 device pixel ratio ), 如果设计稿宽度定为 375px,会导致设计稿上图片在iphone6s上显示模糊,具体原因请参阅 dpr(设备像素比)与 移动端适配

因此为了方便计算,我们可将 html 的 font-size 设置为 375px;但是并不是所有的手机屏幕宽度都一样,因而我们可以 用一段 js 代码去获取屏幕的宽度,并将 html 的 font-size 设置为该宽度:

window.onload = function() {
		setrem();
		window.addEventListener("resize",function(){
			setrem();				
		});
}

function setrem() {
		var el = document.getElementsByTagName("html")[0];
		el.style["fontSize"] = el.clientWidth + "px";
}

 

这样,我们就可以使用 rem 为 页面中的元素设置宽度了,例如视觉稿中有一 Button 宽度为 200 px; 那么转化为 rem 应该是 200px / 750px * 1rem = 0.26666667rem,对应css如下:

button {
    width:0.26666667rem;
}

为了方便,我们在 sass 中可以用函数帮我们转换,如下:

$design-doc-width:750px; //视觉稿采用宽度
@function px2rem($px:0px) {
    @return $px / $design-doc-width * 1rem;
}

button {
    width:px2rem(200px);
}

到此为止,我们就已经用 rem 实现了简单的自适应,当然实际项目中还有许多细节问题要处理,详细请参阅:使用 rem 实现移动端自适应布局应该注意哪些问题?

这是我在 csdn 发的第一篇文章,有什么错误遗漏之处,还请大家多多指正,谢谢!

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值