移动开发实践之HTML5中viewport属性的使用

2015-03-01 13:50 栏目:技术开发 查看(14148)

现在随着移动互联网的兴起,很多人开始关注移动互联网,甚至有不少人觉得传统PC端网站已经落伍了(当然我本人并不这么认为)。其实接触一个新的东西,我们就必须理解很多新的东西,当然移动端开发对于我们而言不是什么新鲜的东西,我只是来区别于我们传统的PC端开发而已。当然现在的移动开发,我们就会想到HTML5,而在解决方案上我们会考虑不同设备的适配问题。关于这点,我想不得不跟大家一起来回顾viewport这个属性。

而实际上viewport是meta标签中的一个属性之一,据资料说是Apple(当然我也不确定是不是)发明的。这个属性除非做真正意义上的移动网页,实际上有时候也可以“不务正业”地做其他的事情,当然原来还是它的“本分工作”,这里只留个我个人的观点,后面如果有时间的话就分享下我的理解。下面就是这个属性的基本语法了:

 <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]"
/>

其实看到这个语法规则,基本上也能够知道各个具体的属性及属性值的意义了,当然我们接下来也可以分别阐述一下各个具体的属性及属性值的意义。

1、尺寸:height和width

这个很容易理解,就跟我们css中的模盒的尺寸一样,都是指高度和宽度;而值只有两种情况,一直device-width和device-height分别是自动识别设备的屏幕宽度和高度。而另外的则是具体的、固定的尺寸,当然这里是以px为单位,比如320px。实例:

<meta name="viewport" content="width=device-width" />
<meta name="viewport" content="width=320px" />

2、屏幕像素密度:

target-densitydpi 这个属性似乎很多文章和资料中都不提到他,当然这里因为我知道还有这么一个属性,所以分享在这里了,也算是对很多文章的一个补充吧。一个屏幕像素密度是由屏幕分辨率决定的,通常定义为每英寸点的数量(dpi)。Android支持三种屏幕像素密度:低像素密度,中像素密度,高像素密度。一个低像素密度的屏幕每英寸上的像素点更少,而一个高像素密度的屏幕每英寸上的像素点更多。Android 浏览器和WebView默认屏幕为中像素密度。它具体的参数如下:

device-dpi –使用设备原本的 dpi 作为目标 dp。 不会发生默认缩放。

high-dpi – 使用hdpi 作为目标 dpi。 中等像素密度和低像素密度设备相应缩小。

medium-dpi – 使用mdpi作为目标 dpi。 高像素密度设备相应放大, 像素密度设备相应缩小。 这是默认的target density。

low-dpi -使用mdpi作为目标 dpi。中等像素密度和高像素密度设备相应放大。

value– 指定一个具体的dpi 值作为target dpi. 这个值的范围必须在70–400之间。

这些其实非常好理解,跟我们css一样的,比如我们在css中的字体粗细的属性font-weight一样,有bold、bolder、normal、inherit等“标准属性值”,也有100-900的数值,当然除此之外还有很多类似的例子,比如color等等。实例

<meta name="viewport" content="target-densitydpi=device-dpi" />
<meta name="viewport" content="target-densitydpi=high-dpi" />
<meta name="viewport" content="target-densitydpi=medium-dpi" />
<meta name="viewport" content="target-densitydpi=low-dpi" />
<meta name="viewport" content="target-densitydpi=100" />

当然在这里我也在网上看到了有朋友分享了这个属性的一个实际应用案例,那就是关于解决不同屏幕缩放问题的一个小小方案,其实就是一段话而已。

为了防止Android 浏览器和WebView 根据不同屏幕的像素密度对你的页面进行缩放,你可以将viewport的target-densitydpi 设置为 device-dpi。当你这么做了,页面将不会缩放。相反,页面会根据当前屏幕的像素密度进行展示。在这种情形下,你还需要将viewport的width定义为与设备的width匹配,这样你的页面就可以和屏幕相适应。

3、初始缩放:initial-scale

这个属性就是用于设置初始缩放程度的。即页面初始缩放程度。这是一个浮点值(通俗理解就是可以带小数的),是页面大小的一个乘数。例如,如果你设置初始缩放为“1.0”,那么,web页面在展现的时候就会以target density分辨率的1:1来展现。如果你设置为“2.0”,那么这个页面就会放大为2倍。实例:

<meta name="viewport" content="initial-scale=1" />

4、缩放限制:maximum-scale和minimum-scale

分别是只允许缩放的上限和下限,比如maximum-scale就是指最大缩放。即允许的最大缩放程度。这也是一个浮点值,用以指出页面大小与屏幕大小相比的最大乘数。例如,如果你将这个值设置为“2.0”,那么这个页面与target size相比,最多能放大2倍。minimum-scale同理。实例:

<meta name="viewport" content="maximum-scale=2.0,minimum-scale=1.0" />

5、用户“权限”:user-scalable

用户调整缩放。即用户是否能改变页面缩放程度。如果设置为yes则是允许用户对其进行改变,反之为no。默认值是yes。如果你将其设置为no,那么minimum-scale 和 maximum-scale都将被忽略,因为根本不可能缩放。实际上根据其他资料和实验属性值为false和true以及0和1也是可以的。

最后需要说明的是,所有的缩放值都必须在0.01–10的范围之内。而且似乎有的浏览器对其中的一些属性值不起作用(当然也是是我本来还理解得不够彻底吧),具体大家可以根据参考的语法去实践。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:移动开发实践之HTML5中viewport属性的使用 - 微构网络
分享: