浅尝MUI-HTML5机型适配问题

写在前面

  作为一名程序员,在拿到美工MM的设计稿时,脑海里肯定回想,怎么才能完美的将美工MM通过程序给copy出来呢?(ps:开玩笑,将美工MM的设计稿完美的用代码呈现出来 ^ _ ^)。因为不管在安卓还是苹果,每款手机都有一个固定的屏幕尺寸,而程序员要做的是将美工的设计稿完美的呈现在不同的设备上,那么对于机型的适配必不可少。因此,今天就想来谈谈机型适配方面的问题。
  首先,我们都知道,在安卓的大家庭里面各种各样的屏幕都会有,是没有一个统一的标准的,因此,在不同的设备上,我们需要根据屏幕的大小来对我们的APP做等比例的缩放处理,也就是所谓的适配。当然,和安卓开发有一点不同的是,使用HTML5开发是不能使用安卓或IOS原生开发的那些适配方式,只能使用web端的一些适配方式,以下三种是我接触过的适配方式,我就简单的和大家谈谈我对他们的简单理解:(ps:如有更好的适配方式,建议或意见还请各位大大指出,感激不尽^ _ ^)

px+百分比方式适配

  在我看来,这种适配方式应该是最简单的,将宽度全部使用百分比的形式处理,而高度根据设计稿给出的高度来处理。并且对于各种设备都是挺友好,但是我发现有一个问题就是,对设计稿的还原度不是很高,因为设计稿上应该标的宽度和高度都是px,(ps:找美工MM把宽度改成百分比来表示也不失为一种办法,^ _ ^)因此有时候得到的页面效果不是很理想,毕竟设计者是按照每个像素每个像素抠的,然后我们拿到后几个像素几个像素的误差来做,还是有点说不通。因此,我觉得对于简单的应用或者对界面要求不高的界面可以使用这种方式来做。

viewport方式适配

  这种方式理解起来可能要难一点,不过其实还是很简单的,我这里讲的可能比较的简单,具体的这种方法的应用,各位可以自行百度,下面我就简单的说说这种适配方式。
  首先我们都知道HTML5里面有个<meta /> 标签,并且有个viewport属性
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  在做手机端网页的时候,都会加入这样一段代码,具体的意思我就不解释了,这行代码让我们的网页不进行缩放,我们可以稍微做点改变
<meta name="viewport"content="width=320,maximum-scale=1.2,user-scalable=no">
  经过我们的改造后,让网页的宽度固定到了320px,并且缩放1.1倍,那么320X1.2=384,是不是和我们的苹果6的屏幕分辨率差不多宽。通过这个例子,我们可以思考:设计稿的宽度是固定的,而我们在不同的设备上,根据我们不同的屏幕宽度,缩放我们页面倍数是否就行了呢?这就是我们viewport的适配原理。
  这种适配方式想要适配不同机型,还需要搭配媒体查询,或是JS动态计算。
  使用媒体查询时,我们需要具体的知道需要适配的屏幕精确的屏幕宽度或者范围,一般是使用范围进行适配,当遇到比较特殊的情况再单独处理,还可以在页面未渲染时,
  使用JS动态计算时,需要获取屏幕宽度做一个计算,然后根据计算到的倍数精确的设置页面缩放的倍数。
  两种方式各有利弊,使用媒体查询比较的麻烦,并且可能有些尺寸我们没考虑到,而使用JS动态计算,会降低页面渲染时间,我们都知道JS的执行是阻塞页面渲染的。

rem适配

  最后一种适配方案,也是我现在使用的一种方式,也是有利有弊,且听我慢慢唠叨_
  首先我们都知道em和rem,并且我就默认大家都知道这两个单位是干嘛的了(不知道的可以自行百度哟)我们要做的事是什么呢,将网页的根元素的font-size设置一个动态计算到的值,然后将页面上所有的尺寸换成rem来处理,简单的说就是
将html设置为font-size:100px,即100px=1rem。(设置100px是为了方便计算)那么可以将大部分px单位除以100就可以直接改成rem单位了。
  比如我们的设计稿是720X1280,那么720/100=7.2rem,如果我们有一个元素的宽度是占满整个设计稿的,那么我们是不是就可以设置他的高度是7.2rem了呢?此时是不是就能够完美的还原设计稿呢?那么这样和我们的适配又有什么关系呢?
  我们刚刚说了,当我们的设计稿宽度是720px,html的font-size:100px,整个html页面的宽高等只要使用了rem的是不是都是跟着font-size的大小变化的呢?那么假如我们改变html的font-size的大小,整个页面也跟着改变了呢?这就是我们的rem适配原理。
  通过刚刚简单的解释,大家应该已经懂了rem的适配原理,最重要的肯定就是怎么来改变font-size的大小,同样,我们有两种方式,媒体查询和JS动态计算。
  媒体查询我就不多讲了,因为和viewport适配方式差不多,就不多做赘述。
  JS动态计算,肯定是计算我们html的font-size大小,刚刚我们是以720的设计稿举例,但是我们要思考,手机屏幕只有375,这个时候应该怎么办呢,简单的数学问题,我相信都能想到,等比例缩放嘛。x=375*100/720,此时的x就是我们的font-size大小。当我们的font-size大小变了,整个页面使用rem表示的元素是不是也就相应改变了呢。
  当然,这种方式有个弊端我想大家应该还是猜到了,会加大HTML渲染时的计算量,但是对于现在的手机来说,问题不大(^ _ ^)。经过我大概的测试了下,对于安卓4.4以上的手机来说,应该都是没有问题的,此方案也是许多混合开发的APP或者WEBAPP采用的适配方案。但是还是有很多局限性,就不一一赘述了。
  补充一句:很多人对文字的大小也使用的rem(当然也包括我,偷懒 ^ _ ^ ),其实正确的字体适配应该使用媒体查询加em来做,因为rem计算出来的大小可能在某些设备上会出现字体模糊或者有毛边等现象,如果对应用的精度要求很高,可以考虑字体单独适配。

后记

  通过对三种适配方式的讲解,我相信大家对各个适配方式的利弊都有了简单的认识,具体在开发过程中使用哪种方式,其实更多的需要根据我们的项目去选择,每个适配方式都有自己的优点和缺点,所以我们应该灵活选取。最后,我想说的是三种方式我都用过,但是最后一种方式我感觉是最能完美还原美工设计稿的一种适配方式。

  以上内容仅为自己的学习过程,欢迎大家取其精华,丢其糟粕,找到自己的学习状态。若对以上内容有不同简介或看法,欢迎一起探讨。
企鹅号:1041415167 邮箱地址:zth1041415167@outlook.com

附部分学习资料地址:

  1. forked from dcloudio DCloud开源项目集锦
  2. 问答社区
  3. rem适配JS库(淘宝试用方案) forked from amfe/lib-flexible
  4. MUI框架视频教程地址

(ps:以上内容可能会不定期修改更新,距离上一次的更新已经很久了,一方面原因是前阵时间比较的忙,还有个原因,最近变懒了^ _ ^,下一篇笔记将会简单的谈谈flex等页面布局,并且在最近更新出来,希望有兴趣的小伙伴多多关注!)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容