在智能手机横行的时代,作为一个web前端,不会编写移动web界面,的确是件悲催的事情。当公司准备做一个微信的微网站时,作为一个多年经验的web前端码农,我迷茫了,真心不知道从何下手。
接下来就是搜一堆教程,然后开始编写代码,三天后,我的第一个移动端web页面编写完成。
回头想想,移动端的web页面代码编写远没有我想的那样复杂(可能是我做的这个项目比较简单的缘故)。但是就入门来说,其实是蛮简单的,我把他总结为一下几个方面:特殊的meta标签/百分百比布局宽度/rem设置字体大小/css3的使用。
好吧,让我们开始吧,以下是移动web新手的浅见,老鸟请绕行,如有赐教不胜感激。
1.特殊的meta标签;
因为现在我们用的智能手机(iOS,Android)的浏览器都是基于webkit内核,这里有一些针对webkit的特殊meta标签,在开发移动端web是起到很重要的作用:
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏幕放大浏览;
<meta content="yes" name="apple-mobile-web-app-capable" />
复制代码
iphone设备中的safari私有meta标签,它表示:允许全屏模式浏览;
<meta content="black" name="apple-mobile-web-app-status-bar-style" />
复制代码
iphone的私有标签,它指定的iphone中safari顶端的状态条的样式;
- <meta content="telephone=no" name="format-detection" />
复制代码
告诉设备忽略将页面中的数字识别为电话号码。
- <meta content="email=no" name="format-detection" />
复制代码
Android中禁止自动识别页面中的邮件地址,iOS中不会自动识别邮件地址;
(注:由于webkit的浏览器对于html5的支持比较好,所以我们在声明头部的时候最好用html5的声明方式。当然如果你习惯了html4,那我只能告诉你,还是先学学html5在接着看吧!)
2.百分百布局;
拿到设计师的640px(以iPhone4的比例做的设计稿)的设计稿后,我就严格的按照设计稿设置了各个模块的高度/字号。接下来悲催的事情发生了,写出来的页面在手机上显示的异常大。我傻了,这是嘛情况!后来咨询专业人士才了解到,虽然iphone4的分辨率是960x640px,但是其屏幕的像素密度比较高,它的实际大小应该是减半的。所以在写代码时一切的高度/字号都要是设计稿的1/2。接着说百分比布局:
在做移动web页面时,我们要用百分比布局来实现自适应屏幕宽度。有pc端web页面开发经验的同学就会知道,元素的盒子模型(不清楚的同学可以去w3school上查查)。
那我想要一个元素100%显示,又必须有一个固定的padding-left/padding-right,还有1px的边框,怎么办?
- element{
- width: 100%;
- padding-left: 10px;
- border: 1px solid blue;
- }
复制代码
这样编写代码必然导致出现横向滚动条,肿么办?要相信问题就是用来解决的。这时候伟大的css3为我们提供了box-sizing属性,对于这个属性的具体解释不做赘述(想深入了解的同学可以到w3school查看,要知道自己动手会更容易记忆)。让我们看看如何解决上面的问题:
- element{
- width: 100%;
- padding-left: 10px;
- box-sizing:border-box;
- -webkit-box-sizing:border-box;
- border: 1px solid blue;
- }
复制代码
好的,问题被解决了!
3. rem设置字体大小;
在这里让我们花一些梳理一下css中的单位:px/em/rem(以下内容摘自
0101后花园)
px:就是css中最基本的长度单位了,用px做单位基本上没什么问题,可以做到让页面按套路精确的展现。但是,(听到但是的时候是不是突然有些不适,就像每次开发的同学喊我的时候,我的潜意识会告诉自己,坏了又出bug了!!)如果全篇用px布局会暗藏一个问题,就是当用户和Ctrl滚页面的时候(说白了就是ctrl+,ctrl-),你会发现页面结构产生了不可预知的错乱,因此有砖家倡导使用em替代px。
em:em是相对单位,em相对的基准点就是浏览器的字体大小(浏览器默认字体为16px),所以1em默认等于16px。那么14px=0.875em; 公式是14/16=0.875em。用em来写的话,就可以解决ctrl+,ctrl-时造成的页面错乱问题。
可是,问题又来了,em准确的说是相对于父节点的字号来计算的,如果自身定义了字号那么就相对自身字号来计算,举例如下:
- html { font-size: 100%; }
- .box-0 {
- height: 1em; /* 此时height等于16px */
- }
- .box-1 {
- font-size: 0.625em; /* 此时基准字号以变更为16*0.625=10px */
- height: 1em; /* 此时实际height等于10px */
- }
复制代码
看明白了吧,1em并不是一个固定不变的值,再加上数学是体育老师教的,这不是自作孽吗。没关系,css3为我们引入一个新的单位就是rem可以解决这个问题。
rem:rem和em一样也是一个相对单位,为了方便理解,我们就理解rem为root em,顾名思义rem只相对跟节点<html>计算,这就是说只要在根节点设定好参考值,那么全篇的1rem都相等,计算方式同em,默认1rem=16px; 同理你可以设定html { font-size:62.5% } 那么1rem就等于10px,以此类推 …(当然万恶的ie678不支持rem,但是还好我们在做的是移动端web页面)
4.使用css3;
做这种高大上的移动web页面怎么能少的了css3。不过平时css3用的比较少,这里记下几个我在这个项目中用到的css3属性。更深入的亲们自己去学咯。同样,这里不对属性做赘述,放着强大的w3school不用,我只能对你说:药不能停啊!:
A.圆角(这个太常用了)
- element{
- border: 1px solid blue;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- }
复制代码
B.渐变(这个在做按钮的时候很常用)
- element{
- background-image: -moz-linear-gradient(top, #2288cc, #389de2); /* Firefox */
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #389de2), color-stop(1, #2288cc)); /* Saf4+, Chrome */
- }
复制代码
C.去掉手持设备点击时出现的透明层 (一般会在头部做格式化)
- a,button,input{
- -webkit-tap-highlight-color: rgba(0,0,0,0);
- -webkit-tap-highlight-color: transparent; /* For some Androids */
- }
复制代码
在应用了此属性时,链接的active属性会实效,解决的方法是,在页面unload时运行document.addEventListener("touchstart", function(){}, true);使active状态可用。(注:在小米系统下,点击链接仍然会出现红色的边框,各位同学如有解决方法,请赐教,不胜感激。)
D.改变盒子模型(上面已讲过)
- element{
- box-sizing:border-box;
- -webkit-box-sizing:border-box;
- }
复制代码
5.关于调试;
好了,有了上面的知识,我们就可以写一个移动的页面了。但不要太乐观了,我们要怎么调试呢?难道每写一个页面就发一次服务器,然后用手机访问测试环境!当然不需要那么麻烦,如果是用pc机的同学,可以用一个本地localhost工具调试(这次就不要各位自己动手了,附送上我自己用的工具。用法很简单,把所有的页面放到一个文件夹中,页面放在根目录下,工具也放在跟目录下,把你要调试的页面改成index.html。当然如果你有好几个页面,最好还是做一个index页面。启动调试器,用手机访问你电脑的ip,要保证手机所用的wifi和pc的网络在一个网段)。用mac的同学就到网上找一篇localhost的配置方法,开启以下这个功能就可以访问了。
6 移动端开发和pc端开发的异同
6.1 性能差异
这是最显著的一个差异。对移动开发影响最大的,就是性能问题,特别是功耗和流畅性问题。
6.2 操控方式
与PC机普遍采用鼠标操控不同,移动设备普遍采用触控技术,操控方式的不同,在页面交互的时候就要利用好触控的事件增加用户体验。
6.3 屏幕尺寸
移动设备的屏幕尺寸 一般比较小,而且分辨率多种多样。这样就需要在页面展示上面做好兼容。同时要注意点击区域的大小,尺寸过小的按键以及毫无间隔空间的布局极易引发误操作。
6.4 交互方式
为了移动设备屏幕的屏幕尺寸的限制,为了给用户提供更大的阅读空间和沉浸式的体验,越来越多的应用采用抽屉式导航,推崇“隐藏的艺术” 。
6.5 流量
移动客户端本身的特性,决定了用户比较关注流量的消耗。 所以在页面布局和制作上,要尽量精简,加快页面加载速度,优化用户体验。
7 移动端开发要注意的技巧
7.1 保持一个简单的布局
屏弃冗余的结构,保持页面的简单干净,内容一目了然。
见例子:vsco.co/
7.2 使用Medial Queries
简单的说Medial Queries是一个媒体查询,可以根据设置的尺寸,查询出适配的样式。好处就是可以根据用户的使用设备的当前宽度,让Web页面加载一个备用的样式,实现特定的页面风格。
@media screen and (max-width:300px) { /*Tiny styles*/ }
@media screen and (max-width: 600px) { /*small styles*/ }
@media screen and (max-width:900) { /*big styles*/ }

7.3 定义断点
定义断点,那么断点是什么?简单的描述就是,设备宽度的临界点, 那么在移动开发设计中,常见的断点有六种,
我们今后的Medial Queries条件判断就可以根据这几个断点来定。
(1). 第一个断点群体就是针对于智能手机设置,他的宽度是小于480px;
(2). 第二个断点是高智能移动设备,比如说Ipads设备,他的宽度是小于768px;
(3). 添加一个小于320px的断点,针对于小型的移动设备;
(4). 还可以添加适用于平板设备的断点,大于768px,小于1024px。
7.4让你的布局更灵活
页面设计可以适当地使用流体布局(也就是大家常说的自适应布局、液体布局、百分比布局)最适合各种类弄屏幕大小,结合正确的medial Queries,你可以制作出适应于任何可能出现的设备页面布局。
7.5图片的自适应
一张图片,有什么方法可以让他在不同的设备上显示能根据屏幕大小自适应?
处理这种效果有一个方法,如果你的web页面不会受到带宽的影响(不考虑性 能),你可以先制作一图片让其适合最大屏幕,然后通过样式来控制不同设备下显示的大小;另外一种办法就是你可以为每个断点准备不同的图片。
7.6检查你的viewport
玩过移动端的同学可能都知道,许多移动端的浏览器模拟了桌面PC机下浏览器,
你的web页面在移动端的浏览器浏览时,整个页面会直接压缩显示在一个屏幕下。
Viewport:可视区域
Width:viewport的宽度,取值device-width
Initial-scale:初始缩放比例,取值1.0
Minimum-scale:允许用户缩放最小比例,取值1.0
Maximum-scale:允许用户放大最大比例,取值1.0
User-scalable:是否允许用户缩放
MobileOptimized浏览器不会自动调整文件大小,无法拉伸缩放
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
<meta name=“format-detection” content=“telephone=no”>
<meta name="format-detection" content="email=no">
<meta name="format-detection" content="address=no">
8 移动端涉及的前端技术
8.1 html5
语义更好,设备兼容特性更好,支持网页端的Audio、Video等多媒体功能, 能通过简单的代码实现更炫的效果,可以进行跨平台的使用,等等……
8.2 css3
强大的层叠样式表加强版,能通过简单的代码实现圆角,阴影,颜色渐变等等效果,减少图片的应用,增加用户体验。
8.3 js
Zepto.js。移动页面中的jquery,轻量级的手机js框架,Gzip压缩后9.7k,能完成各种dom结构操作,ajax请求,触屏事件,等等。
8.4 响应式布局搭建利器
foundation ,Ink,grumby,Maxmertkit,Bootstrap等等
利用这些利器,能够快速搭建适应各种屏幕分辨率的自适应布局。
4.5测试工具
远程调试工具weinre
www.(csdn放太多网址竟然保存不了,晕死,www.开头)
npmjs.org/package/weinre(csdn放太多网址竟然保存不了,晕死,www.开头)
五.移动端的兼容和处理
总结了一些:
1.分辨率兼容(包括布局,断点设置)
2.图片兼容(主要体现在页面设计和css处理)
3.导航的设置