适配(移动端+web端)

2,526 阅读11分钟

移动端

什么是手机适配?

手机适配:设计狮制作效果图,程序猿把效果图应用到不同的手机,对不同的屏幕进行界面调整的过程,确保界面不变形,呈现效果图的位置、尺寸、比例。

一、屏幕尺寸、屏幕分辨率、屏幕像素密度

  • 屏幕尺寸:指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米,常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等。所以6.0的手机 6*2.54 = 15.24 厘米。
  • 屏幕分辨率:指在横纵向上的像素点数,单位是px,1px=1个像素点。一般纵向像素 * 横向像素来表示一个手机的分辨率,如1960 * 1080。(这里的1像素指的是物理设备的1个像素点)。比如(iphone6 750 * 1337) (iphone6plus 1960 * 1080)
  • 屏幕像素密度/像素密度/屏幕密度::屏幕上每英寸可以显示的像素点的数量,单位是ppi,即“pixels per inch”的缩写。屏幕像素密度与屏幕分辨率有关。

二、物理像素,CSS像素

  • 设备像素/物理像素:(分辨率)买手机的时候有一个nxm的分辨率,那是屏幕的nxm个呈像的点,一个点(小方格)为一个物理像素。它是屏幕能显示的最小粒度。设备像素也被称为物理像素,他是显示设备中一个最微小的物理部件。每个像素可以根据操作系统设置自己的颜色和亮度。任何设备的物理像素的数量都是固定的。
  • CSS像素:CSS像素是一个抽象的单位,主要使用在浏览器上,用来精确的度量(确定)Web页面上的内容。它是为web开发者创造的,在CSS或者JavaScript中使用的一个抽象的层。一般情况下,CSS像素被称为与设备无关的像素(device-independent像素),简称为“DIPs”。在一个标准的显示密度下(普通屏),一个CSS像素对应着一个设备像素。
  • CSS像素与物理像素的关系:一个width为200px的元素,它占据了200个CSS像素,但200个CSS像素占据多少个物理像素取决于屏幕的特性(是否是高密度,即像素比)和用户的缩放行为。在苹果的视网膜屏幕中,视网膜的像素密度是普通屏幕的两倍,这个元素就跨越了400个设备像素,如果用户放大,它将跨越更多的设备像素。当然现在好多手机的像素比变得越来越大,比如我之前用的魅族手机和现在用的iphone 8 plus都已经达到了3,所以这个元素正常情况下就跨越了600个设备像素。
  • 设备独立像素:设备独立像素(也叫密度无关像素),可以认为是计算机坐标系中的一个点,这个点代表一个可以由程序使用的虚拟像素(比如:CSS像素),然后由相关系统转换为物理像素。
  • 位图像素:一个位图像素是栅格图像(如:png,jpg,gif等)最小的数据单元,至少1个位图像素对应1个物理像素,图片才能得到完美清晰的展示。

对于Web开发者而言:我们使用的每一个CSS和JavaScript定义的像素本质上代表的都是CSS像素,我们在开发过程中并不在意一个CSS像素到底跨越了多少个设备像素。我们将这个依赖于屏幕特性和用户缩放程度的复杂计算交给了浏览器。

三、像素比

  • 像素比:它的官方的定义为:设备物理像素和设备独立像素的比例,也就是devicePixelRatio = 物理像素/独立像素(window.devicePixelRatio)
    iphone5
    iphone6 plus

四、视口

  • 布局视口:在PC端上,布局视口等于浏览器窗口的宽度。
  • 视觉视口:视觉视口是用户正在看到的区域。用户可以缩放来操作视觉视口,而不影响视觉视口的宽度。视觉视口决定了用户看到了什么。

五、UI界面设计和适配尺寸规范(iphone5 iphone6 iphone6Plus)

如果以iphone5s 为基准设计稿,适配iphone6 或者是iphone 6 plus的方法和技巧。

当旧的iPhone 5程序运行在iPhone 6上面,假如没有经过适配。旧程序自动等比放大,铺满新手机,旧程序也可以正常运行。这种方案可算是自动适配。但因为旧程序拉伸了,整体看起来有点虚,也不能更好利用大屏空间。

一套设计稿适配的前提:设计稿必须为矢量的。图片除外。比如图标,线、点、颜色块等元素都是矢量或者形状。

分为两步走:

如果是一些常规界面:比如以文字、列表为主的界面,大部分是指布局相对简单的界面。不用设计师怎么切图的界面,这些基本可以让ios程序员完成适配即可。显示效果也不会太差。

如果是一些定制界面:此时设计师应该手动为大屏幕重新调整设计。另外设计一些大图或者是大的图标,以满足适配iphone6.或者iphone plus

前提是你们的ios程序员需要了解苹果公司的一个工具:Auto Layout

Auto Layout (Auto Layout Guide: Introduction),可以理解成 iOS 上的 CSS,如果设计师用 Auto Layout 提供的排版语言描述出 UI 布局,那不同尺寸的 iPhone 只要同一份设计稿就可以了。

总之:适配iPhone 6/6Plus UI界面设计的要点:

1、针对iphone6 可以用高度不变,横向拉伸。或者等比拉伸

2、全矢量作图。

3、定制界面或图片位图必须额外制作大图。

4、工具栏、状态栏、导航栏的高度规范和设计字体大小等均以2:3的比例放大即可。

5、iphone的5/5S/6/6P的屏幕比例为9:16,所以比例这个问题现在不是很大,但因 Plus增加横版显示,所以建议对于一些用户量较高的软件进行重绘。

如下图所示:

给app设计师9点建议

  • 1、以后的应用程序,都使用AutoLayout, 不要再用绝对定位。

  • 2、使用类似网页的方式来设计界面。

  • 3、设计师好,程序员也好,尽量使用点这个单位进行思考,而不要使用像素。比如,你需要做44 x 66个点的按钮,2x模式,就乘以2, 3x模式就乘以3。这样的思考方式可以大致估计到真实的物理长度。44个点,就是手机上导航栏,工具栏的高度。假如用像素思考,容易使得做出的图片过大或者过小。

  • 4、非矢量素材,就可以做尺寸最大的,之后再进行缩小。比如你需要兼容3x的屏幕,就直接做最高那种图片。

  • 5、而当使用Flash之类的矢量工具来做素材的时候,应该直接做点那个尺寸。比如44 x 66个点的按钮。就建立一个44 x 66的场景。之后再导出成2倍图,3倍图,因为矢量放大不失真。不要建立一个3x的场景,导出成大图片,再进行缩小,这样就容易失真。更理想的是直接使用矢量图。

  • 6、假如是那种导航栏,工具栏之类的背景图,需要横跨整个屏幕。可以只切一小块,让程序拉伸,拉伸方式是保持两边的像素不动,只拉伸最中间的一列像素。需要拉伸的话,横方向就不要出现一些渐变色。

  • 7、按钮的点击区域,不应该少于44像素,就算按钮的图片看起来比较小,也应该使得点按钮周围的透明区也有反应。

  • 8、可以按照你当前最方便测试机子的型号来做一些主要预览图,效果图。比如你手头有iPhone 5,可以按照iPhone 5的尺寸,320 x 568个点,需要兼容iPhone 6 Plus,就使用3x的模式。这样方便将图片放进手机里面看实际的效果。有多个测试机,就选较大的,之后再进行一些细调。假如支持iPhone 6 Plus的横屏模式,需要另外处理。

  • 9、上面说的是应用的处理方式,游戏会有些特殊。现在很多游戏,按照1136 x 768的像素尺寸来设计场景,这样可以同时兼容iPad和iPhone,并只使用一份图。iPad 1x模式下尺寸是1024 x 768像素,iPhone 6在2x模式下,是1136 * 640。这种尺寸,可以简单将场景居中显示,各自将场景拉伸到最大。

web端

目前我们pc项目的设计稿尺寸是宽度1920,高度最小是1080。

适配目标:

  • 1.在不同分辨率的电脑上,网页可以正常显示

  • 2.放大或者缩小屏幕,网页可以正常显示

对于宽度的适配:

首先设置html,body{width:100%;overflow-x:hidden;} 然后我们可以把页面分解为背景层和内容层,对于背景层,我们一般都要求完全铺开,对于内容层我们保证我们的内容都封装在盒子内,然后margin:0 auto;保持居中显示,盒子里面的内容,我们再另外调整 (内容区定宽,在达到某个断点之后更改内容区的宽度,并把某个内容显示/隐藏)

对于高度的适配:

一般情况下,页面都比较高,我们通过给每个模块设置具体的高度值来做页面,然后页面会出现导航条,我们可以拉动导航条来浏览,但是有的页面的需求是主体内容直接在不同的浏览器上都能完整显示,不通过导航条来浏览

如何做?

1、百分比的应用

百分比的应用在于主视角的定位和缩放,百分比的取值以原设计稿的尺寸为标准。什么意思呢?举个栗子,一个元素在原设计稿里,量出来距离顶部是 200px,如果写死可能是top:200px 或者margin-top:200px,现在要转成百分比,那么这个值可能就是23.3%。这个值怎么算?如果设计稿是 1080,200/1080=18.51%这样计算出来百分比的值。

但是,有个地方要注意,流体布局下,百分比的值是根据父层计算的;absolute布局的元素是根据最近的relative父层计算的;fixed布局的元素是根据window的可视区域计算的。

所以,如果要达到适配的效果,不只是当前元素需要用百分比值,其参考计算的元素也是要动态变化的。

另外还有一个就是图片缩放的问题,pc很多主视角都是切图的,但是pc不能直接用background-size。在pc我们可以直接通过img标签来插入图片,通过设置 img宽度为100%,高度auto,然后让它根据父层来等比缩放来实现。

2、js监测

需要js主要有两个原因:

上面说了,百分比是要有父层做参照物的,那么如果父层都用百分比,那就是最终是根据window来参照的,因为pc绝大部分都是宽屏设备,而且他们的比例是不一致的,我们来计算下(190是减去浏览器工具条、window桌面条、我们页面通用顶条):

设计稿:1920/(1080-190) = 2.16

14寸普通笔记本:1366/(768-190) = 2.36

所以,我们不能宽高都100%按照屏幕尺寸来计算。另外考虑到主要是高度对pc页面的主视角影响比较大,我们需要借助js来计算确定一个最小高度临界值(当然这个可以用css的min-height来实现);

另外一个是,通过js判断最小高度临界值,再加上这个最小临界值的class,为了处理那些特殊的布局或者百分比无法完全解决适配的元素,比如字体的相关布局