STAY HUNGRY , STAY FOOLISH.

求知若饥,虚心若愚。

       浏览:

移动端Web之经验总结

最近一直在负责公司微信端的重构,在此期间遇到了颇多问题,遇到问题不要怕,总会有解决的办法。


一.移动端和PC端的区别

看了网上很多资料,但和我想表达的东西有些不同,说下我自己的理解。
PC端的前端,负责的是用PC浏览器打开的网页
PC浏览器因为软件的不同也会有些差异,常见的有Safari、Chrome、Firefox、IE(IE6-IE8、IE9以上)。

移动端的前端,负责的是用手机打开的网页。相信大家应该注意到了,写的是用手机打开的网页,而非手机浏览器打开的网页。为什么这样讲呢?因为手机App里面也有前端做的页面,如微信。

移动端和PC端的区别有很多,但我认为它们之间最大的区别就是设备
从不同的设备出发,可以分析出很多问题:

1.手机与PC硬件不同

PC的GPU与手机的GPU的处理能力差异较大,看下面的截图:

"GPU"

拥有相同架构的GPU处理器,在移动端的GPU与PC的GPU相比,手机处理能力只有电脑处理能力的十分之一。
GPU的处理能力关前端什么事情?这关系大大的有,因为浏览器的主要结构里面有个“渲染引擎”,该结构需要硬件GPU的大力支持,请看下面的截图:

"渲染引擎"

该截图出自我之前写过的文章**《浏览器内部工作原理》**,有兴趣的朋友可以看看。

再来看一个东西,2016年6月起最近六个月在国内浏览器市场份额与移动设备市场份额的情况:

"浏览器市场份额"

"移动设备市场份额"


2.手机尺寸大小不同

不同的手机,不同的品牌手机的尺寸都会有些许不同,前端使用HTML、CSS、JS需要对其进行适配和布局。一套代码,适应多个终端,因此会涉及到布局和排版等问题。还有就是UI给的设计图只是针对具体的一个手机定做的,因此在不同大小的手机上访问同一个页面效果肯定会有不同,这就需要UI和前端一起来协商解决。
手机大小的不同导致的问题一般是CSS样式,如位置、宽度、高度、字体样式、大小等。
最近做的页面效果,相同的页面,一个在IPhoneSE的效果,另一个在魅蓝note2的效果。

"IPhoneSE"


"魅蓝Note2"


3.手机系统不同

现在主流的手机系统不外乎就是IOS和Android,手机系统导致的问题是API支不支持的问题,比如webgl相关API在IOS上支持,在Android上不支持,又比如webp相关API在Android上支持,在IOS上不支持。

"WebGL"

"WebP"


4.手机浏览器版本不同

即使在相同的系统里面,尤其是Android上,也会出现样式的紊乱,导致的问题是API支不支持的问题,比如display:flex属性在Android4.3以下版本部分支持。

"Flex"


5.手机浏览器自带样式及属性

不同浏览器都有自己不同是默认样式,比如在Safari中默认有一些自带样式,即使你对该样式赋值了其他样式,它也没有改变,如下图:

"确认按钮"

注意看右下角的确认按钮,我用CSS进行了样式修改,但还是无效,还是会把原来Safari默认的按钮样式带了进来,这时需要用到一个CSS属性:-webkit-appearance来解决该问题。这只是举例,还有其他的东西都会在后面讲到。


二.移动端经验总结

第一章节讲解了PC和移动端的区别及移动端的各种问题,遇到这些问题,肯定会有解决的方法的,下面听我一一到来。

1
2
3
4
5
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
/*1.去除系统默认appearance的样式,常用于IOS下移除原生样式*/
input{
-webkit-appearance: none
}
/*2.禁止选择文本*/
p, div, h1, h2, h3, h4, h5, h6{
-webkit-user-select: none
}
/*3.禁止文本缩放*/
p, div, h1, h2, h3, h4, h5, h6{
-webkit-text-size-adjust: none
}
/*4.取消长按div出现灰色蒙层*/
div{
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
/*5.禁止图片保存*/
img{
-webkit-touch-callout: none
}
/*6.取消行内、行内块级元素之间产生的间距*/
.parent{
font-size: 0
}
.child{
font-size:16px;
}

/*7.使用PC Chrome打开响应式制作页面时,发现chrome<12px字体无效,进入chrome://settings/fonts设置即可*/

/*8.待续*/