移动端webapp如何应对不同屏幕尺寸(转)

摘要:
本文主要介绍了与webapp开发和调试相关的知识和经验,并给出了几种可选的解决方案。设备像素:显示屏的最小物理单位。每个dp都包含自己的颜色和亮度。高密度类别在图中被圈出,因为它是Android手机的统计数据。在国内安卓手机市场,高密度设备占据了绝大多数的市场份额,这是一个非常重要的点,也是我们在做安卓webapp时应该注意的一个重点。当然,其他设备也需要制作不同大小的页面,因此此解决方案通常使用媒体查询来制作响应页面。

移动设备的用户越来越多,每天android手机的激活量都已经超过130万台,所以我们面向移动终端的WebAPP也开始跟进了。本文主要介绍webapp的开发与调试的相关知识和经验,以及给出几种可选的解决方案。

一、基本概念

(1) CSS pixels与device pixels

CSS pixels:浏览器使用的抽象单位, 主要用来在网页上绘制内容。

device pixels: 显示屏幕的的最小物理单位,每个dp包含自己的颜色、亮度。

等值的 CSS pixels在手机屏幕上占多大的位置,这不是固定的,这取决于很多属性。

(2) PPI/DPI

PPI,有时也叫DPI,所表示的是每英寸所拥有的像素(pixel)数目,数值越高,即代表显示屏能够以越高的密度显示图像。(注:这里的像素,指的是device pixels。)搞清楚了PPI是什么意思,我们就能很容易理解PPI的计算方式了,我们需要首先算出手机屏幕的对角线等效像素,然后处以对角线(我们平常所说的手机屏幕尺寸就是说的手机屏幕对角线的长度),就可以得到PPI了。准确的计算公示大家可以参照下图。比较有意思的是,根据公式计算出来的iPhone 4的PPI为330,要比苹果官方公布的326要高一点点。

iPhone 4 PPI

同理,以HTC G7为例,480*800的分辨率,3.7英寸,算出来就是252的PPI。

(3) 密度决定比例

我们计算PPI就是为了知道一部手机设备是属于哪个密度区间的,因为不同的密度区间,对应着不同的默认缩放比例,这是一个很重要的概念。

移动端webapp如何应对不同屏幕尺寸(转)第2张

由上图可知,PPI在120-160之间的手机被归为低密度手机,160-240被归为中密度,240-320被归为高密度,320以上被归为超高密度(Apple给了它一个上流的名字——retina)。

这些密度对应着一个特定的缩放比例值,拿我们最熟悉的iphone4或4s来说,它们的PPI是326,属于超高密度的手机。当我们书写一个宽度为320px的页面放到iphone中显示,你会发现,它竟然是满宽的。这是因为,页面被默认放大了两倍,也就是640px,而iphone4或4s的宽,正是640px。

图中把高密度的一类圈起来,是因为这是android手机的统计数据,在国内安卓手机市场中,高密度的设备占了绝大多数的市场份额,这是很重要的一点,也是我们做安卓端webapp要注意的关键点。

(4) viewport的使用

viewport总共有5个属性,分别如下:

<meta name="viewport"
content="
height = [ pixel_value |device-height] ,
width = [ pixel_value |device-width ] ,
initial-scale = float_value , minimum-scale = float_value , maximum-scale = float_value ,
user-scalable =[yes | no] ,
target- densitydpi = [ dpi_value | device-dpi| high-dpi | medium-dpi | low-dpi] " />

在这些属性里面,我们重点关注`target-densitydpi`,这个属性可以改变设备的默认缩放。`medium-dpi`是`target-densitydpi`的默认值,如果我们显式定义`target-densitydpi=device-dpi`,那么设备就会按照真实的dpi来渲染页面。打个比方说,一张`320*480`的图片,放在iphone4里面,默认是占满屏幕的,但如果定义了`target-densitydpi=device-dpi`,那么图片只占屏幕的四分之一(二分之一的平方),因为iphone4的分辨率是`640*960`。

二、解决方案

(1) 简单粗暴

如果我们按照320px宽的设计稿去制作页面,并且不做任何的设置,页面会默认自动缩放到跟手机屏幕相等的宽度(这是由于 medium-dpi是target-densitydpi的默认值,和不同密度对应不同缩放比例所决定的,这一切都是移动设备自动完成的 )。所以这种解决方案,简单,粗暴,有效。但有一个致命的缺点,对于高密度和超高密度的手机设备,页面(特别是图片)会失真,而且密度越多,失真越厉害。

(2) 极致完美

在这种方案中,我们采用 `target-densitydpi=device-dpi`,这样一来,手机设备就会按照真实的像素数目来渲染,用专业的话来说,就是1 CSS pixels = 1 device pixels。比如对于 `640*960`的 iphone,我们就可以做出 `640*960`的页面,在iphone上显示也不会有滚动条。当然,对于其他设备,也需制作不同尺寸的页面,所以这种方案往往是使用媒体查询来做成响应式的页面。这种方案可以在特定的分辨率下完美呈现,但是随着要兼容的不同分辨率越多,成本就越高,因为需要为每一种分辨率书写单独的代码。下面举个简单的例子:

<meta name="viewport"content="target- densitydpi =device-dpi, width=device-width " />
#header {
background:url (medium-density-image.png);
}
@media screen and (- webkit -device-pixel-ratio:1.5) {
/* CSS for high-density screens */
#header { background:url (high-density-image.png);}
}
@media screen and (- webkit -device-pixel-ratio:0.75) {
/* CSS for low-density screens */
#header { background:url (low-density-image.png);}
}

像素密度

(3) 合理折中

针对安卓设备绝大多数是高密度,部分是中密度的特点,我们可以采用一个折中的方案:我们对480px宽的设计稿进行还原,但是页面却做成320px宽(使用background-size来对图片进行缩小),然后,让页面自动按照比例缩放。这样一来,低密度的手机有滚动条(这种手机基本上已经没有人在用了),中密度的手机会浪费一点点流量,高密度的手机完美呈现,超高密度的手机轻微失真(超高密度的安卓手机很少)。这种方案的优点非常明显:只需要一套设计稿,一套代码(只考虑安卓手机的情况)。


免责声明:文章转载自《移动端webapp如何应对不同屏幕尺寸(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NodeRed使用1 安装pytest自学第二期下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Winfrom 简单的安卓手机屏幕获取和安卓简单操作

为啥我要做这个东西了,是因为经常要用投影演示app ,现在有很多这样的软件可以把手机界面投到电脑上 ,但都要安装,比如说360的手机助手,我又讨厌安装,于是就自己捣鼓了下 做了这个东西,   实现了以下简单功能      1、屏幕获取(因为是截图方式获取的,所以有点卡顿)    2、实现点击功能,并在点击的时候出现一个手势图标,方便用户观看     3、实...

Flutter的环境配置以及一些常见问题

flutter & AndroidStudio flutter的下载与配置 flutter是Google推出的基于Dart语言开发的跨平台开源UI框架,能够支持安卓与iOS。 flutter框架的下载地址为: Windows macOS Linux 若在上述网址中无法顺利下载,也可以去flutter的github下载,注意,github上flu...

如何用myeclipse和eclipse搭建安卓开发环境

搭建安卓开发环境 1.        下载android开发必备工具之JAVA JDK: :http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe 下载JDK1.6,进行安装  2.   ...

想让安卓 APP 如丝般顺滑?

随着安卓手机市场占有率的节节攀升,随便在大街上找几个人估计 80% 用的都是安卓手机吧!用安卓手机的人这么多,不知道大家是否曾经感觉到过 APP 卡顿、死机?是否遇到应用程序无响应、闪退?本文就为大家解释一下其中的原因,如何通过帧数来监测 APP 流畅度及解决此问题。 为何 APP 会运行缓慢 学过计算机的人都知道, APP 运行在操作系统上,操作系统依赖...

delphi 安卓配置教程

本教程以 delphi 10.2.2.2004 为例,演示 delphi 安卓配置步骤 1.打开 Android Tools 2. 选择合适的版本。比如:我的小米4 LTE 是 andorid 6.0 ,我就选 android 6.0 (API23) 和 23.0.1 ,其它可以一律不选。 明白了吧,更多详细步骤,请自动搜索 android 工具配置方法...

Android开发人员不得不收集的代码(不断更新中...)

尺寸相关 dp与px转换 sp与px转换 各种单位转换 在onCreate()即可获取View的宽高 ListView中提前测量View尺寸 手机相关 判断设备是否是手机 获取当前设备的IMIE,需与上面的isPhone一起使用 获取手机状态信息 是否有SD卡 获取MAC地址 获取手机厂商,如Xiaomi 获取手机型号...