HTML5技术

妈妈再也不用担心我的移动端了:网易和淘宝的rem方案剖析 - 菜鸟先飞1992(4)

字号+ 作者:H5之家 来源:H5之家 2017-03-28 11:01 我要评论( )

我们只需以 iPhone6的设计稿(当前主导的机型),750px宽完成一套页面,当去到其他设备时,因为我们用的都是rem值,只需要通过JS动态获得当前的dw,再通过动态获取的dw改变html的font-size值,页面的其他元素也会因

  我们只需以iPhone6的设计稿(当前主导的机型),750px宽完成一套页面,当去到其他设备时,因为我们用的都是rem值,只需要通过JS动态获得当前的dw,再通过动态获取的dw改变html的font-size值,页面的其他元素也会因为html的改变而进行等比例缩放。

 

 

步骤:

  1.根据设计稿尺寸完成页面;

  2.设置meta,控制视口宽度,让页面以1:1比例渲染页面

  3.动态设置html的font-size;

  4.把各元素的px值除以100转换为rem(字体除外)

 

网易方案关键代码:

    设置视口: 

    动态设置html的font-size:

document.documentElement.style.fontSize = document.documentElement.clientWidth / 7.5 + 'px';

 

——————————————————————————————————我是华丽的分割线———————————————————————————————————

淘宝rem方案:

(1)根据设计稿尺寸完成页面切图。

(2)通过JS获得当前设备的DPR值,然后动态设置meta的scale值。scale值为缩放值,控制页面的渲染比例。

   假设当前设计稿宽为750px的Ipone6设计稿,我们也按照这个尺寸实现了页面。如果当前打开页面的设备为Iphone6(以下简称IP6),IP6的设备宽度为375px,让375px的视口宽度也实现750px的页面肯定是装不下的(显示不完全,有滚动条)。

   所以我们需要动态设置meta的scale值,通过scale值改变当前的视口宽度。虽然当前的设备宽度仍然为375px,但是我们通过DPR值控制了当前的视口宽度为:

    

   这就相当于我们把750px的页面放到了750px的设备(通过改变scale值模拟出来的视口)中打开,然后透过375px的设备(当前打开页面的设备)去观看(注意:这里是观看,不是渲染。) 页面。

(3)动态设置html的font-size:

    “淘宝公式”:

             

    假设当前打开的设备为IP6:

            

    假设当前打开的设备为IP5:

            

(4)把各元素的设计稿尺寸从px转换为rem:

            

    假设当前以IP6为设计稿实现的页面,其中一元素的宽度为150px,

    根据以上分析可得,当前:

              

    把150px转为rem得:

                

    再假设当前打开页面的设备为IP5,可得:

                

    那么150px的元素在当前页面显示的真实尺寸应该为:

                

    又得:

                

    通过比例可知当前页面在不同设备之间实现了等比例缩放,就算再放到其它的手机也一样会根据动态算出的scale值实现等比例的缩放。

 

 

 

 

总结:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 微信小程序体验(2):驴妈妈景区门票即买即游 - 腾讯攻城师lee

    微信小程序体验(2):驴妈妈景区门票即买即游 - 腾讯攻城师lee

    2017-01-08 08:02

  • 不用asp.net MVC,用WebForm照样可以实现MVC(请看最后一句话) - 杨中科

    不用asp.net MVC,用WebForm照样可以实现MVC(请看最后一句话) - 杨

    2015-12-25 14:27

  • 将BootstrapJS和AngularJS结合使用以及为什么不用jQuery - 数通畅联

    将BootstrapJS和AngularJS结合使用以及为什么不用jQuery - 数通畅联

    2015-12-22 09:51

  • 不用Unity库,自己实现.NET轻量级依赖注入 - Lizon

    不用Unity库,自己实现.NET轻量级依赖注入 - Lizon

    2015-12-02 17:41

网友点评
f