一、viewport的概念
 
  移动设备上的viewport就是设备的屏幕上能用来显示我们的网页的那一块区域,就是浏览器上用来显示网页的那部分区域,但viewport不局限于浏览器可视区域
的大小,它可能比浏览器的可视区域要大,也可能比浏览器的可视区域要小。
 
  在默认情况下,移动设备上的viewport都是要大于浏览器可视区域的,这是因为考虑到移动设备的分辨率相对于桌面电脑来说都比较小,所以为了能在移动设备上正常显示那些传统的为桌面浏览器设计的网站,移动设备上的浏览器都会把自己默认的viewport设为980px或1024px(该值由设备自己屏幕大小决定),但带来的后果就是浏览器会出现横向滚动条,因为浏览器可是区域的宽度是比这个默认的viewport的宽度要小的。
 
二、css中的1px并不等于设备的1px
 
  在css中我们一般使用px作为单位,在桌面浏览器中css的1个像素往往都是对应着电脑屏幕的1个物理像素,这可能会造成我们的一个错觉,那就是css中的像素就是设备的物理像素。但实际情况并非如此,css中的像素只是一个抽象的单位,在不同的设备或不同的环境中,css中1px所代表的设备物理像素是不同的。在为桌面浏览器设计的网页中,我们无需对这个斤斤计较,但在移动设备上,必须弄明白这点。
 
  在早先的移动设备中,屏幕像素密度都比较低,在iphone3上,一个css像素确实是等于一个屏幕物理像素的。后来随着技术的发展,移动设备的屏幕像素越来越高,从iphone4开始,分辨率提高了,但屏幕尺寸没变,这就意味着同样大小的屏幕上,像素却多了一倍,这时,一个css像素是等于两个物理像素的。
 
  还有一个因素也会引起css中px的变化,那就是用户缩放,例如,当用户把页面放大一倍,那么css中1px所代表的物理像素也会增加一倍;反之把页面缩小一倍,css中1px所代表的物理像素也会减少一倍。
 
  window对象中有一个devicePixelRatio属性,官方定义为:设备物理像素和设备独立像素的比例。devicePixelRatio = 物理像素 / 设备独立像素
 
三、关于viewport的三个理论
 
     因为分辨率增大,但屏幕尺寸没有变大多少,必须让css中的1px代表更多的物理像素,才能让1px的东西在屏幕上的大小与那些低分辨率的设备差不多,不然就会因为太小而看不清。所以在1080x1920这样的设备上,在默认情况下,也许你只要把一个div的宽度设为300多px,就是满屏的宽度了。回到正题上来,如果把移动设备上浏览器的可视区域设为viewport的话,某些网站就会因为viewport太窄而显示错乱,所以这些浏览器就决定默认情况下把viewport设为一个较宽的值,比如980px,这样的话即使是那些为桌面设计的网站也能在移动浏览器上正常显示了。
 
  PPK把这个浏览器默认的viewport叫做 layout viewport。这个宽度可以通过document.documentElement.clientWidth来获取。
 
     然而,layout viewport 的宽度是大于浏览器可视区域宽度的,所以我们还需要一个viewport 来代表浏览器的可视区域的大小,PPK把这个viewport 叫做 visual viewport。这个viewport可以通过window.innerWidth 来获取。但在 Oprea mini 和 UC 8 中无法正确获取。
 
  
 
 
     现在已经有两个viewportl了:layout viewport 和 visual viewport。但浏览器觉得还不够,因为现在越来越多的网站都会为移动设备进行单独的设计,所以必须还要有一个能完美适配移动设备的viewport。所谓的完美适配指的是,首先不需要用户缩放和横向滚动条就能正常的查看网站的所有内容;第二,显示的文字的大小是否合适,比如一段14px大小的文字,不会因为在一个高密度像素的屏幕里显示得太小而无法看清,理想的情况是这段14px的文字无论是在何种密度屏幕,何种分辨率下,显示出来的大小都是差不多的。当然,不只是文字,其他元素,像图片什么的也是这个道理。PPK把这个viewport叫做 ideal viewport,也就是第三个viewport——移动设备的理想viewport
 
     ideal viewport并没有一个固定的尺寸,不同的设备拥有不同的ideal viewport。所有的iphone的ideal viewport宽度都是320px,无论它的屏幕宽度是320还是640,也就是说,在iphone中,css中的320px就代表iphone屏幕的宽度。
 
     但是安卓设备就比较复杂了,有320px,360px,384px等等。
 
     
四、利用meta标签对viewport进行控制
 
     移动设备默认的viewport是 layout viewport,也就是那个比屏幕要宽的viewport,但在进行移动设备网站的开发时,我们需要的是 ideal viewport
那么怎么才能获取  ideal viewport 呢? 这时候轮到meta标签出场了。
 
  我们在开发移动设备网站时,最常见的一个动作就是把下面这个东西复制到我们的head标签中:
 
<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=0">
 
该meta标签的作用是让当前viewport的宽度等于设备的宽度,同时不允许用户手动缩放。也许允许用户缩放不同的网站有不同的要求,但让viewport的宽度等于设备的宽度,这个应该是大家都想要的效果,如果你不这样设定的话,那就会使用那个比屏幕宽的默认viewport,也就是说会出现横向滚动条。
 
这个name 为 viewport 的 meta的标签到底有哪些东西呢?又都有什么作用呢?
 
meta viewport标签首先是苹果公司在其safari浏览器中引入的,目的就是解决移动设备的viewport问题。
 
在苹果的规范中,meta viewport有6个属性
width 设置layout viewport的宽度为一个正整数,或字符串"width-device"
intial-scale 设置页面的初始缩放值,为一个数字,可以带小数
minimum-scale 允许用户的最小缩放值,为一个数字,可以带小数
maximum-scale 允许用户的最大缩放值,为一个数字,可以带小数
height 设置Layou viewport 的高度,这个属性对我们并不重要,很少使用
user-scalable 是否允许用户进行缩放,值为"no"或"yes","no"代表不允许,"yes"代表允许
 
  多个属性同时使用逗号隔开就行。
 
  此外,安卓还支持 target-densitydpi 这个私有属性,它表示目标设备的等级密度,作用是决定css中的1px代表多少物理像素
 
target-densitydpi 值可为:(某个值)| high-dpi | medium-dpi | low-dpi | device-dpi
 
  特别说明的是,当target-densitydpi=device-dpi时,css中的1px等于物理像素的1px。
  因为这个属性只有安卓支持,并且安卓已经决定要废弃这个属性,所以这个属性我们要避免使用。
 
五、把当前的viewport宽度设置为 ideal viewport的宽度
 
     要获取ideal viewport就必须把默认的layout viewport的宽度设为移动设备的屏幕宽度。因为meta viewport中的width能控制layout viewport的宽度,所以我们只需要把width设为width-device这个特殊的值就行了。
 
<meta name="viewport" content="width=device-wdith">
<meta name="viewport" content="width=device-width">
 
可以看到通过width=device-width,所有浏览器都能把当前的viewport宽度变成ideal viewport的宽度,但要注意的是,在iphone和ipad上,无论是竖屏还是横屏,宽度都是竖屏时ideal viewport的宽度。
 
<meta name="viewport" content="initial-scale=1">
 
也能达到和上一句代码一样的效果,即也能把当前viewport变为 ideal viewport、
 
 
总结:在移动端开发的时候,咱们不仅要会使用meta viewport标签来使页面更好的显示在移动设备上,我们也要知道一些理论知识,不能拿来就用,理论与应用结合,相信能走的更远。
 
(图文转载自 http://www.cnblogs.com/2050/p/3877280.html 作者: 无双)
 

移动端开发viewport深入理解(转)的更多相关文章

  1. 移动端开发-viewport与媒体查询

    首先要知道,在移动开发中,手机的浏览器会默认网页是为宽屏而设计的,它会缩小整个页面来适应屏幕. 1. 不使用viewport出现的问题 提到响应式设计,大家首先想到的可能是 Bootstrap , @ ...

  2. 移动端开发-viewport

    1.viewport viewport 即设备 屏幕上显示网页的区域.因为移动设备屏幕比较小,为了能让移动设备能够显示更多内容,默认设置的viewport 并不是屏幕真是像素点的宽度,一般为980px ...

  3. 移动端开发(一. Viewport(视窗))

    手机与浏览器 移动端开发主要针对手机,ipad等移动设备,随着地铁里的低头族越来越多,移动端开发在前端的开发任务中站的比重也越来越大.各种品牌及尺寸的手机也不尽相同.尺寸不同就算了分辨率,视网膜屏  ...

  4. 移动端布局:视口viewport的理解

    移动端开发中,有一些基本概念需要理解清楚,才能更好的组织编程逻辑.在刚接触时,移动端视口的缩放和rem单位的缩放搞混淆了,弄得自己很蒙圈.所以仔细总结下自己的理解. 移动端的适配,我理解为两点: 第一 ...

  5. (转)移动端开发总结(一)视口viewport总结

    转载链接:移动端开发中,关于适配问题的一点总结(一) 视口 布局视口layout viewport 视觉视口visual viewport 理想视口 缩放 一个重大区别 最小缩放 和最大缩放 分辨率 ...

  6. 移动端适配(rem & viewport)--移动端开发整理笔记(四)

    移动端适配 通过rem适配 em: 根据元素自身的字体大小来计算自己的尺寸 rem: (root em) 根据根节点(html)的字体大小来计算自己的尺寸   我们知道,在不同的手机设备,分辨率大小是 ...

  7. 移动端开发概览【webview和touch事件】

    作为一个前端,而且作为一个做移动端开发的前端,那意味着你要有三头六臂,跟iOS开发哥哥一起打酱油,跟Android开发哥哥一起修bug... Android vs Ios 我在webkit内核的chr ...

  8. 29.html5 移动端开发总结

    手机与浏览器 浏览器: 移动端开发主要针对手机,ipad等移动设备,随着地铁里的低头族越来越多,移动端开发在前端的开发任务中站的比重也越来越大.各种品牌及尺寸的手机也不尽相同.尺寸不同就算了分辨率,视 ...

  9. html5 移动端开发

    移动端开发总结     目录 1.手机与浏览器 2.Viewport(视窗) 3. 媒体查询 4.px,em,rem,pt 5.设备像素比devicePixelRatio 6.移动web中的图标及字体 ...

随机推荐

  1. css设置table表格tr分离

    table { border-collapse:separate; border-spacing:10px 50px; }

  2. monggodb学习系列:1,mongodb入门

    http://note.youdao.com/share/?id=fa62cd2386f253af68a7e29c6638f158&type=note#/ 放在有道笔记上了,懒得复制过来,有兴 ...

  3. PHP 观察者模式

    观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. [观察者模式中主要角色] 1.抽象主题(Subject)角色: 抽象主题提供了增加 ...

  4. 物联网框架SuperIO 2.2.9和ServerSuperIO 2.1同时更新,更适用于类似西门子s7-200发送多次数据,才能读取数据的情况

    一.解决方案 二.更新内容 1.修改IRunDevice接口,把void Send(io,bytes)改成int Send(io,bytes).2.修改网络控制器,发送数据不直接使用IO实例,改为使用 ...

  5. js Form.elements[i]的使用实例

    function pdf(){    //一个html里面可能存在多个form,所以document.form[0]指的是第一个form,document.form[1]返回就是第二个form,如果没 ...

  6. 16款最佳的 jQuery Time Picker 时间选择插件

    jQuery 插件可以为你做许多事情,你可以很容易地把这些插件集成到您的网站.网络上的 jQuery 日期选择器和日历插件很多,但找不到很满意的时间选择器插件. 在这里,我们收集了最好的一组 jQue ...

  7. 【初探IONIC】不会Native可不可以开发APP?

    前言 Hybrid技术流行已经有一段日子了,楼主的关注点也一直围绕着移动端围绕着Hybrid相关展开,Hybrid已经是大大提升开发效率的开发方式了,但是仍然需要至少一个IOS与Andriod,那么可 ...

  8. 摆脱DOM操作,从TodoMVC看angularJS

    取代jQuery? 我很久之前便听说了angularJS的大名,之前的leader也经常感叹angularJS的设计如何如何精妙,可叹一直没有机会深入了解,国庆长假因为没钱出游,倒是可以对他做一个了解 ...

  9. cookie入门

    据我对cookie诞生背景的了解,cookie是由网景公司创建的,目的就是将用户的数据储存在客户端上.伴随的HTML5的出现,现在又有另外一个解决数据离线储存的方案,就是HTML5中的Web stor ...

  10. GDAL生成Erdas Imagine

    GDAL原生支持超过100种栅格数据类型,涵盖所有主流GIS与RS数据格式,包括•  ArcInfo grids, ArcSDE raster, Imagine, Idrisi, ENVI, GRAS ...