转:http://www.zhihu.com/question/20650805
关于淘宝的WebApp,我没有研究过。你提到的“淘宝的webapp貌似均采用固定宽度”,我不太清楚,不做发言。不过我可以简单聊聊“采用固定宽度”解决不同分辨率的方案,因为目前我在开发的BAE WebApp项目,就是采用这种方式来处理的,这两天在准备一个BAE WebApp的PPT,聊到了一些分辨率适应的问题,不至于无的放矢。
澄清一下,这里所说的BAE WebApp,BAE是指中国移动自出研发的WebApp平台, BAE — Browser-based Application Engine,可以理解为基于HTML5的WebApp引擎,它同时具有跨平台的能力:可以运行在Android、iOS、WP系统——不是做广告,而是百度也有一个BAE,下文中出现的“WebApp”均指运行在BAE平台上的WebApp。
WebApp在布局时采用固定宽度和高度的做法,目前的标准是基于480*800分辨率,去除Android Title Bar后,实际运行WebApp的可视区域尺寸为480*762。即所有的WebApp开发时均按照480*762的尺寸来布局。在WebApp运行当中,由BAE将应用整体放大到目标屏幕的宽度,WebApp调用JS方法调整自身布局框架的高度,动态完成不同分辨率创下的WebApp布局的自适应。
这样做的好处是显而易见的:不必开发多套UI布局,避免CSS百分百布局方式带来的诸多问题;WebApp开发者不需考虑布局适应的问题,只需像做普通网页一样,为WebApp开发一套UI布局,真正做到一个应用,一套代码,随处运行。
上图为典型3段式WebApp布局结构,分别为Header、Container、Footer。
WebApp布局时以480*800分辨率为基准,去除Android Title Bar后的实际尺寸为480px * 762px。
HTML代码如下:
<div class="app-background-adapt">
<div class="ui-header"></div>
<div class="ui-container"></div>
<div class="ui-footer"></div>
</div>
CSS代码如下:
/* 绝对定位布局,支持Android2.2及以上 */
.app-background-adapt {
position : relative; width : 480px; overflow : hidden;
}
.ui-header, .ui-container, .ui-footer {
position : absolute; z-index : 10; left : 0;
}
.ui-header { top : 0; height : 80px }
.ui-footer { bottom : 0; height : 80px }
/* Container height : 762px - 80px - 80px */
.ui-container { top : 80px; /* height : 602px */ }
BAE WebApp布局自适应分辨率的两个步骤:
一、BAE平台适配宽度变化:
BAE将采用480*762基准尺寸的应用整体放大,将基准宽度放大到目标屏幕尺寸的宽度,完成横向的适应。
二、WebApp应用适配高度变化:
1.将WebApp布局架构的样式定义为模板
<script id='t-appLayoutAdaptive' type='text/style'>
.app-background-adapt { height : [[datumHeight]]px; }
.ui-container { height : [[Container ]]px; }
</script>
2.调用布局方法
common.appLayoutAdaptive.call('t-appLayoutAdaptive', {
Container : 602
});
3.common.appLayoutAdaptive对象
//根据屏幕尺寸设定应用的高宽,自适应应用的高度,与应用居中
common.appLayoutAdaptive = {
datumWidth: 480,
//基准宽度,即屏幕宽度
datumHeight: 762,
//基准高度,即除去title bar外的屏幕高度
datumScale: 1,
//基准缩放比率
/*参数说明:
* templateId 样式模版id
* defaultStyle 初始布局主要DIV层高度设定
*/
call: function(templateId, defaultStyle) {
this.handler(templateId, defaultStyle, this.getViewableArea());
},
/*获取应用缩放相关参数*/
getViewableArea: function() {
var isMobile = common.support.isMobile,
//获取显示应用区域的宽度和高度,单位为像素。
viewableAreaWidth = isMobile ? Widget.getDisplayAreaWidth() : this.datumWidth,
viewableAreaHeight = isMobile ? Widget.getDisplayAreaHeight() : this.datumHeight,
//获取当前应用的缩放比例
viewableAreaScale = isMobile ? Widget.getDisplayScale() : this.datumScale;
return {
width: viewableAreaWidth,
height: viewableAreaHeight,
scale: viewableAreaScale
};
},
/* 处理应用高度适配,获取目标屏幕宽度和高度,将目标宽度缩放到基准宽度480px,获取缩放后的高度,跟基准高度762px比较得出差值,获取框架DIV需拉伸的值 */
handler: function(templateId, defaultStyle, viewableArea) {
defaultStyle.datumHeight = this.datumHeight;
/* 计算屏幕缩放后比设定高度的差值
* 当目标尺寸大于等于480px时,将目标屏幕缩小到480px宽度;
* 反之,将目标屏幕放大到480px;
* 得到缩放后的目标屏幕的高度,减去762px
*/
viewableArea.scale = viewableArea.height / viewableArea.scale - this.datumHeight;
for (var key in defaultStyle) {
defaultStyle[key] = defaultStyle[key] + viewableArea.scale;
}
//生成style
var style = template.render(templateId, defaultStyle);
try {
var styleNode = document.createElement('style');
styleNode.type = 'text/css';
styleNode.innerHTML = style;
document.body.appendChild(styleNode);
} catch(e) {
//OPhone(Android 2.1)不支持修改style块,亦不支持创建style块
}
}
};
common.appLayoutAdaptive对象的作用就是:处理应用高度适配,获取目标屏幕宽度和高度,将目标宽度缩放到基准宽度480px,获取缩放后的高度,跟基准高度762px比较得出差值,获取框架DIV需拉伸的值。然后通过CSS模版,调整框架DIV的高度,生成Style。
相关推荐
idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发...
training/webapp镜像,方面一些内网用户无法直接pull镜像时下载: 使用方法: docker load -i training-webapp.tar.gz
另外,clouda app可以同时开发服务端和客户端,客户端的数据与云端实时同步,其内部数据也可供搜索引擎检索,解决app孤岛以及99.9%长尾应用只有30%分发量 的搜索分发问题。 标签:Clouda
"渐进式网页应用(PWA):它究竟解决了Web应用的哪些问题?" 渐进式网页应用(PWA)是Google梦寐以求的一件事,它解决了Web应用的多个问题,如架构、消息推送、安全等。PWA的全称是Progressive Web App,翻译过来...
C# Webapp的开发中,表示层主要负责用户交互,使用ASP.NET技术如ASP.NET MVC或ASP.NET Core来创建动态网页。业务逻辑层处理应用程序的核心功能,通过C#编写服务类实现业务规则。数据访问层则与数据库进行交互,例如...
1.了解Web工程概念及与传统软件工程的区别 2.理解WebApp的概念、特点和开发过程 3.掌握WebApp的分析、设计和测试方法 4.掌握WebApp综合开发方法及课程设计过程
**QtWebApp应用例程详解** QtWebApp是一款基于Qt框架的开源库,它使得开发者能够在C++环境中轻松地创建Web应用程序。这个库的核心功能是将HTTP服务器与Qt应用程序集成,使得用户可以通过Web浏览器与本地应用程序...
### WebKit WebApp 开发技术要点深度解析 在当今移动互联网时代,WebApp因其跨平台性和易维护性,成为开发者构建移动应用的重要选择之一。WebKit作为一款广泛应用于移动设备的浏览器引擎,其对WebApp的支持尤为关键...
公司做好一个H5的网页版网站,想直接打包成ios 和andrioid的App应用,方法很简单步骤详见我的另一篇博文(http://blog.csdn.net/lxy1106/article/details/79420176),此处为第2步的Hbuilder的解决方案,只需要将该...
4. 错误处理:提供清晰的错误提示,指导用户如何解决问题,避免用户因操作失误而感到困惑。 5. 简化表单:减少表单字段数量,使用预填充、自动完成等功能,提高填写效率。 6. 触摸友好:考虑到移动设备的使用,...
在本篇关于“Web基础——WebApp之初体验(三)”的文章中,我们将深入探讨Web应用程序(WebApp)的关键概念和技术,以及它们如何为用户提供便捷的在线体验。WebApp是互联网技术的重要组成部分,它们允许用户在浏览器...
Webapp框架是构建Web应用程序的一种结构化方法,它旨在简化开发流程,提高代码复用性和项目的可维护性。在这个特定的压缩包文件中,我们关注的是一个包含了登录、主界面框架以及播放器Demo的实现。这表明这个框架...
标题中的“ssh webapp 先方方”似乎是一个简化的表述,它可能指的是在Web应用程序开发中使用SSH(Secure Shell)进行远程管理或部署的过程。SSH通常用于安全地访问远程服务器,执行命令,传输文件等。Webapp则代表...
在开发Web应用程序(Webapp)时,为了确保在各种不同屏幕尺寸和分辨率的移动设备上都能得到良好的用户体验,我们需要对设计尺寸进行适当的转换,以便在CSS中使用rem单位。rem(root em)是一种相对单位,它相对于根...
webapp设计尺寸规范,好的规范,铸就明天的你
赠送jar包:jetty-webapp-9.3.19.v20170502.jar; 赠送原API文档:jetty-webapp-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-webapp-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-webapp-...
"桌面也兼修"揭示了Webapp 微信骨架不仅专注于移动端应用,还同时考虑到了桌面端的适配问题,确保在不同平台上都能提供一致的用户体验。这在当前多设备共存的环境中显得尤为重要,使得开发者无需为不同平台编写不同...
《Maven Archetype Webapp 1.0:构建Java Web项目的基石》 Maven Archetype Webapp 1.0.jar 是一个重要的工具,它属于Java开发领域中的Maven生态系统,主要用于快速搭建Java Web应用程序的基础框架。这个压缩包文件...
《WebApp与Android壳交互接口详解》 在移动应用开发中,WebApp与原生APP的壳(Native Shell)之间的交互是至关重要的,尤其是在构建混合型应用时。本文将详细解析一个公司内部使用的WebApp与Android壳的接口协议,...
在现代Web应用开发中,组件化开发已经成为一种主流的方式,尤其在构建复杂、可复用且易于维护的WebApp时。本资源“组件方式开发webApp源码”提供了一个完整的项目示例,让我们深入探讨一下这个主题。 首先,我们要...