[适配性]移动Webapp自适应方案

此次方案的优化点

  • 页面元素会随宽度的变化而自适应的放大和缩小,和原来不同的是,全页面的高度、字体都会随宽度变化,保持同比例的变化,保证页面不会变形。页面样式只需要写一套CSS布局即可。
  • 对于无法获取到屏幕宽度的手机(极少数个例),我们也可以通过自定义的模式添加支持

统一布局规则

  1. 内部布局统一使用px作为单位,可以根据视觉稿来还原;
  2. 字体也使用px,可以保持和其他的元素的相同的放缩比例,不要采用em,或者rem,因为目前没有根据device-width来设定根节点的默认字体,使用rem会随浏览器本身差异而变化,不可控;
  3. 图片资源,根据设计的提供的资源情况而定。一般资源可根据宽度加载不同的图片资源的方案。icon类资源,按建光的方案,使用icon fonts
  4. 列表和表格较多,可以考虑是否需要加入Pure.css来绘制表格;

可能存在的问题

  • border的宽度,设定为1px,在Retina屏幕上可能会显示2个像素。
  • 有的宽高比不正常的手机,大部分页面可能会因为高度略高而垂直可滑动,我们的页面基本垂直都是可以滑动的,这个方案可以通过设定高度可以解决,但是也会影响显示效果。

前提准备

最初执行一段判断代码,iOS和Android平台的webkit的差异,需要区分来对待。
根据userAgent来区分设备,然后加载不同的viewport配置。

var adaptUILayout = (function(){

//根据校正appVersion或userAgent校正屏幕分辨率宽度值
var regulateScreen = (function(){
  var cache = {};

  //默认尺寸
  var defSize = {
    width  : window.screen.width,
    height : window.screen.height
  };

  var ver = window.navigator.appVersion;

  var _ = null;

  var check = function(key){
    return key.constructor == String ? ver.indexOf(key) > -1 : ver.test(key);
  };

  var add = function(name, key, size){
    if(name && key)
      cache[name] = {
        key : key,
        size : size
      };
  };

  var del = function(name){
    if(cache[name])
      delete cache[name];
  };

  var cal = function(){
    if(_ != null)
      return _;

    for(var name in cache){
      if(check(cache[name].key)){
        _ = cache[name].size;
        break;
      }
    }

    if(_ == null)
      _ = defSize;

    return _;
  };

  return {
    add : add,
    del : del,
    cal : cal
  };
})();

//实现缩放
var adapt = function(uiWidth){
  var
      deviceWidth,
      devicePixelRatio,
      targetDensitydpi,
  //meta,
      initialContent,
      head,
      viewport,
      ua;

  ua = navigator.userAgent.toLowerCase();
  //whether it is the iPhone or iPad
  isiOS = ua.indexOf('ipad') > -1 || ua.indexOf('iphone') > -1;

  //获取设备信息,并矫正参数值
  devicePixelRatio = window.devicePixelRatio;
  deviceWidth      = regulateScreen.cal().width;

  //获取最终dpi
  targetDensitydpi = uiWidth / deviceWidth * devicePixelRatio * 160;

  //use viewport width attribute on the iPhone or iPad device
  //use viewport target-densitydpi attribute on the Android device
  initialContent   = isiOS
      ? 'width='+ uiWidth +', user-scalable=no'
      : 'target-densitydpi=' + targetDensitydpi + ', width='+ uiWidth+', user-scalable=no';

  //add a new meta node of viewport in head node
  head = document.getElementsByTagName('head');
  viewport = document.createElement('meta');
  viewport.name = 'viewport';
  viewport.content = initialContent;
  head.length > 0 && head[head.length - 1].appendChild(viewport);
};
return {
  regulateScreen : regulateScreen,
  adapt : adapt
};
})();
/*
 *640为当期页面指定的统一分辨率,其他分辨率下均为此分辨率的放缩变化
 */
adaptUILayout.adapt(640);

上述方法的运行结果是(Android对应nexus5,其他手机target-densitydpi会有不同):

IOS: <meta name="viewport" content="width=640, user-scalable=no">
Android:<meta name="viewport" content="target-densitydpi=853.3333333333333, width=640, user-scalable=no">

上述方案可以解决市面上大多的手机的屏幕适配问题,但是对于有些特殊的获取不到window的width的手机,可以通过自动添加的模式加入适配方案。

时间: 2024-10-26 11:09:09

[适配性]移动Webapp自适应方案的相关文章

移动端webapp自适应实践(css雪碧图制作小工具实践)图文并茂

为什么要写这个 以前写过关于webapp自适应屏幕的文章(链接),不过写的大多数群众看不懂,所以来个图文并茂的版本.虽然只是一个简单的页面,不过在做的过程中也遇到了一些问题,也算是好事吧! 该示例github地址:https://github.com/iwangx/WebApp 访问地址:https://csssprite.herokuapp.com/ 准备 psd:这个是最重要的东西,用于测量尺寸,以及切图,我是不太同意切图的工作交给ui,自己切比较好,psd的分辨率我做的是640px的宽度,

基于适配性的物联网技术在应急物流中的应用探讨

基于适配性的物联网技术在应急物流中的应用探讨 赵越 赵启兰 本文基于任务技术适配模型(TTF )提出了物资技术适配模型(MTF ),用于分析物联网技术应用于应急物资储备环节时,物资与物联网技术的适配度问题.提出影响适配度的因素以及各影响因素的权重,并以部分应急物资为例分析了各物资在储备环节中与物联网技术的适配度以及它们的相对大小.本文为在资金有限的情况下,在应急物资储备环节中如何应用物联网技术以达到更好的储备效果提供了可参考的研究思路. 基于适配性的物联网技术在应急物流中的应用探讨

手机客户端适配性

适配性指的是客户端应用程序能可以在多种参数的手机屏幕上运行,手机屏幕的相关参数有尺寸.分辨率和精度. 屏幕尺寸指的是实际的物理尺寸,以屏幕的对角线长度为准.如iPhone的尺寸为3.5英寸.http://www.aliyun.com/zixun/aggregation/10134.html">屏幕分辨率是物理像素总数.如iPhone的屏幕像素为320×480px(宽×高).屏幕精度取决于屏幕分辨率和像素在物理宽高上分布情况.如iPhone的精度为164dpi.简单地说精度是分辨率与尺寸的比

web app 自适应方案总结 关键字 弹性布局之rem

现在移动端 web app 的自适应布局的方案有 5种. 零. Flexbox        使用css3 flexbox 进行布局,对于富媒体和复杂排版的支持非常强大,未普及兼容性非常差,几乎没有在任何项目中得到应用. 一. 弹性布局         使用 em 或 rem 单位进行相对布局,相对 % 百分比更加灵活,同时可以支持浏览器的字体大小调整和缩放等的正常显示. 因为em是相对父级元素的原因 没有得到推广. 二. 流式布局(Fluid)          使用 % 百分比定义宽度,高度

web app 自适应方案总结

  现在移动端 web app 的自适应布局的方案有 5种. 一. Flexbox 使用css3 flexbox 进行布局,对于富媒体和复杂排版的支持非常强大,未普及兼容性非常差,几乎没有在任何项目中得到应用. 二. 弹性布局 使用 em 或 rem 单位进行相对布局,相对 % 百分比更加灵活,同时可以支持浏览器的字体大小调整和缩放等的正常显示. 因为em是相对父级元素的原因 没有得到推广. 三. 流式布局(Fluid) 使用 % 百分比定义宽度,高度大都是用px来固定住,可以根据可视区域 (v

Android屏幕适配全攻略(最权威的官方适配指导)

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习本文,对于Android的屏幕适配,你将有所收获! Android屏幕适配出现的原因 重要概念 屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi 解决方案 支持

神州云科:超融合方案快速商业化的背后逻辑

近日,随着神州云科YK Cloud超融合技术方案全国渠道巡展市场活动的圆满收尾,客户端的需求也随之纷纷落地.金融行业以光大银行为代表,传统制造业以泰尔重工以及教育行业以辽宁职业学院为先导的一批行业客户,最先采用了神州云科超融合架构的技术方案进行网络部署并完成测试,进入实施阶段.由此看出,神州云科发力于超融合架构技术迭代带来的市场机会,其推动技术商业化的步伐明显快于行业的发展.神州云科数据技术有限公司总经理吴昊直言:"按照摩尔定律,市场给予大家的时间有限,今天的IT市场里,起跑那一刻的速度就能决定

SolidFire公司闪存方案存储密度低于HPE——竞争优势在哪里?

NetApp公司的SolidFire阵列在提供同等闪存存储容量的情况下,需要占用四倍于惠普企业业务公司及EMC的存储方案.由于其采用1U硬件设备,因此其能够支持的SSD容量必然受到限制. 在采用SolidFire充当向外扩展节点的情况下,较低的每机架单元闪存存储密度意味着我们需要添加更多节点才能达到特定闪存容量级别. SolidFire SF19210阵列节点或设备可容纳十块1.92 TB SSD(3D NAND SSD),整套机箱前部可部署两排.每排五块驱动器.这意味着其原始存储容量为19.2

浅谈网站SEO优化方案的写作方法(二)

前段时间写了SEO优化方案一,从一些基本SEO优化的方面列举了SEO优化方案的写法.随着SEO市场的发展,简单的SEO方案已经没有竞争力,只有通过探索,写出有创意,执行性高的优化方案,才能在SEO工作和市场竞争中取得胜利,那怎样写出有竞争力的SEO优化方案呢?本文主要从以下五个方面来回答这个问题. 1.从全局出发,布局SEO优化执行方法 写方案,最终能否顺利的执行是最关键的一点.通过对网站,网站价值,网站浏览者的调查了解,整合有必要的SEO优化资源,通过对资源整体的合理布局,不仅能在以后的方案执