在Appcan开发中,首先要进行的就是页面布局,然后在这个页面上填充数据,加上互动元素,最终构成完整的应用。

因为appcan是使用HTML5+CSS3+JavaScript技术来进行开发,所以与普通web开发基本没有区别,理解成webapp的开发或许更好解释。

iOSAndroid系统中已经内置webkit内核,而appcan正是利用webkit来运行我们编写的页面,也就是可以将appcan看作是一个加强的webkit内核,强在它能通过js来控制手机某些功能,比如打电话、发短信、定位等等,这是普通webapp所不能达到的。

HTML页面布局

下面就介绍一些在appcan需要注意的问题,避免这些问题所带来的麻烦。

移动设备屏幕一般都比较小,在手机浏览器直接浏览网页时,会对网页进行缩放。可是我们开发的是类似原生的应用,是不能允许用户对网页区域进行缩放、调整大小操作的,那如何来解决呢?

我们可以在appcan里新建一个叫index.html的页面模板,看它头部代码:

  1. <!DOCTYPE html>
  2. <html class="um landscape min-width-240px min-width-320px min-width-480px min-width-768px min-width-1024px">
  3. <head>
  4. <title>
  5. </title>
  6. <meta charset="utf-8">
  7. <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  8. <link rel="stylesheet" href="css/ui-base.css">
  9. <link rel="stylesheet" href="css/ui-media.css">
  10. <script src="js/zy_control.js">
  11. </script>
  12. <script src="js/zy_click.js">
  13. </script>
  14. <script>
  15. </script>
  16. </head>

从代码上可以看到,页面采用标准的html5头部声明。<title> 标签可有可无,留空也可。接下来是声明页面编码,建议使用UTF8编码,因为JS中ajax与json编码只能是UTF8,所以最好使用UTF8,避免出现乱码和程序异常。

现在进入重点部分,viewport这个元属性,什么是viewport?

我再分别解释一下content里的内容。

target-densitydpi=device-dpi,指定屏幕像素密度DPI,device-dpi 为设备原本的DPI值,不会有任何缩放。

width=device-width,指定屏幕宽度,device-width设备屏幕的宽度。

initial-scale=1,初始缩放比例,设置为1,表示不进行任何缩放,显示原始大小。

user-scalable=no,用户否否可以手动缩放页面,设为no不允许。

minimum-scale=1.0,最小缩放比例,设为1,最小只能缩放到1倍。

maximum-scale=1.0,最大缩放比例,设为1,最大只能缩放到1倍,与上一项配合,保证,页面不会进行缩放。

其实user-scalable为no时,最后两项不会起作用,因为不会发生缩放问题,图个心安,就都放上了。

这样设置完成后,就能够保证,在任何设备中,网页的宽度就是屏幕显示区域的宽度,不会发生变化,这样我们进行排版里就不会出现问题,这也是与普通web开发比较大的不同之处了。

ui-media.css 这个文件就是官方默认生成的CSS文件,文件大概的用途就是在不同分辨屏下设置相对合适的字体大小,从9px到32px不等,iphone为16px, ipad1为20px,800*480的android机基本为24px。正是因为这个文件,所以才使得在不同大小的屏幕上的字体看起来不会有太大的比例失调问题,比如在ipad上字体不会显示得太小,iphone上不会太大。更重要的是文字的大小会直接影响以后CSS长度单位的设置!

CSS 排版注意问题

使用em单位

至于ui-base.css文件,是整个项目中的CSS样式文件,所有用到的样式都这个文件中,编写与普通web网页中的编写是一致的,而且支持css3属性,合理的使用CSS3属性会提高性能和效率。

无论是手机上还是电脑上,CSS的兼容性问题一直存在,appcan中也不例外,虽然支持CSS3但是各平台支持都有差异,需要酌情使用。

对于appcan,最头疼的就是不同分辨率的显示效果,实例中针对不同大小的屏幕都使用同一种布局方案,这也是大部分应用采用的方案。那么如何使得这些设备中显示上的效果基本一致呢?

大家考虑一下,ui-media.css使得屏幕越大的设备字体就越大,反之亦然。那么有没有能够让布局自适应的方法?在CSS中有em这么个单位,它不是一个精确的单位,而是一个相对的单位,相对谁呢?相对的就是字体大小,正是上面讲到的字体大小直接影响CSS布局的原因。

em会继承父级元素的字体大小,记住这点很重要,不至于在使用中出现大小不一致时摸不到头绪,影响开发。

文档有默认文字大小,每个元素中又有字体大小,所以使用em时,要冷静的清晰去判断当前位置的文字大小的具体的取值。

em单位会受到页面默认字体大小的影响,内层元素会受到外层元素字体大小的影响。

为什么要使用em而不去使用px呢?em是相对大小,px是固定大小,em在不同分辨率中会显示出不同大小,而px始终是一个大小!

大家可以去看看ui-base.css与官方提供的UI的CSS文件中,大量的在使用em作为单位,而px单位出现几乎为零。

在项目开发中推荐大家使用em作为单位使用,尽量避免使用px,这样可以保证在不同设备上显示效果基本一致。

背景图片缩放

说完了字体我们再说另一个可能需要缩放的元素——背景图片。

普通的img标签的图片,可以通过控制长宽来限制缩放,而背景图片却不可以,当容器大小发生变化时,背景图片依然是原有大小。

在CSS3中同样存在一个可以帮助我们来控制背景图片按容器大小进行缩放的属性——-webkit-background-size:100% 100%;

至于这个属性的使用方法,我就不过多介绍了,可以自己谷歌。只要在需要背景图片缩放的元素上设置此属性即可。

那么在我们的实例中,几乎所有用到背景图的时候,都加上了这个属性,大家可以看看实例中底部按钮是如何使用这个属性的,按钮的大小会根据屏幕进行缩放,同时按钮的背景一直都是充满整体按钮的。这个属性在开发过程中非常实用!

在使用了em和-webkit-background-size两个属性后,你就会发现在appcan中开发项目是多么快乐的一件事情啊。

Appcan开发之页面布局与CSS排版(转)的更多相关文章

  1. IT兄弟连 HTML5教程 和页面布局有关的CSS属性

    使用DIV+CSS对网页进行标准化布局前,除了要掌握盒子模型,还要掌握定位和浮动两个比较重要的概念,它们可以控制在页面上排列和显示元素的方式.一个盒子是装内容的区块,如果多个盒子组合在一起使用,再通过 ...

  2. python 之 前端开发(盒子模型、页面布局、浮动、定位、z-index、overflow溢出)

    11.312 盒子模型 HTML文档中的每个元素都被比喻成矩形盒子, 盒子模型通过四个边界来描述:margin(外边距),border(边框),padding(内填充),content(内容区域),如 ...

  3. 12小时包你学会基于ReactMix框架的ReactNativeApp开发(二)基于Css+HTML写第一个app页面

    上一篇文章,大家对于ReactMix(https://github.com/xueduany/react-mix)框架有了一个基本认识,知道我们是一个语法糖,帮助大家基于一套代码,所有平台都能跑.那么 ...

  4. 移动端页面开发适配 rem布局原理

    主题 HTML移动端页面开发适配 rem布局原理 什么是适配,为什么要适配 我们拿到的设计图一般是以640,750,1080分辨率为基准设计的,而现在的手机终端各式各样,分辨率不同,逻辑像素不同 ,适 ...

  5. 深度解析使用CSS单位px、em、rem、vh、vw、vmin、vmax实现页面布局

     1.px:绝对单位,页面按精确像素展示 2.em:相对单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个固定的值. e ...

  6. CSS页面布局常见问题总结

    在前端开发中经常会碰到各种类型布局的网页,这要求我们对css网页布局非常熟悉.其中水平垂直居中布局,多列布局等经常会被使用到,今天就来解决一下css布局方面的问题. 水平垂直居中的几种方法 说到水平垂 ...

  7. TMS WEB CORE直接从HTML&CSS设计的页面布局

    TMS WEB CORE直接从HTML&CSS设计的页面布局 TMS WEB CORE支持DELPHI IDE中拖放控件,生成HTML UI.这种方式适合DELPHI和C++ BUILDER的 ...

  8. 01 DIV+CSS 固定页面布局

    本文讲解使用DIV+CSS布局最基本的内容,读完本文你讲会使用DIV+CSS进行简单的页面布局. DIV+CSS布局中主要CSS属性介绍: Float: Float属性是DIV+CSS布局中最基本也是 ...

  9. 一步一步构建手机WebApp开发——页面布局篇

    继上一篇:一步一步构建手机WebApp开发——环境搭建篇过后,我相信很多朋友都想看看实战案例,这一次的教程是页面布局篇,先上图: 如上图所示,此篇教程便是教初学者如何快速布局这样的页面.废话少说,直接 ...

随机推荐

  1. 4,JavaScript数据类型

    学习要点:1.typeof 操作符2.Undefined 类型3.Null 类型4.Boolean 类型5.Number 类型6.String 类型7.Object 类型 ECMAScript 中有 ...

  2. vue is detected

    Vue.js is detected on this page. Devtools inspection is not available because it's in production mod ...

  3. tar命令加密压缩/解密解压

    在tar解压文件时发生下面错误信息 gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not rec ...

  4. 【转】IDEA快捷键功能说明及Eclipse对应操作

    1.Ctrl+z是撤销快捷键 2.如果想恢复Ctrl+z 掉的内容,按快捷键为:Ctrl + Shift + Z.方可 3.Ctrl-H(Browse Type Hierarchy) Ctrl + A ...

  5. python get() 和getattr()

    get() Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法: dict.get(key, default=None) 实例1: d={'A':1,'b':2} ...

  6. Flask 项目结构(仅供参考)

    project/ app/ # 整个程序的包目录 static/ # 静态资源文件 js/ # JS脚本 css/ # 样式表 img/ # 图片 favicon.ico # 网站图标 templat ...

  7. Luogu P1052 过河 DP

    复习复习DP...都忘了QAQ... 好了这道题我其实是看题解才会的... 方程 f[i]=min(f[i-j]+v[i]) v[i]表示i是不是石头 s<=j<=t 路径压缩引用一下证明 ...

  8. SPOJ - COT2 离线路径统计

    题意:求\(u\)到\(v\)的最短路径的不同权值种类个数 树上莫队试水题,这一篇是上篇的弱化部分,但可测试以下结论的正确性 设\(S(u,v)\):\(u-v\)最短路径所覆盖的点集 \(S(u,v ...

  9. POJ - 2676 暴搜 注意实现细节

    经典sudoku问题 按部就班就好 一定要注意细节 大于1还是大于等于1 r c越界判断 judge时0的特判 blabla居然磨了2个小时 改了很多地方所以实现得有点冗余,反正能A吧 /*H E A ...

  10. PIE SDK中值滤波

    1.算法功能简介 中值滤波是一种最常用的非线性平滑滤波器,它将窗口内的所有像素值按高低排序后,取中间值作为中心像素的新值. 中值滤波对噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘, ...