HTML5技术

页面在移动端不同屏幕下自适应的尝试和心得之一 - 天上云好白

字号+ 作者:H5之家 来源:H5之家 2016-04-22 14:00 我要评论( )

写在前面 现在手机发展迅猛,屏幕大小不一,在刚刚做手机端项目的时候,页面的自适应就成了一个难题。首先,使用px肯定是行不通的,那么我刚开始用的是em,但是随着项目的深入,em的缺陷就暴露无遗了,我总结有以下两点: 1.em单位基准值的确定及换算 em是相

 

写在前面

现在手机发展迅猛,屏幕大小不一,在刚刚做手机端项目的时候,页面的自适应就成了一个难题。首先,使用px肯定是行不通的,那么我刚开始用的是em,但是随着项目的深入,em的缺陷就暴露无遗了,我总结有以下两点:

1.em单位基准值的确定及换算

em是相对长度单位。相对于当前对象内文本的字体尺寸。

上面是百度到的对em的定义,如果你没有对当前元素设置font-size属性,那么它就会默认继承其父级元素的font-size属性。可想而知,当html结构层层嵌套的时候,当前元素em的基准值是多少以及之后的换算会是一件很烦的事,工作效率很低。

2.em单位的基准是当前元素字体大小而非屏幕宽度

我们所谓的自适应,应当是根据设备屏幕宽度适应,而em单位归根究底,它的基准是当前元素字体大小,而不是屏幕的宽度。

 

rem的使用

那么很自然的,就学习到了使用rem这个单位。rem是css3中的一个新属性,官方对它的表述是“font size of the root element”。翻译过来就是相对根元素的字体大小的单位,和em相同,它也是一个相对单位,但和em不同的是,它是相对于根元素的。这个特性决定了,利用它可以使网页等比例适配所有屏幕,可以说是web app制作的利器。

关于rem其实用法有很多,但我在开始的时候使用了很愚蠢的一种,当时有这么一个项目,只要求移动端ios手机设备的适配。所以我就写了以下的一套media query

html { font-size: 20px; } @media screen and (max-width: 320px) { html { font-size: 17px !important; } } @media screen and (min-width: 414px) { html { font-size: 26.6667px !important; } }

当时的设计稿是750的,也就是基于iphone6设计的。我这种写法的缺点其实就一目了然了,首先,局限性很强,就是专门给ios手机做的。再一个,换算很累,rem值等于设计值除以40,工作效率可想而知。所以现在回头来看,确实比较蠢。。。于是我就去请教百度了。

我找到了网友流云诸葛的这一篇博客  从网易与淘宝的font-size思考前端设计稿与工作流

文章很好的总结了网易以及淘宝的一些做法,其中网易的做法,就可以比较好的解决我之前代码的两个缺点,代码如下:

// 根据不同设备的屏幕宽度,设置根元素font-size
//
以设计稿750宽为例
// 这样rem的值就等于设计稿值除以100
document.documentElement.style.fontSize = document.documentElement.clientWidth / 7.5 + 'px';

然后我又看到了淘宝的方案,它还给我们提供了一个开源的解决方案  github地址

淘宝的做法不光动态设置根元素font-size,还通过缩放viewport来达到效果。我后来去看了源码,觉得这套方案非常的不错,下一篇博客就准备讲一讲淘宝的这套方案。

 

 

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

相关文章
  • [移动端] IOS下border-image不起作用的解决办法 - 小路_同学

    [移动端] IOS下border-image不起作用的解决办法 - 小路_同学

    2017-05-02 12:04

  • 业务订单号生成算法,每秒50W左右,不同机器保证不重复,包含日期可读性好 - 洛城秋色

    业务订单号生成算法,每秒50W左右,不同机器保证不重复,包含日期可

    2017-04-23 12:02

  • 移动前端常用meta标签 - 0jiji0

    移动前端常用meta标签 - 0jiji0

    2017-04-21 12:00

  • 移动端WEBAPP开发遇到的坑,以及填坑方案!持续更新~~~~ - ygjoe

    移动端WEBAPP开发遇到的坑,以及填坑方案!持续更新~~~~ - ygjoe

    2017-04-16 11:00

网友点评
>