移动端开发总结
移动端开发总结
1:meta基础知识
PC端meta
页面描述
<meta name="description" content="页面描述不超过150个字符" />
页面关键词
<meta name="keyowords" content="关键词,html5,css3" />
页面日期
<meta name="build" content="2016.05.10" />
页面作者
<meta name="author" content="张艳兵" />
页面版权
<meta name="copyright" content="zyb" />
页面检索
<meta name="Robots" content="all|none|index|noindex|follow|nofollow" />
all:文件将被检索,且页面上的链接可以被查询
none:文件不被检索,且页面上的链接不可以被查询
index:文件将被检索
noindex:文件不被检索,但页面上的链接可以被查询
follow:页面上的链接可以被查询
nofollow:文件不被检索,但页面上的链接可以被查询
页面重访
<meta name="revisit-after" content="7 days" />
页面缓冲
<meta name="no-cache" content="Cache-Control" />
移动端meta
H5页面自动调整到设备宽度,并禁止用户缩放页面
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
忽略将页面中的数字识别为电话号码
<meta name="format-detection" content="telephone=no" />
忽略Android平台中对邮箱地址的识别
<meta name="format-detaction" content="email=no" />
将网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对ios的safari;是否启用 WebApp 全屏模式
<meta name="apple-mobile-web-app-capable" content="yes">
将网站添加到主屏幕快速启动方式,仅针对ios的safari顶端状态条的,样式可选default、black、black-translucent
<meta name="apple-mobile-web-app-status-bar-style" content="black">
UC默认竖屏 ,UC强制全屏
<meta name="full-screen" content="yes"/>
<meta name="browsermode" content="application"/>
QQ强制竖屏 QQ强制全屏
<meta name="x5-orientation" content="portrait"/>
<meta name="x5-fullscreen" content="true"/>
<meta name="x5-page-mode" content="app"/>
Windows 8 磁贴颜色
<meta name="msapplication-TileColor" content="#000"/>
Windows 8 磁贴图标
<meta name="msapplication-TileImage" content="icon.png"/>
winphone系统a、input标签被点击时产生的半透明灰色背景怎么去掉
<meta name="msapplication-tap-highlight" content="no">
2:link基础知识
添加 facicon icon
<link rel="shortcut icon" type="image/ico" href="/favicon.ico" />
IOS图标
使用apple-touch-icon属性为“增加高光光亮的图标”
使用apple-touch-icon-precomposed属性为“设计原图图标”
apple-touch-icon-precomposed 禁止系统自动添加效果,直接显示设计原图。
iPhone和iTouch,默认57x57像素,必须有
<meta rel="apple-touch-icon-precomposed" href="/apple-touch-icon-57x57-precomposed.png" />
iPad,72x72 像素,可以没有,但推荐有
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="/apple-touch-icon-72x72-precomposed.png" />
Retina iPhone 和 Retina iTouch,114x114 像素,可以没有,但推荐有
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="/apple-touch-icon-114x114-precomposed.png" />
Retina iPad,144x144 像素,可以没有,但推荐有
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144x144-precomposed.png" />
IOS启动画面
iPad 的启动画面是不包括状态栏区域的
iPad 竖屏 768 x 1004(标准分辨率)
<link rel="apple-touch-startup-image" sizes="768x1004" href="/splash-screen-768x1004.png" />
iPad 竖屏 1536x2008(Retina)
<link rel="apple-touch-startup-image" sizes="1536x2008" href="/splash-screen-1536x2008.png" />
iPad 横屏 1024x748(标准分辨率)
<link rel="apple-touch-startup-image" sizes="1024x748" href="/Default-Portrait-1024x748.png" />
iPad 横屏 2048x1496(Retina)
<link rel="apple-touch-startup-image" sizes="2048x1496" href="/splash-screen-2048x1496.png" />
iPhone 和 iPod touch 的启动画面是包含状态栏区域的。
iPhone/iPod Touch 竖屏 320x480 (标准分辨率)
<link rel="apple-touch-startup-image" href="/splash-screen-320x480.png" />
iPhone/iPod Touch 竖屏 640x960 (Retina)
<link rel="apple-touch-startup-image" sizes="640x960" href="/splash-screen-640x960.png" />
iPhone 5/iPod Touch 5 竖屏 640x1136 (Retina)
<link rel="apple-touch-startup-image" sizes="640x1136" href="/splash-screen-640x1136.png" />
3:事件
touch事件
当用户手指放在移动设备在屏幕上滑动会触发的touch事件
webkit:
- touchstart——当手指触碰屏幕时候发生。不管当前有多少只手指
- touchmove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用event的preventDefault()可以阻止默认情况的发生:阻止页面滚动
- touchend——当手指离开屏幕时触发
- touchcancel——系统停止跟踪触摸时候会触发。例如在触摸过程中突然页面alert()一个提示框,此时会触发该事件,这个事件比较少用
winphone 8:
- MSPointerDown——当手指触碰屏幕时候发生。不管当前有多少只手指
- MSPointerMove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用css的html{-ms-touch-action: none;}可以阻止默认情况的发生:阻止页面滚动
- MSPointerUp——当手指离开屏幕时触发
click事件
移动端click屏幕产生200-300 ms的延迟响应,往往会造成按钮点击延迟甚至是点击失效。
2007年苹果发布首款iphone上IOS系统搭载的safari为了将适用于PC端上大屏幕的网页能比较好的展示在手机端上,使用了双击缩放(double tap to zoom)的方案,比如你在手机上用浏览器打开一个PC上的网页,你可能在看到页面内容虽然可以撑满整个屏幕,但是字体、图片都很小看不清,此时可以快速双击屏幕上的某一部分,你就能看清该部分放大后的内容,再次双击后能回到原始状态。
双击缩放是指用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例。
原因就出在浏览器需要如何判断快速点击上,当用户在屏幕上单击某一个元素时候,例如跳转链接<a href="#"></a>,此处浏览器会先捕获该次单击,但浏览器不能决定用户是单纯要点击链接还是要双击该部分区域进行缩放操作,所以,捕获第一次单击后,浏览器会先Hold一段时间t,如果在t时间区间里用户未进行下一次点击,则浏览器会做单击跳转链接的处理,如果t时间里用户进行了第二次单击操作,则浏览器会禁止跳转,转而进行对该部分区域页面的缩放操作。那么这个时间区间t有多少呢?在IOS safari下,大概为300毫秒。这就是延迟的由来。造成的后果用户纯粹单击页面,页面需要过一段时间才响应,给用户慢体验感觉,对于web开发者来说是,页面js捕获click事件的回调函数处理,需要300ms后才生效,也就间接导致影响其他业务逻辑的处理。
解决方案:
- fastclick可以解决在手机上点击事件的300ms延迟
- zepto的touch模块,tap事件也是为了解决在click的延迟问题
触摸事件的响应顺序:
- ontouchstart
- ontouchmove
- ontouchend
- onclick
4:Retina显示屏
Retina:一种具备超高像素密度的液晶屏,同样大小的屏幕上显示的像素点由1个变为多个,如在同样带下的屏幕上,苹果设备的retina显示屏中,像素点1个变为4个。
在高清显示屏中的位图被放大,图片会变得模糊,因此移动端的视觉稿通常会设计为传统PC的2倍
设计稿切出来的图片长宽保证为偶数,并使用backgroud-size把图片缩小为原来的1/2
例如图片宽高为:200px*200px,那么写法如下:
.css{width:100px;height:100px;background-size:100px 100px;}其它元素的取值为原来的1/2,例如视觉稿40px的字体,使用样式的写法为20px
5:常见问题
1:移动端字体:
中文字体使用系统默认即可,英文用Helvetica
body{font-family:Helvetica}
字体单位,如果只是适配手机,用px就行,如果适配多终端,使用rem
2:IOS系统中元素被触摸时产生的半透明灰色遮罩怎么去掉
设置-webkit-tap-highlight-color的alpha值为0,也就是属性值的最后一位设置为0就可以去除半透明灰色遮罩
a,button,input,textarea{-webkit-tap-highlight-color: rgba(0,0,0,0;)}
3:部分android系统中元素被点击时产生的边框怎么去掉
设置-webkit-tap-highlight-color的alpha值为0,也就是属性值的最后一位设置为0就可以去除半透明灰色遮罩
a,button,input,textarea{
-webkit-tap-highlight-color: rgba(0,0,0,0;)
-webkit-user-modify:read-write-plaintext-only;
}
4:webkit表单元素的默认外观怎么重置
.css{-webkit-appearance:none;}
5:webkit表单输入框placeholder的颜色值能改变么
input::-webkit-input-placeholder{color:#AAAAAA;}
input:focus::-webkit-input-placeholder{color:#EEEEEE;}
6:webkit表单input输入框placeholder的文字能换行么
ios可以,android不行
7:webkit表单textarea输入框placeholder的文字能换行么
ios,android都可以
8:禁止ios和android用户选中文字
.css{-webkit-user-select:none}
9:禁止ios 长按时不触发系统的菜单,禁止ios&android长按时下载图片
.css{-webkit-touch-callout: none}
10:打电话发短信的怎么实现
<p>
<a href="tel:18601341234">打电话给:18601341234</a>
</p>
<p>发短信,winphone系统无效</p>
<p>
<a href="sms:10086">发短信给: 10086</a>
</p>
发短信,winphone系统无效
11:模拟按钮hover效果
移动端触摸按钮的效果,可明示用户有些事情正要发生,是一个比较好体验,但是移动设备中并没有鼠标指针,使用css的hover并不能满足我们的需求,以下示例兼容性ios5+、部分android 4+、winphone 8
html:
<div class="btn-blue">按钮</div>
css:
a{
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
.btn-blue{
display:block;
height:42px;
line-height:42px;
text-align:center;
border-radius:4px;
font-size:18px;
color:#FFFFFF;
background-color: #4185F3;
}
.btn-blue:active{
background-color: #357AE8;
}
要做到全兼容的办法,可通过绑定ontouchstart和ontouchend来控制按钮的类名:
html:
<div class="btn-blue">按钮</div>
css:
a{
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
.btn-blue{
display:block;
height:42px;
line-height:42px;
text-align:center;
border-radius:4px;
font-size:18px;
color:#FFFFFF;
background-color: #4185F3;
}
.btn-blue:active{
background-color: #357AE8;
}
js:
<script type="text/javascript">
var btnBlue = document.querySelector(".btn-blue");
btnBlue.ontouchstart = function(){
this.className = "btn-blue btn-blue-on"
}
btnBlue.ontouchend = function(){
this.className = "btn-blue"
}
</script>