移动端适配

两周前,PO提了个扫描二维码访问H5页面的需求,由于自己一直没有接触过移动端,也对这其非常感兴趣,所以自告奋勇地接下了这个需求!
不过,接触了后发现其中的知识点与坑是真的多!

1、必须得知道的名词

在PC端,我们其实不需要关心那么多,根据UI给的设计稿PSD图切就好了,量出来多少像素就是多少像素,最多对于宽屏还是窄屏做下处理就好了。但这些在移动端是行不通的!
比如说分辨率,原来在我的理解里,屏宽 * 屏高就是分辨率,这个在原来的PC端也没什么问题,但是,自从Apple推出了高清屏,也就是Retina屏后,这个理解就有问题了!所以,什么是高清屏?当年乔帮主对Retina得定义是:显示器像素密度只要超过 xxx ppi就无法区分出单独的像素。

  • PPI(Pixels Per Inch): 每英寸所拥有的像素数目,也叫像素密度

什么?屏幕就这么大,难道像素密度不是固定的吗?其实,我之前也是这么认为的,然而非也,这也涉及到了几个概念。

  • 物理像素:显示器上最小的物理显示单元,在操作系统的调度下,每一个设备像素都有自己的颜色值和亮度值。
  • 逻辑像素:也就是我们所说的CSS像素,是一个抽象的单位,用来精确度量页面上的内容。
  • 设备无关像素:是计算机坐标系统中得一个点,这个点代表一个可以由程序使用的虚拟像素(比如: css像素),然后由相关系统转换为物理像素。
  • 设备像素比:物理像素和设备独立像素的对应关系,其值为在某一方向上 物理像素 / 设备独立像素。

所以嘛,我们一直所说的像素,其实指的是逻辑像素,但最终我们看到的效果,是由硬件渲染成的一个个物理像素,也就是说我们指定的CSS像素最后需要与物理像素对应起来。
比如我上手的iPhone6,设备独立像素为375 * 667,devicePixelRatio为2,那么其分辨率就是750 * 1334.如果我指定页面100%占满屏幕,就是说1个CSS像素要对应4个物理像素(长宽都是2倍嘛),由于像素作为最小不可分割的单位,所以其余3个像素会就近取色,也就造成了看上去会模糊。(放张网上盗的图)


image.png

现在我们也明白了,移动端为什么会有@2x和@3x之类的图片了吧,就是为了在不同devicePixelRatio的设备上能够清晰地显示!

2、移动端适配

移动端最麻烦应该就是适配问题了,毕竟市面上的各类机型太多了,以Apple家的为例,Android就不提了...


image.png

那么多机型,总不能为每个机型都量身定做吧?那么开发成本太高了!目前流行的做法是UI给出针对某一机型的设计稿,比如iPhone6的750 * 1334,前端对每个机型做适配。
那么怎么适配呢?用百分比做单位?可以是可以,但计算比较麻烦,还有像padding之类的百分比是根据父元素的width计算,需要注意!那么没有更好的办法了吗?有的! rem了解一下!

  • rem: CSS单位,1rem等于根元素的font-size大小(HTML元素)

那么我们根据页面的大小,动态计算HTML元素的font-size不就行了?对的!但前提我们得设置viewport,也就是视口。那么视口又是什么呢?

  • viewport: 指的是浏览器上显示网页内容的区域。

其实viewport我们一直都在使用,只是没注意到而已。我们知道一个块元素不设width情况下,会继承自其父元素的width,若父元素也没有设置,则再向上继承,如此,一直到body元素继承自html元素。那么html元素的width继承自谁呢?答案就是viewport!

在移动端,viewport的大小其实并不等于浏览器的可视区域,为什么呢?因为移动端浏览器也想显示PC端的网页,所以会将默认的viewport的width设置为980px或者1024px,然后再根据自身的屏幕进行缩小。不这么做的话,移动设备再宽也比不上PC,所以viewport要是等于移动端浏览器的可视区域的话,网页的布局一定会乱掉!

ppk大神将viewport分成了layout viewport、visual viewport、idea viewport。有兴趣的可以看看这篇博客。https://www.cnblogs.com/2050/p/3877280.html

因此,在移动端,我们首先得要在head中添加一行meta标签,重新设置viewport。

<meta name="viewport" content="width=device-width, initial-sacle=1.0">

以上代码的意思是,将viewport的width设置为设备可视区域的width,并设置初始缩放值为1.0,也就是不缩放。
还可以设置其它的参数:

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

推荐阅读更多精彩内容