Viewport :字面意思为视图窗口,在移动 web 开发中使用。表示将设备浏览器宽度虚拟成一个特定的值(或计算得出),这样利于移动 web 站点跨设备显示效果基本一致。
基本写法:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1,target-densitydpi=medium-dpi">
测试获取 viewport 的 width :
document.documentElement.clientWidth
1、在 iphone 上是读取 device-width 的值,并自动计算出 target-densitydpi 去适配,在 iphone4 上读取的值为 320  。
最终的计算公式为:
当 initial-scale=1 时:
ViewportWidth=width  ;
当 initial-scale !=1 时:
ViewportWidth=width  >  320 / initial-scale ? Width : 320 / initial-scale ;
ViewportWidth 不超过 1280 ,大于取 1280  。
2、在 android 上,读取的是 target-densitydpi  。在不设置的情况下,默认选择的是 medium-dpi(160)  。以下讨论均在中屏幕大小的手机上范围内:
Dpi 的分级与其对应的代表分辨率:
Low-dpi:240*320 (基本淘汰,暂不讨论)
Medium-dpi:320*480
High-dpi:480*800
Super high-dpi:640*960   其对应的 dpi 为 120 、 160 、 240 、 320  。
实验一:对 480*800 设置 dpi 为 medium-dpi ,其 viewport 为 320 ;设为 high-dpi  ,其 viewport 为 480 ;设为 device-dpi  ,其 viewport 为 480 ;
实验二:对 540*800 设置 medium-dpi , viewport 为 360 ;设为 high-dpi  ,其 viewport 为 540 ;设为 device-dpi  ,其viewport 为 540 ;设为 low-dpi  ,其 viewport 为 270 ;
总结:从上面两个实验可得出:
当设备为 high-dpi 设备时,设置为中分辨率的 viewportwidth 为( 2/3 ) *device-width ;设置为 low-dpi 时,为( 1/2 )*device-width 。这个比例和其 dpi 的比例是一致的, 2/3=160/240 和 1/2=120/240 ;
推测 dpi 的值与 viewportwidth 存在一元关系。
①假设我要做一个 android high-dpi 设备应用,虚拟的 viewportwidth 定死为 320px 。
设 device-width=x ,( 2/3 ) *x 为该设备设为 medium-dpi 时 viewportwidth 的值, x/240 表示一个 dpi 值代表多少个 px 。
Target-densitydpi=160 - { ( 2/3 ) *x-320}/(x/240);
简化一下: Target-densitydpi=320*240/x ;
实验三:在 540 手机上设置 Target-densitydpi=142 ,其 viewport 为 320  。
根据以上公式可以计算出 Target-densitydpi=142.222222 ,与上面测试数据一致。
②假设我要做一个 android super-high-dpi 设备应用,虚拟的 viewportwidth 定死为 320px 。
Target-densitydpi=320*320/x ;
此公式未进行试用期验证。
③假设我要做一个 android medium-dpi 设备应用,虚拟的 viewportwidth 定死为 320px 。
Target-densitydpi=160 - {x-320}/(x/160);
Target-densitydpi=320*160/x
实验成功
④假设我要做一个 android low-dpi 设备应用,虚拟的 viewportwidth 定死为 320px 。
Target-densitydpi=160 - { ( 4/3 ) x-320}/(x/120);
Target-densitydpi=320*120/x
此公式未进行试用期验证。
特例: htcA510E :在 width 设有具体值时,会读取 width ,忽略 dpi 。
联想 K1 pad  不读取 dpi ,只读取 width ,而且当 width 小于等于 320 的时候忽视,直接取 device-width 。
3、htc input 缩放问题。当 viewport 的值大于 device-width 时,会出现 input 获取焦点放大。所以在设计中选择基于 320 分辨率( 240 设备淘汰不讨论),出图基于 640 ,图片 0.5 缩放保证清晰度。

总结,在开发时最好基于320宽进行开发,图片基于640做,在放置图片时可以用background-size或zoom缩放一倍,图片在高清晰屏上就不会模糊。在加载页面时通过读取设备的width去计算dpi然后动态生成meta标记,可以很好解决手机的分辨率适配问题。但是在android pad端上不适用,原因有二,一、pad对width是计算还是读取比较混乱,有些像ios,有些读dpi,还有的两个都读,然后分段比较。二、pad的高中低dpi分档和手机不一样,没有统一标准

移动端 设计与开发经验之ViewPort的更多相关文章

  1. 浅谈移动端中的视口(viewport)

    在 PC 端,视口指的是浏览器的可视区域,其宽度和浏览器窗口的宽度保持一致.在 CSS 标准文档中,视口也被称为初始包含块,它是所有 CSS 百分比宽度推算的根源,给 CSS 布局限制了一个最大宽度. ...

  2. H5 端 rem 适配方案与 viewport 适配

    H5 端 rem 适配方案与 viewport 适配 rem rem 是 CSS3 新增的一个相对单位(root em,根 em) 只根据当前页面 HTML 页面的 font-size 设置,如果根目 ...

  3. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

  4. 移动端布局最佳实践(viewport+rem)

    通过前几天写的两篇博客(浅谈移动端三大viewport和移动端em和rem区别),我们现在来总结一下如何实现一个最佳方案. 之前在第二篇博客中提到过我们可以使用媒体查询来针对不同设备及做适配,如下图 ...

  5. h5 移动端开发自适应 meta name="viewport"的使用总结

    本文系个人理解,可能有误差,仅供参考,谨慎采纳! 布局视口: 系统自带 一般大于屏幕宽度 理想宽度:  设置页面的viewport 的一个宽度,使不同的手机的布局视口宽度尽量接近可视窗口的值: 可视视 ...

  6. TYPESDK手游聚合SDK服务端设计思路与架构之二:服务端设计

    在前一篇文中,我们对一个聚合SDK服务端所需要实现的功能作了简单的分析.通过两个主要场景的功能流程图,我们可以看到,作为多款游戏要适配多个渠道的统一请求转发中心,TYPESDK服务端主要需要实现的功能 ...

  7. TYPESDK手游聚合SDK服务端设计思路与架构之四:流程优化之信息安全与订单校验

    有了前文几个步骤的分析和设计,TYPESDK的信息交互流程已经可以正常工作了,但是,这个流程还没有考虑到支付这样的过程中,至关重要的信息安全问题. 在整个交互过程中,游戏服务端,SDK服务端,渠道服务 ...

  8. TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知

    经过前两篇文字的分析与设计,我们已经可以搭建出一个能够支持多游戏多渠道的聚合SDK服务端,但这只是理想化状态下的一个简化模型.如果接入渠道的逻辑都是按照理想化的简化过程来构建,那么对于支付的请求,我们 ...

  9. 移动APP服务端设计开发注意要点

    2014年,移动APP的热度丝毫没有减退,怎么为您的移动端app设计良好的服务器端接口(API)呢? 下面谈谈我个人的一些想法. 2014年,移动APP的热度丝毫没有减退,并没有像桌面软件被WEB网站 ...

随机推荐

  1. JavaScript基础——理解变量作用域

    一旦你开始在JavaScript应用程序中添加条件.函数和循环,就需要理解变量作用域.变量作用域规定了如何确定正在执行的代码行上的一个特定变量名的值. JavaScript允许你既定义全局版本又定义局 ...

  2. .net学习笔记---lambda表达式(自执行方法)

    http://www.cnblogs.com/jesse2013/p/happylambda.html#b034 lambda表达式 http://www.cnblogs.com/OceanEyes/ ...

  3. 傻瓜式十分钟免费开启 HTTPS,是时候为你的站点加上小绿锁了

    http://gold.xitu.io/entry/57df65690bd1d00057f9455b?from=singlemessage&isappinstalled=0 原文链接:http ...

  4. Vmware 中安装Unix

    准备 1. ubuntu 14.10 下载地址: 官网下载链接 http://www.ubuntu.com/download/desktop 官方版本库 http://releases.ubuntu. ...

  5. css 全局 兼容性问题

    css 笔记 第一种:常用的全局CSS属性设置 //参考大型网站,如凤凰网 (1)清除所有的标记的内外边距 body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,p ...

  6. wp8 入门到精通 高仿微信发信息 键盘不消失

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> < ...

  7. hdu 5291 dp+优化 ****

    多校实在高能 题解链接 题意:有n中糖果,每种糖果有ai个.分给A,B两个人.两人的糖果要一样多,可以都是0,1......m个.同一种糖果没有区别. 问有几种分法. 定义dp[i]表示两人之间相差i ...

  8. Mysql添加外键约束

    简单说一下使用外键的好处 1.完整性约束 比如:用户表中有字段 用户编号(id) , 名称(username)设备表中有字段 设备编号(id) , 设备名称(devicename) 设备属于的用户编号 ...

  9. Android系统架构

    Linux内核层 为Android的各种设备提供了底层驱动 系统运行库层 为Android提供一些底层的库,如数据库.3D绘图等 应用框架层 核心API 应用层 具体的手机application An ...

  10. 自己yy的fulkson最大流算法

    #include <iostream> #include <cstdio> #include <vector> using namespace std; ; //m ...