初涉移动端设计和开发的同学们,基本都会在尺寸问题上纠结好一阵子才能摸到头绪。我也花了很长时间才弄明白,感觉有必要写一篇足够通俗易懂的教程来帮助大家。从原理说起,理清关于尺寸的所有细节。由于是写给初学者的,所以不要嫌我啰嗦。

现象

首先说现象,大家都知道移动端设备屏幕尺寸非常多,碎片化严重。尤其是Android,你会听到很多种分辨率:480x800, 480x854, 540x960, 720x1280, 1080x1920,而且还有传说中的2K屏。近年来iPhone的碎片化也加剧了:640x960, 640x1136, 750x1334, 1242x2208。

不要被这些尺寸吓倒。实际上大部分的app和移动端网页,在各种尺寸的屏幕上都能正常显示。说明尺寸的问题一定有解决方法,而且有规律可循。

像素密度

要知道,屏幕是由很多像素点组成的。之前提到那么多种分辨率,都是手机屏幕的实际像素尺寸。比如480x800的屏幕,就是由800行、480列的像素点组成的。每个点发出不同颜色的光,构成我们所看到的画面。而手机屏幕的物理尺寸,和像素尺寸是不成比例的。最典型的例子,iPhone 3gs的屏幕像素是320x480,iPhone 4s的屏幕像素是640x960。刚好两倍,然而两款手机都是3.5英寸的。

所以,我们要引入最重要的一个概念:像素密度,也就是PPI(pixels per inch)。这项指标是连接数字世界与物理世界的桥梁。

Pixels per inch,准确的说是每英寸的长度上排列的像素点数量。1英寸是一个固定长度,等于2.54厘米,大约是食指最末端那根指节的长度。像素密度越高,代表屏幕显示效果越精细。Retina屏比普通屏清晰很多,就是因为它的像素密度翻了一倍。

倍率与逻辑像素

再用iPhone 3gs和4s来举例。假设有个邮件列表界面,我们不妨按照PC端网页设计的思维来想象。3gs上大概只能显示4-5行,4s就能显示9-10行,而且每行会变得特别宽。但两款手机其实是一样大的。如果照这种方式显示,3gs上刚刚好的效果,在4s上就会小到根本看不清字。

在现实中,这两者效果却是一样的。这是因为Retina屏幕把2x2个像素当1个像素使用。比如原本44像素高的顶部导航栏,在Retina屏上用了88个像素的高度来显示。导致界面元素都变成2倍大小,反而和3gs效果一样了。画质却更清晰。

在以前,iOS应用的资源图片中,同一张图通常有两个尺寸。你会看到文件名有的带@2x字样,有的不带。其中不带@2x的用在普通屏上,带@2x的用在Retina屏上。只要图片准备好,iOS会自己判断用哪张,Android道理也一样。

由此可以看出,苹果以普通屏为基准,给Retina屏定义了一个2倍的倍率(iPhone 6plus除外,它达到了3倍)。实际像素除以倍率,就得到逻辑像素尺寸。只要两个屏幕逻辑像素相同,它们的显示效果就是相同的。

Android的解决方法类似,但更复杂一些。因为Android屏幕尺寸实在太多,分辨率高低跨度非常大,不像苹果只有那么几款固定设备、固定尺寸。所以Android把各种设备的像素密度划成了好几个范围区间,给不同范围的设备定义了不同的倍率,来保证显示效果相近。像素密度概念虽然重要,但用不着我们自己算,iOS与Android都帮我们算好了。

如图所示,像素密度在120左右的屏幕归为ldpi,160左右的归为mdpi,以此类推。这样,所有的Android屏幕都找到了自己的位置,并赋予了相应的倍率:

ldpi [0.75倍]

mdpi [1倍]

hdpi [1.5倍]

xhdpi [2倍]

xxhdpi [3倍]

xxxhdpi [4倍]

各型号iPhone的倍率比较简单,我们后面会讲到。那么Android手机那么多,具体怎么分?哪些手机是几倍的倍率呢?我们先看一张表,这是友盟2014年10月到2015年03月的数据:

就目前市场状况而言,各种手机的分辨率可以这样粗略判断。虽然不全面,但至少在1年内都还有一定的参考意义:

ldpi 如今已绝迹,不用考虑

mdpi [320x480](市场份额不足5%,新手机不会有这种倍率,屏幕通常都特别小)

hdpi [480x800、480x854、540x960](早年的低端机,屏幕在3.5英寸档位;如今的低端机,屏幕在4.7-5.0英寸档位)

xhdpi [720x1280](早年的中端机,屏幕在4.7-5.0英寸档位;如今的中低端机,屏幕在5.0-5.5英寸档位)

xxhdpi [1080x1920](早年的高端机,如今的中高端机,屏幕通常都在5.0英寸以上)

xxxhdpi [1440x2560](极少数2K屏手机,比如Google Nexus 6)

自然地,以1倍的mdpi作为基准。像素密度更高或者更低的设备,只需乘以相应的倍率,就能得到与基准倍率近似的显示效果。

不过需要注意的是,Android设备的逻辑像素尺寸并不统一。比如两种常见的屏幕480x800和1080x1920,它们分别属于hdpi和xxhdpi。除以各自倍率1.5倍和3倍,得到逻辑像素为320x533和360x640。很显然,后者更宽更高,能显示更多内容。所以,即使有倍率的存在,各种Android设备的显示效果仍然无法做到完全一致。

单位

不难发现,真正决定显示效果的,是逻辑像素尺寸。为此,iOS和Android平台都定义了各自的逻辑像素单位。iOS的尺寸单位为pt,Android的尺寸单位为dp。说实话,两者其实是一回事。

单位之间的换算关系随倍率变化:

1倍:1pt=1dp=1px(mdpi、iPhone 3gs)

1.5倍:1pt=1dp=1.5px(hdpi)

2倍:1pt=1dp=2px(xhdpi、iPhone 4s/5/6)

3倍:1pt=1dp=3px(xxhdpi、iPhone 6 plus)

4倍:1pt=1dp=4px(xxxhdpi)

单位决定了我们的思考方式。在设计和开发过程中,应该尽量使用逻辑像素尺寸来思考界面。设计Android应用时,有的设计师喜欢把画布设为1080x1920,有的喜欢设成720x1280。给出的界面元素尺寸就不统一了。Android的最小点击区域尺寸是48x48dp,这就意味着在xhdpi的设备上,按钮尺寸至少是96x96px。而在xxhdpi设备上,则是144x144px。

无论画布设成多大,我们设计的是基准倍率的界面样式,而且开发人员需要的单位都是逻辑像素。所以为了保证准确高效的沟通,双方都需要以逻辑像素尺寸来描述和理解界面,无论是在标注图还是在日常沟通中。不要再说“底部标签栏的高度是96像素,我是按照xhdpi做的”这样的话了。

Web怎么办

移动端页面的绝对单位仍然是px,至少代码里这么写,但它的道理也和app一样。由于像素密度是设备本身的固有属性,它会影响到设备中的所有应用,包括浏览器。前端技术可以善加利用设备的像素密度,只需一行代码,浏览器便会使用app的显示方式来渲染页面。根据像素密度,按相应倍率缩放。

以iPhone 5s为例,屏幕的分辨率是640x1136,倍率是2。浏览器会认为屏幕的分辨率是320x568,仍然是基准倍率的尺寸。所以在制作页面时,只需要按照基准倍率来就行了。无论什么样的屏幕,倍率是多少,都按逻辑像素尺寸来设计和开发页面。只不过在准备资源图的时候,需要准备2倍大小的图,通过代码把它缩成1倍大小显示,才能保证清晰。

实际应用

大家最关心的还是实际运用,画布该怎么设置。我们就iOS、Android、Web三个平台来分别梳理一下。不过在这之前,我要为使用PS进行设计的朋友介绍一个小技巧。

之前我说过,我们要以逻辑像素尺寸来思考界面。体现到设计过程中,就是要把单位设置成逻辑像素。打开PS的首选项——单位与标尺界面,把尺寸和文字单位都改成点(Point)。这里的点也就是pt,无论设计iOS、Android还是Web应用,单位都用它。当然,各平台单位名称还是要记住的。这里我们用的只是它的原理,不用在意名称。

要调节倍率,则通过图像大小里的DPI来控制。这个DPI,其实就是PPI,像素密度。有个常识大家都知道,屏幕上的设计DPI设成72,印刷品设计DPI设成300。为什么是这两个数字?

首先说300,这和人眼的分辨能力有关。由于1英寸是固定长度,每1英寸有多少个像素点决定了画质清晰程度。之前说过,这就是像素密度,也就是DPI。DPI达到300以上,其细腻程度就会给人真实感,像真实世界中的物件。相反,DPI只有10的话,在你一个食指指节大小的长度内只有10个像素,这明显就是马赛克了。所以印刷品要设成300,才能保证清晰。

再说72,这有一定的历史原因。最早的图形设计是在mac电脑上进行的,mac本身的显示器分辨率就是72。PS中把图像DPI也设成72,就能保证屏幕上显示的尺寸和打印尺寸相同,便于设计。72的PC显示器分辨率逐渐成为一种默认的行业标准,这套规则就这么沿用下来。

现在回到正题,我们怎么通过DPI来调节倍率?既然屏幕本身的分辨率是72,DPI设成72刚好是1倍尺寸,那设成72的两倍就是倍率为2的屏幕了,就这么简单。

下面来看看3个平台各自的画布设置:

iPhone

iPhone的屏幕尺寸各不相同,我说的是逻辑像素尺寸,这确实是让人很头疼的事情。如果想用一套设计涵盖所有iPhone,就要选择逻辑像素折中的机型。

从市场占有率数据来看,目前最多的是iPhone5/5s的屏幕。倍率为2,逻辑像素320x568。上升势头最猛,未来有望登上第一的是iPhone 6的屏幕。倍率为2,逻辑像素375x667。

按照这两种尺寸来设计,都是比较主流的做法。可以兼顾短一些的iPhone 4s,大一点的6 plus也不会过于空旷。

不过在切图的时候要注意,由于iPhone 6 plus的3倍图是由2倍图放大而来,所以位图要注意保证清晰。

Android

都说Android碎片化严重,但它现在反而比iOS好处理。因为如今的Android屏幕逻辑像素已经趋于统一了:360x640,就看你设成几倍了。想以xhdpi为准,就把DPI设成72x2=144。想以xxhdpi为准,就把DPI设成72x3=216。

对于那些比较老的低端机,宽度是480px的那批,画面确实会小一些,显示内容会更少。稍微留意一下,重要内容尽量保持在界面中上部分。

当然,这些机型不出一年就会被边缘化,基本淘汰。现在能运转的也是当作功能机在用,软件多了必卡无疑,用户体验无从谈起。不作考虑也是OK的。

Web

手机端网页就没有统一标准了,比较流行的做法是按照iPhone 5的尺寸来设计。倍率2,逻辑像素320x568。

这样的做法比较实在,倍率2的屏幕无论在iOS还是Android方面都是主流,而且又是2倍屏幕中逻辑像素最小的。所以图片的尺寸可以保持在较小的水平,页面加载速度快。当然,缺点就是在倍率3的设备上看,图片不是特别清晰。

如果追求图片质量,愿意牺牲加载速度,那么可以按照最大的屏幕来设计。也就是iPhone 6 plus的尺寸,倍率3,逻辑像素414x736。

总结

移动端的尺寸比PC端复杂,关键就在倍率。但也正因为倍率的存在,把大大小小的屏幕拉回到同一水平线,得以保证一套设计适应各种屏幕。站在这条水平线的角度看,会发现它很好理解。

这个pt设定主要是考虑两个问题:

①整个屏幕可显示的内容多少

②界面UI元素可点击的物理区域大小

先理清ppi和dpi

ppi (pixel per inch)

dpi (dot per inch) 一个 dot 对应iOS上的一个逻辑 point

下面详细分析:

1、iPhone 6 Plus 的逻辑point分辨率用 360x640,也不是不可以,也即上面图表中的 iPhone 6+ (b)方案,那么 scale 用 @3x,最终像素分辨率 360x640@3x 正好是 1080x1920,完美1:1映射,无需缩放;但缺点就是:iPhone 6 Plus的逻辑pt分辨率 360x640 就会比 iPhone 6的 375x667 还低,这天理不容啊,一个Plus的大屏幕虽然很精细,但是可显示的实际内容比 iPhone 6 还少。完全不符合 Bigger than bigger 。

打个比方就是:相同字号的情况下,iPhone 6如果一行显示了25个字,而 iPhone 6 Plus 按这个逻辑pt方案,一行就会只能显示24 个字了。

2、那如果逻辑point分辨率用 540x960 呢,也即图表中的iPhone 6+ (c) , scale 沿用老的 @2x ,最终像素分辨率 540x960@2x 不正好是 1080x1920 吗,也是完美1:1映射,无需缩放,还不需要多余做 @3x 素材; 而且这个方案的优点也很明显: pt 面积是 iPhone 6 的两倍 (540x960 = 375x667x 2),这样屏幕可显示的内容一下就增多了 ; 但这个方案的缺点就更明显了: 所有 iOS UI 元素尺寸在屏幕上的实际物理面积一下子就变小了,比如标签栏或导航栏按钮的物理高度只有原来的 81.5% ,点击面积就只有iPhone 6的 0.815*0.815=66.4%,用户点击就困难了,总不至于苹果考虑触摸手指操作,为 <= iPhone 6 做一套设计规范,为 iPhone 6 Plus 再另外做一套设计规范。

3、那么看来最好的方案就是上图中的 iPhone 6+ (a)了,物理像素也做到 1242x2208,那在5.5 inch屏幕上这个ppi 就必须达到 461 了,之前的媒体文章相关预测结果就是这个ppi方案。但苹果最终没有采用这个方案,最终采用图中的 iPhone 6+,物理像素只有 1080x1920,目前来看可能有这几方面原因:

① 内存消耗增大

② 电池消耗增大

③ 要做到 461ppi ,目前工艺上是不是可能还有一定难度。 (瞎猜的。。)

但这些问题在将来技术提高后都可以克服,因此就苹果先折衷过度一下,可能在下一代的iPhone 7 Plus版本中完美支持逻辑像素和真实物理像素上 1:1 映射,而且可以非常方便的平滑过渡。

4、至于为什么一定是 414x736,估计应该是在 5.5inch 和 ppi=461 这两个前提限定的情况下,按这个 414x736 pt 分辨率,屏幕上 UI 元素操作物理大小最接近 iPhone 6上的表现吧。

作者:godlaugh

链接:http://www.zhihu.com/question/25361043/answer/30666828

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

前端屏幕尺寸和分辨率_移动端尺寸基础知识相关推荐

  1. 前端屏幕尺寸和分辨率_屏幕尺寸、分辨率、倍率到底是什么鬼

    目前我们做移动端项目几乎不需要考虑为什么要这样写样式,为什么设计稿上100px我们直接写成1rem,移动端的屏幕尺寸那么多变,为什么能轻松兼容?那我们得从移动端的屏幕尺寸来探索一下其中的原理,首先就得 ...

  2. statusbar 尺寸 显示图标_移动端页面设计规范尺寸大起底 - 椰树飘香

    移动端尺寸繁多,包括IOS和安卓,尺寸多达十余种,所以移动页面尺寸的适配一直是前端和设计的头疼.今天来总结一下当前市场上的一些移动端尺寸,方便设计师和前端去考虑适配.但是最好还是针对自己的产品做调查, ...

  3. 3像素尺寸是多少_纸张的尺寸

    A4纸是ISO 216(纸张国际化标准尺寸),是世别界上大多数国家所使用的A4纸尺寸.目前中国采用的是ISO 216标准,以规范纸大小,与国际通用. A4纸尺寸 A4纸尺寸:210×297: A3纸尺 ...

  4. access2013数据库实验笔记_医学科研实验基础知识笔记(十):甲基化

    往期回顾 医学科研实验基础知识笔记(一):细胞增殖 医学科研实验基础知识笔记(二):细胞凋亡检测 医学科研实验基础知识笔记(三):细胞周期检测 医学科研实验基础知识笔记(四):细胞自噬研究策略 医学科 ...

  5. 七日掌握设计配色基础_掌握正确的基础知识:如何设计网站的导航,搜索和首页...

    七日掌握设计配色基础 by Anant Jain 通过Anant Jain 掌握正确的基础知识:如何设计网站的导航,搜索和首页 (Get the basics right: how to design ...

  6. 查找元器件_电子元器件-常用电子元器件基础知识大全

    电子元器件-常用电子元器件基础知识大全 一.电阻器(R) 简称电阻,是指具有一定技术性能的在电路中专起电阻作用的元件,可用来调节电路中的电流和电压,或者作为电路中的负载.1.电阻的参数: a. 阻值: ...

  7. 嵌入式cmp指令的判断标志位_嵌入式开发的基础知识

    搜索了一些有关于对嵌入式开发的一些基础知识,分享给大家! 1.ARM中一些常见英文缩写解释 MSB:最高有效位: LSB:最低有效位: AHB:先进的高性能总线: VPB:连接片内外设功能的VLSI外 ...

  8. 软件使用_第二篇 Latex基础知识

    目录 1. 基础知识 1.1 Latex 源文件 1.1.1 空白距离 1.1.2 特殊字符 1.1.3 Latex命令 1.1.4 注释 1.1.5 纵向固定间距控制命令 1.1.6 页面控制命令 ...

  9. 心形尺寸比例图解_标识牌尺寸大小及空间比例关系示意图与人体工程学

    标识牌做多大尺寸最合适,没有一个标准的大小.主要衡量标准就是把标识牌放到特定的空间里,按空间大小来制作.什么样的场合,什么样的人群都要考滤在其中,比如儿童游乐园,主要对象就是儿童.标识牌的大小肯定要比 ...

  10. 5G时代来临,前端开发工程师必须了解的音视频入门基础知识

    1. 音视频基础 本文将给大家进行音视频基础的常规知识点的梳理.当然,短短的一篇文章并不能让大家立即变成音视频领域的专家,但这些知识点已经基本涵盖了音视频的入门知识.我们将按照下面的内容给大家 音视频 ...

最新文章

  1. 漫漫运维路——集群基础知识
  2. PHP做闹钟APP,8款超好用的闹钟APP,专治各种赖床
  3. linux登录成功后提示信息
  4. mybatis的mapper接口与xml传参问题
  5. android 绘制按钮,Android:使用xml定义创建一个三角形的按钮(可绘制)
  6. “我在苹果商店下载了一个诈骗App,损失60万美金!”
  7. 翻车事故频发,原来是开发者漏了这一步!
  8. specter mmsim 区别_开车?坐车?动词?介词?各种交通工具用法区别及使用思维...
  9. 2018-2019-1 20165204 实验三 实时系统
  10. [转帖][攻防测试工具]系统监控必备工具procexp和procmon
  11. [转]FTP搜索引擎的设计与实现
  12. Yocto on Quark X1000
  13. java-工作时突发的一个天马行空的想法
  14. PNG格式图片怎么弄
  15. 用js判断图片地址是否有效
  16. python股票交易接口源代码分享
  17. 从牛顿定律到飞行器动力学
  18. python中的随机数种子seed()
  19. 【小沐学Android】Android手机上基于Termux实现Web服务器(Python、node.js、C/C++)
  20. 独立IP和共享IP、网络地址转换NAT

热门文章

  1. 知识星球问答精选(附五一赠书活动)
  2. 日更第1天:Linux常用命令之dnf用法
  3. 2019前端书籍推荐,前端PDF书籍,前端书籍下载
  4. 统考计算机u盘禁用,四个轻松解除电脑禁用U盘的方法
  5. 如何给程序添加管理员权限(以管理员权限运行功能)
  6. 挖掘数百万参与的IMVU用户
  7. Cocos2d-x-3c 设计之路 CocosBase CocosNet CocosWidget
  8. linux tc工具,Linux TC软件系统损坏自助恢复的工具.TC刷机,TC修复,TCPUP,TCP-UP
  9. luoguP3403 跳楼机
  10. 行驶证识别技术-快速提取行驶证信息办理业务