移动端web开发技巧汇总【大神进阶之路】

本文介绍了一系列针对移动端Web开发的最佳实践,包括如何优化用户体验、解决常见问题、调整布局以适应不同设备,以及提升页面加载速度等。
META相关

1. 添加到主屏后的标题(IOS)
1
<meta name="apple-mobile-web-app-title" content=""> 


2. 启用 WebApp 全屏模式(IOS)

1
2
<meta name="apple-mobile-web-app-capable" content="yes" /> 
<meta name="apple-touch-fullscreen" content="yes" /> 


3. 百度禁止转码
通过百度手机打开网页时,百度可能会对你的网页进行转码,往你页面贴上它的广告,非常之恶心。不过我们可以通过这个meta标签来禁止它:
1
<meta http-equiv="Cache-Control" content="no-siteapp" />


4. 设置状态栏的背景颜色(IOS)

设置状态栏的背景颜色,只有在 "apple-mobile-web-app-capable" content="yes" 时生效

1
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> 


default :状态栏背景是白色。
black :状态栏背景是黑色。
black-translucent :状态栏背景是半透明。 如果设置为 default 或 black ,网页内容从状态栏底部开始。 如果设置为 black-translucent ,网页内容充满整个屏幕,顶部会被状态栏遮挡。

5. 移动端手机号码识别(IOS)

在 iOS Safari (其他浏览器和Android均不会)上会对那些看起来像是电话号码的数字处理为电话链接,比如:
7位数字,形如:1234567
带括号及加号的数字,形如:(+86)123456789
双连接线的数字,形如:00-00-00111
11位数字,形如:13800138000
可能还有其他类型的数字也会被识别。我们可以通过如下的meta来关闭电话号码的自动识别:
1
<meta name="format-detection" content="telephone=no" />


6.开启短信功能:
1
<a href="sms:123456">123456</a> 


7. 移动端邮箱识别(Android)

与电话号码的识别一样,在安卓上会对符合邮箱格式的字符串进行识别,我们可以通过如下的meta来管别邮箱的自动识别:
1
<meta content="email=no" name="format-detection" /> 


同样地,我们也可以通过标签属性来开启长按邮箱地址弹出邮件发送的功能:
1
<a mailto:dooyoe@gmail.com">dooyoe@gmail.com</a>


8. 优先使用最新版本 IE 和 Chrome
1
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 

9.viewport模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<title></title>
<link rel="stylesheet" href="index.css">
</head>
<body>
</body>
</html>


三大手机系统的字体:
    ios 系统
        默认中文字体是Heiti SC
        默认英文字体是Helvetica
        默认数字字体是HelveticaNeue
        无微软雅黑字体        

    android 系统
        默认中文字体是Droidsansfallback
        默认英文和数字字体是Droid Sans
        无微软雅黑字体

   winphone 系统
默认中文字体是Dengxian(方正等线体)
默认英文和数字字体是Segoe
无微软雅黑字体
各个手机系统有自己的默认字体,且都不支持微软雅黑
如无特殊需求,手机端无需定义中文字体,使用系统默认
英文字体和数字字体可使用 Helvetica ,三种系统都支持

2、移动端字体单位font-size选择px还是rem
对于只需要适配手机设备,使用px即可
对于需要适配各种移动设备,使用rem,例如只需要适配iPhone和iPad等分辨率差别比较挺大的设备
rem配置参考:
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
}
@media screen and (min-width:640px) and (max-width:719px) {
    html {
        font-size: 20px
    }
}
@media screen and (min-width:720px) and (max-width:749px) {
    html {
        font-size: 22.5px
    }
}
@media screen and (min-width:750px) and (max-width:799px) {
    html {
        font-size: 23.5px
    }
}
@media screen and (min-width:800px) and (max-width:959px) {
    html {
        font-size: 25px
    }
}
@media screen and (min-width:960px) and (max-width:1079px) {
    html {
        font-size: 30px
    }
}
@media screen and (min-width:1080px) {
    html {
        font-size: 32px
    }
}


3、移动端touch事件(区分webkit 和 winphone)
当用户手指放在移动设备在屏幕上滑动会触发的touch事件
以下支持webkit
touchstart——当手指触碰屏幕时候发生。不管当前有多少只手指
touchmove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用event的preventDefault()可以阻止默认情况的发生:阻止页面滚动
touchend——当手指离开屏幕时触发
touchcancel——系统停止跟踪触摸时候会触发。例如在触摸过程中突然页面alert()一个提示框,此时会触发该事件,这个事件比较少用
以下支持winphone 8
MSPointerDown——当手指触碰屏幕时候发生。不管当前有多少只手指
MSPointerMove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用css的html{-ms-touch-action: none;}可以阻止默认情况的发生:阻止页面滚动
MSPointerUp——当手指离开屏幕时触发

4、移动端click屏幕产生200-300 ms的延迟响应
移动设备上的web网页是有300ms延迟的,玩玩会造成按钮点击延迟甚至是点击失效。

解决延迟方案:
fastclick可以解决在手机上点击事件的300ms延迟
zepto的touch模块,tap事件也是为了解决在click的延迟问题
触摸事件的响应顺序
1、ontouchstart 
2、ontouchmove 
3、ontouchend 
4、onclick
解决300ms延迟的问题,也可以通过绑定ontouchstart事件,加快对事件的响应

在高清显示屏中的位图被放大,图片会变得模糊,因此移动端的视觉稿通常会设计为传统PC的2倍
那么,前端的应对方案是:
设计稿切出来的图片长宽保证为偶数,并使用backgroud-size把图片缩小为原来的1/2
其它元素的取值为原来的1/2,例如视觉稿40px的字体,使用样式的写法为20px

6、ios系统中元素被触摸时产生的半透明灰色遮罩怎么去掉
ios用户点击一个链接,会出现一个半透明灰色遮罩, 如果想要禁用,可设置-webkit-tap-highlight-color的alpha值为0,也就是属性值的最后一位设置为0就可以去除半透明灰色遮罩
1
a,button,input,textarea{-webkit-tap-highlight-color: rgba(0,0,0,0)}


7、部分android系统中元素被点击时产生的边框怎么去掉
android用户点击一个链接,会出现一个边框或者半透明灰色遮罩, 不同生产商定义出来额效果不一样,可设置-webkit-tap-highlight-color的alpha值为0去除部分机器自带的效果
1
2
3
4
a,button,input,textarea{
    -webkit-tap-highlight-color: rgba(0,0,0,0)
    -webkit-user-modify:read-write-plaintext-only; 
}

-webkit-user-modify有个副作用,就是输入法不再能够输入多个字符
另外,有些机型去除不了,如小米2
对于按钮类还有个办法,不使用a或者input标签,直接用div标签

8、winphone系统a、input标签被点击时产生的半透明灰色背景怎么去掉
1
<meta name="msapplication-tap-highlight" content="no">


9、webkit表单元素的默认外观怎么重置
1
.css{-webkit-appearance:none;}


10、webkit表单输入框placeholder的颜色值能改变么
1
2
input::-webkit-input-placeholder{color:#AAAAAA;}
input:focus::-webkit-input-placeholder{color:#EEEEEE;}


11、webkit表单输入框placeholder的文字能换行么
ios可以,android不行~

14. 禁止文本缩放
当移动设备横竖屏切换时,文本的大小会重新计算,进行相应的缩放,当我们不需要这种情况时,可以选择禁止:
1
2
3
html {
        -webkit-text-size-adjust: 100%;
}

需要注意的是,PC端的该属性已经被移除,该属性在移动端要生效,必须设置 `meta viewport’。

15. 移动端如何清除输入框内阴影
在iOS上,输入框默认有内部阴影,但无法使用 box-shadow 来清除,如果不需要阴影,可以这样关闭:
1
2
3
4
5
input,
textarea {
border: 0; /* 1 */
-webkit-appearance: none; /* 2 */
}


17. 移动端禁止选中内容
如果你不想用户可以选中页面中的内容,那么你可以在css中禁掉:
1
2
3
4
5
6
.user-select-none {
  -webkit-user-select: none;  /* Chrome all / Safari all */
  -moz-user-select: none;     /* Firefox all  */
  -ms-user-select: none;      /* IE 10+ */      
}

18. 移动端取消touch高亮效果
在做移动端页面时,会发现所有a标签在触发点击时或者所有设置了伪类 :active 的元素,默认都会在激活状态时,显示高亮框,如果不想要这个高亮,那么你可以通过css以下方法来进行全局的禁止:
1
2
3
html {
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

但这个方法在三星的机子上无效,有一种妥协的方法是把页面非真实跳转链接的a标签换成其它标签,可以解决这个问题。

21.屏幕旋转的事件和样式
事件
window.orientation,取值:正负90表示横屏模式、0和180表现为竖屏模式;
1
2
3
4
5
6
7
8
9
10
11
window.onorientationchange = function(){
            switch(window.orientation){
                case -90:
                case 90:
                alert(":" + window.orientation);
                case 0:
                case 180:
                alert(":" + window.orientation);
                break;
            }
}

样式
//竖屏时使用的样式
1
2
3
4
@media all and (orientation:portrait) {
    .css{}
}

//横屏时使用的样式
1
2
3
4
@media all and (orientation:landscape) {
    .css{}
}

22.audio元素和video元素在ios和andriod中无法自动播放
应对方案:触屏即播
1
2
3
$('html').one('touchstart',function(){
    audio.play()
})


24.手机拍照和上传图片
1
2
3
4
5
<input type="file">accept 
<!--  -->
<input type=file accept="image/*">
<!--  -->
<input type=file accept="video/*">


ios 有拍照、录像、选取本地图片功能
部分android只有选取本地图片功能
winphone不支持
input控件默认外观丑陋

25. 消除transition闪屏
1
2
3
4
5
6
7
.css{
    /* 3D  3D*/
    -webkit-transform-style: preserve-3d;
    /**/
    -webkit-backface-visibility: hidden;
}

开启硬件加速
解决页面闪白
保证动画流畅
1
2
3
4
5
6
  .css {
     -webkit-transform: translate3d(0, 0, 0);
     -moz-transform: translate3d(0, 0, 0);
     -ms-transform: translate3d(0, 0, 0);
     transform: translate3d(0, 0, 0);
  }

设计高性能CSS3动画的几个要素
尽可能地使用合成属性transform和opacity来设计CSS3动画,
不使用position的left和top来定位
利用translate3D开启GPU加速

框架
1. 移动端基础框架
zepto.js 语法与jquery几乎一样,会jquery基本会zepto~
iscroll.js 解决页面不支持弹性滚动,不支持fixed引起的问题~ 实现下拉刷新,滑屏,缩放等功能~
underscore.js 该库提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象。
fastclick 加快移动端点击响应时间
animate.css CSS3动画效果库
Normalize.css Normalize.css是一种现代的、CSS reset为HTML5准备的优质替代方案
2. 滑屏框架
适合上下滑屏、左右滑屏等滑屏切换页面的效果
slip.js
iSlider.js
fullpage.js
swiper
3.瀑布流框架
masonry
工具推荐
caniuse 各浏览器支持html5属性查询
paletton 调色搭配
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值