智能手机Web开发笔记
智能手机版(简称M版)前端开发终于告一段落,第一次做移动端开发,没有想象中那么难搞,但是期间也遇到了各种这样那样的问题,虽然从小日记都不是自己写的,但是开发笔记还是要自己写的,不敢说让别人学习,只是仅以备忘,这算是序了。
关于M版,目前我们只考虑 iphone 跟 android 手机的兼容性,也就是说只需要考虑 webkit 内核的手机浏览器,这样可以放开大胆的使用 HTML5、CSS3 来实现一些效果,完全不用考虑 IE6,甚至连 IE 都不用考虑,这一点对于很多时间都在纠结于各种浏览器兼容性的我们来说具有很大的新鲜感,一个字,很爽,各种爽啊~
废话完了,笔记如下:
1、各种border-radius,box-shadow,-webkit-gradient
只要是能用上的都给用上,还不打折~这样整套下来整个项目的图片基本上就只剩下几个图标了。特别需要提起的是用 border 模拟三角箭头的时候有点意思,这个东西已经出现很多年了,只是限于IE6不能实现 background:transparent 效果而导致没有得到广泛应用,说有点意思是因为我们需要模拟的三角是有边框的,设计师伤不起啊,惹他们不高兴了就给你来各种圆角、各种边框(开个玩笑玩笑,19UED还是相当和谐的~),最后采用的方法是在模拟的三角里再绝对定位一个 border 小 1px 的三角,算是小技巧吧。
2、样式屏蔽
手机端屏幕都很小,如果要让样式只在手机端显示可以用 media 来控制屏幕样式
<link rel=“stylesheet” href=“m-only.css” media=“only screen and (max-device-width: 480px)” />
通过定义最大设备宽度 only screen and (max-device-width: 480px)(一般手机躺下来的宽度)来屏蔽屏幕比 480px 宽的阅读设备。这样就可以做到将 m-only 中定义的 CSS 样式仅在手机端生效。不过屏蔽其他设备真有必要吗?最后我们的代码里并没有加上这句,而是样式中的宽度都是自适应的。
3、viewport
<meta name=“viewport” content=“width=device-width,minimum-scale=1.0,maximum-scale=1.0″ />
这个属性相当重要,当你发现页面可能没法缩放,甚至连滚动都不行的时候就有可能是没有设置viewport或者设置不对。
viewport的参数:
width: 手机模拟PC浏览器的宽度,然后手机浏览器根据这个宽度把页面同比缩放到手机屏幕上。width:的特殊值device-width的是设备宽度;
height:同width;
user-scalable:是否允许用户缩放,有yes和no两个值;
initial-scale:初始缩放比例;
minimum-scale和maximum-scale:最小和最大缩放比例;
相关文档:
http://learnthemobileweb.com/tag/viewport/
4、position fixed
做过 iphone Web 页面的应该都有遇到过这个问题,手机端的webkit内核浏览器不支持CSS的position: fixed
解释在这里:Doctyper
http://doctyper.com/archives/200808/fixed-positioning-on-mobile-safari/
Imagine a book in front of you. Take a piece of paper, cut a 320×416 square in it, and lay it over the book. To read the book, move the paper around and position the hole over the words you want Coinstar Money fees to see. This is exactly what Mobile Safari’s viewport is doing. When you flick and scroll, you’re moving the viewport around while the website behind it stays static.
但是我们确实会需要将某些东西固定在页面上的某个位置,目前只有用JS来解决这个问题,给出两个链接,说的很详细了,不做赘述。
相关文档:
http://cubiq.org/scrolling-div-on-iphone-ipod-touch
http://cubiq.org/iscroll
最后由于综合到手机页面的可视区域和实现成本的考虑,我们最终放弃了在页面固定导航区域的设计,所以页面上不会看到相关代码。
5、重力感应
iphone或者android的重力感应游戏蛮有意思,我们的页面上能不能做重力感应的效果呢?通过window.orientation就可以实现,这个属性可以获取到当前页面方向,然后写上对应的操作就可以了,比如
window.onorientationchange = function(){
var orient = Math.abs(window.orientation);
switch ( orient ) {
case 90 :
statement;
break;
case -90 :
statement;
break;
default :
statement;
}
}
window.orientation 有4个值:
0 正常的竖直方向
-90 默认方向顺时针90°
90 默认方向逆时针90°
180 反向竖直方向,暂时手机还不支持
6、触摸操作
在iphone跟android手机里我们都是通过触摸屏幕来进行各种交互操作,传统的PC端hover操作这里就不存在了(CSS里的hover伪类效果会显示在元素点击后上,而且如果没有再次点击会一直保持),这样CSS里的hover就可以完全删掉了。
交互操作有两种:
一种是单手指操作触摸,相关事件有 touchstart,touchmove,touchend 和 touchcancel,这几个事件最重要的属性是pageX和 pageY,表示X和Y坐标,发出这些事件的时候监听器会接收到一个event对象,包括touches(触摸对象集合)和targetTouches。
另外一个交互操作就是两个手指的缩放和旋转,相关事件有gesturestart、gestureend 和 gesturechange,事件监听器也会接受到event对象参数,包含 event.scale (缩放比例)和 event.rotate (旋转角度)两个参数,如果我们要旋转,可以配合CSS3 transform 来实现。
相关文档:
http://www.slideshare.net/pp.koch/the-touch-events
http://developer.apple.com/library/safari/#documentation/appleapplications/reference/safariwebcontent/handlingevents/handlingevents.html
7、特殊链接
在PC端里,我们有时候会用到mailto来实现邮件的发送,在手机端里,也有类似的tel和sms来实现拨打电话和发送短信的操作,比如:
<a href=“tel:0571″>电话</a>
<a href=“sms:0571″>短信</a>
另外还有一些其他的特殊链接
如email、google map、YouTube和ihpone中启动iTunes等等,但是这些链接并不需要指定如tel和sms之类的特殊URL模式,只要链接地址符合相应的规则就可以了。
=============== 2011.8.5分割线 ===============
8、添加快捷方式到主屏幕
通过在head标签里添加 <linkrel="apple-touch-icon"href="custom_icon.png"/> 可以在 safari 里添加页面快捷方式至主屏幕,custom_icon.png 为 57px *57px 的PNG图片,经测试图片可以不放在网站根目录下~
另外据说用 apple-touch-icon 并不能解决 android 下默认浏览器的问题(android下需要先添加书签,然后再编辑书签添加到桌面),用自己的破手机测试却没有发现问题……
不过找到了另一个 rel 属性 apple-touch-icon-precomposed,google 到两个的区别就是是否对图标进行二次处理,apple-touch-icon-precomposed 表示的是采用设计原图标,apple-touch-icon 会给图标
智能手机Web开发笔记的更多相关文章
- Java Web开发笔记
问题: 读取资源文件问题 servletContext.getRealPath() servletContext.getResouce().getPath() setvletContext.getRe ...
- Web开发笔记 #07# Swagger Editor
Swagger Editor是一款可以用yaml格式进行RESTful API设计.可视化.测试的工具,并且能够实时看到自动生成的文档.效果大概是这样的↓ 根据官方网站介绍,如果是团队的话,建议用在线 ...
- Web开发笔记 #06# 前后端分离
前后端分离 关于“前后端分离”的深入讨论: 如何正确理解前后端分离? Web 前后端分离的意义大吗? 在上面有看到有谈“国外it公司分工”的回答,感觉挺有意思的.大概是讲国外it公司并不分前后端,只分 ...
- .NET Web开发笔记
HttpWebRequest HttpWebRequest默认关闭Cookies,给其赋初始值以打开Cookies读写 myRequest.CookieContainer = new CookieCo ...
- html5移动web开发笔记(一)Web 存储
localStorage - 没有时间限制的数据存储 localStorage 方法 localStorage 方法存储的数据没有时间限制.第二天.第二周或下一年之后,数据依然可用. 用户访问页面的次 ...
- html5移动web开发笔记
width指定虚拟窗口的屏幕宽度大小. height指定虚拟窗口的屏幕高度大小. initial-scale 指定初始缩放比例. maximum-scale指定允许用户缩放的最大比例. minimum ...
- 移动端Web开发笔记
最近写的一个移动端项目:上海 地铁指路通,之间遇到的一些问题,记录下来(以后会不断补充的): 1. 丰富的页面Meta: 1.1: 控制显示区域各种属性: <meta content=" ...
- Web开发笔记
jquery ui draggable clone之后不会克隆draggable功能,要重新设置
- Web开发笔记 #08# Jackson组合多个对象的属性构成JSON(以及添加自定义属性)
参考文档:https://github.com/FasterXML/jackson-databind 关于ObjectMapper的线程安全 截自官方文档: 组合多个对象的属性构成JSON(以及添加自 ...
随机推荐
- XAML基础
1.标记扩展 将一个对象的属性值依赖在其他其他对象的某个属性上 用法:标记属性的一般用法是:Attribute = Value,使用标记拓展,Value字符串是由一对花括号及其括起来的内容组成,XAM ...
- Ubuntu Install Chrome Brwoser
在ubuntu下安装chrome浏览器,可以直接从官网下载:http://www.google.cn/intl/zh-CN/chrome/browser/thankyou.html?platform= ...
- Oracle VM VirtualBox 虚拟机与主机共享文件
安装增强功能(参考文档) VirtualBox自带了一个增强工具Sun VirtualBox Guest Additions,这是实现虚拟机与真实主机共享的关键.启动虚拟机后,点击控制菜单“设备”→“ ...
- ubuntu12.04开启远程桌面
我们共享所使用的协议是rdp,所以我们要装这个东西. sudo apt-get install xrdp sudo apt-get install vnc4server tightvncserver ...
- 表单美化-原生javascript和jQuery下拉列表(兼容IE6)
效果: 思想:用其他标签配合脚本和隐藏的input并通过传值模拟表单元素中的select <!DOCTYPE HTML> <html lang="en-US"&g ...
- iOS - Swift Struct 结构体
1.Struct 的创建 1.1 基本定义 结构体的定义 // 定义结构体数据类型 struct BookInfo { // 每个属性变量都必须初始化 var ID:Int = 0 var Name: ...
- Python学习(12)日期和时间
目录 Python 日期和时间 时间元组 获取当前时间 获取格式化时间 格式化日历 获取某月日历 Time模块 日历模块 其他相关模块和函数 Python 日期和时间 Python 程序能用很多方式处 ...
- Python SSH登陆--pexpect,pxssh
from pexpect import pxssh host = '192.168.80.139'user = 'allen'password = 'allen'command = 'df -h' d ...
- Java Date,long,String 日期转换
1.java.util.Date类型转换成long类型java.util.Date dt = new Date();System.out.println(dt.toString()); //java. ...
- 在Eclipse中设置Java类上面的注释(包含作者、日期等)
希望在Eclipse中,让Java类上面的注释像下面这样,改如何设置呢? 在Eclipse中,点击菜单中的Window-->Preferences,打开如下窗口: