不保证100%准确性,但是欢迎探讨。
" b! K& L4 T/ f4 m* g" g6 F+ f" K/ Q2 x; v, w- a* O
此文主要针对于没有移动端经验的前端设计师,所以会尽量写的浅显易懂简单粗暴,技术型的**座勿喷~~~
1 A; }9 [/ S3 X9 e以下讨论暂时不涉及响应式开发。
1 n: R0 D+ G* a# m; e" F5 `. W/ e8 j T$ }3 P9 B' k( W
伸手党以及没耐心的请直接下翻至懒人部分。
: Q; d; N8 [2 p% n
( n* W4 d: Q; ]1 u------------------------------------------------------我是华丽的分割线------------------------------------------------------------5 j7 d! \8 k' X0 g* s f
1 _$ C, w7 {) z, D9 ^9 d% r9 K前端或美工在设计时通常会在psd里设定美工稿的画布尺寸。以pc端的网站为例,美工的psd的设计稿的宽度通常为1002px或者1200px。设定这个宽度的原因很简单,因为对于大部分的pc端用户而言,1440*900是主流台式机的分辨率(1440是宽度),1366*768是主流的笔记本电脑分辨率(1366是宽度)。
e/ _- u3 J5 c3 _* t5 \那么psd即使是1200px的宽度,也不会在1440和1366的主流电脑上产生横向滚动条,并且网站居中后还会左右留白,视觉效果非常好。
c: M# ?# N6 y( _ E5 n% i& {0 ] X/ T. W4 V/ J
一句话总结,1002或者1200的psd宽度,将会在绝大部分的主流台式机和笔记本电脑上完美兼容。- g% }, M8 R- A8 Z
) Q! _* C( ?5 a
以上道理非常简单,相信大部分技术人员也都明白,那么接下来进行一个小小的扫盲,就是1200px的画布尺寸究竟在pc端是如何被解析的,单纯的是因为显示器大小不一样吗?还是显示器的分辨率不一样?其实都不是,根本原因是在于浏览器会对于你的画布尺寸进行二次解析,而pc端浏览器解析的其中一个重要依据就是你的显示器的分辨率,而显示器默认的分辨率通常又和你的显示器的尺寸大小有关。& H- ]2 X: |5 S* B# H
(显示器尺寸决定显示器默认分辨率,显示器分辨率决定浏览器解析像素)。
1 S; i( b' T) ]' F" \" }2 D
" D) [) o3 E* _( {0 Y) F那么理清了这个思路后我们可以得出一个结论,就是pc端的画布尺寸将会在浏览器根据你的显示器分辨率进行1:1的等比解析。
. T1 \& L; L: B+ N+ z! E' |; {! o1 G9 C6 Z$ | Q
; [2 U% A' `& `# L0 H- P( S-------------------------------------------------------我是华丽的分割线------------------------------------------------------2 m D. B/ i! y$ T
m: J. j/ ~8 b& B% }2 Z! ]3 E# m/ e& Z2 F. i$ z/ T, t
+ q) a4 ^7 a$ M3 I1 C废话说完理清思路之后,我们来说一说移动端。1 J$ [, m& q/ K3 s1 [' F
+ b9 @; y9 h* w! u& I- b7 ]. W8 S) }. p9 E1 K. J: X2 I
移动端和pc端的本质区别就是pc端的浏览器解析宽度是和web端的画布宽度进行1:1的解析的。 但是移动端却不是1:1解析的,具体这个比例是多少牵涉到移动端一个独有的参数:像素密度。
5 A- M5 K. V* Y( q7 z
! _, ]( v, ^1 _* K+ ?大家在买手机的时候都会看到这样一个英文单词:PPI ,这个单词相信很多人都见过,就是指的像素密度。( ^( N5 B% ^) _* W _
为防止概念过于抽象,我们仍旧举例说明,以iphone5的参数为例,ip5主屏分辨率:1136x640像素(640是宽度),主屏尺寸:4.0英寸,像素密度:320ppi。具体计算公式为:3 J! B+ U/ R& x1 s3 q" ]
# h# {* y, J9 O( @; a6 g
- `! ~/ q. O( i+ Z0 B9 \
. D. B* g! i7 h k. L! H: ?# h当像ppi为320ppi的时候移动端浏览器是如何解析宽度的呢?已经不是pc端1:1的等比解析了,而是1:2的比例解析(为什么是1:2随后再说)。1200像素宽度的画布将会在320ppi的手机上自动被放大2倍,成为2400像素的宽度。但是ip5的宽度却只有640而已,所以1200像素的画布将会在手机上出现巨长的滚动条。(请再次理清一个思路,这个像素或者分辨率是最后是通过浏览器进行二次解析的,所以手机上640的像素的实际宽度是不等同于pc端640的像素的实际宽度,两者都被各自平台的浏览器进行了二次解析,所以跨平台进行横向对比是没有意义的)。具体多少ppi会放大多少倍数的计算公式如下:) D9 V2 R7 o9 v4 d
5 W2 c$ N6 h4 O3 Q! y; H5 |
. h6 Q8 B) G% J2 O: S
: d4 j6 n0 C: W$ V以下是苹果常见机型和安卓旗舰机型: ) y' h0 {' k* d8 H) _1 T( d3 C
0 U( v4 m: s9 I1 G' i2 K
$ t! i- H( k$ [* g. M5 h: t0 c
大家可以比较明了的看出来,320的宽度乘以放大倍数之后基本正好等于主屏宽度或者略小于主屏宽度。
) {/ Z9 N9 s% w
c) K- V. ]# B5 o$ Z4 _在ios平台之上,苹果把ppi稳定在了326左右,同样也意味着苹果把手机端的放大倍数给稳定在了2倍上下,而这个326ppi就是苹果声称的“视网膜屏”。换句话说,开发者在ios平台进行开发的话,ios平台本身的规范性为开发者规避了很多兼容性的风险。4 Z1 A$ {# K* {# ~
而反之安卓呢?各种百花齐放,各种分辨率、各种ppi参差不齐,开发者想在安卓平台上面做到完美兼容?恐怕只有一个解决方案了:“呵呵~”
' l! d5 H7 ]: F+ J$ M" m* l以上只是从前端的一个小小的角度衡量ios和安卓平台在于开发者的本质区别,接下来我们进入正题。5 @, s2 z1 n8 I% _2 q1 }
8 Y5 j; v7 x4 ^/ ^
5 m. e6 o- P" w. h+ }5 \5 k- v- F. C/ B$ X. J. m) @ N
而反之安卓呢?各种百花齐放,各种分辨率、各种ppi参差不齐,开发者想在安卓平台上面做到完美兼容?恐怕只有一个解决方案了:“呵呵~”
+ k1 V2 R% ^0 h0 Z2 g以上只是从前端的一个小小的角度衡量ios和安卓平台在于开发者的本质区别,接下来我们进入正题。1 u) H1 A" ?+ l" n
6 [1 N. Z/ |" V! A0 M; T! P
: c/ A8 a5 J2 E
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓懒人直接看这里↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
; ?" o, X v. R
( }5 s& \* }2 z7 q% E1 t U, D+ ?: N( q( d1 K
有没有一种移动端的web前端尺寸能够比较简单粗暴的解决问题呢?其实还是有的,那就是大家看到了我上面的表格有写到“320像素”。这个320像素的尺寸一方面能够满足所有ios手机端的web展示,另一方面在安卓端展示时,被放大后虽然左右会有留白(针对于高ppi),但是整体来说不会影响大体的展示效果,不会出现滚动条等及其恶劣的影响用户体验的情况(至少我可以接收左右留白)。
! @9 L! p. h9 z3 L6 Q. X" y1 q/ ?9 s0 a0 g
一句话概括:320的宽度的画布在苹果手机上完美兼容;在安卓手机上大部分兼容,越是好的安卓手机,ppi越高,左右留白可能越多。$ ?8 m' `* j! \6 I! w; N9 Y' @4 Q7 j
9 {$ g% {/ \1 p) ~. D
320宽度的好处:简单粗暴,一套前端方案解决所有问题,虽然并不那么完美,但是属于可接受范围之内。) C" g6 h0 r8 R+ Z; _$ L0 e
320宽度的坏处:所有的图片都会被强行扩放到2倍以上,导致图片失真,ppi越大,失真越严重;且个别安卓机型展示时左右留白可能会比较大。+ r1 V/ n" m3 O$ x8 z' x
6 x5 u) ^# m9 R3 v不过图片失真我个人真不觉得一定是个坏事,就目前而言国内大部分用户流量还是以2g和3g网络为主,4g根本没有普及,wifi也基本仅限于家里。所以大部分用户的流量和加载速度是个大问题,当你真的把普通图片换成高清大图,换来的代价可能是用户加载时间需要再多个三五秒,你可以想象一下,有几个人会盯着一个loading看5秒还不退出?别那么看得起互联网用户的耐心。, A2 R7 a3 w7 C" O9 O
反之高清图片和普通图片被压缩在一个5寸的手机屏幕上进行展示的时候可能只有一平方厘米那么大,除非你仔细看,否则高清图片和普通图片在5寸屏幕上实际显示的差异恐怕还真不是一眼就能看的出来的。6 d, y+ ~0 n, `4 Z
, z+ M W; d* B3 G" W3 C
--------------------------------------------------------响应式开发---------------------------------------------------------
- n. J3 Z% z; H* x$ ?纯百分比做不是不行,而是局限性太大,另外一种思路就比较暴力了:
. u3 T; X+ G% o3 f
) b( F% W, S5 M" B5 g1 }5 h当检测到是ios平台时,执行paln a,: z# y. W" c2 k! y
当检测到是小米4时,执行paln b,
* m7 W; o& u4 b. V+ W+ n当检测到是魅族4时,执行paln c,; R5 z+ A- D; ?' ]' Q/ t2 v
当检测到是note4时,执行paln d,
: Y$ {- z" K( y3 W( ~以此类推......
+ V, @/ A- }6 u" Y3 p1 q" r0 z+ Q大体上有个四五种方案基本上安卓上面常见的情况也就都被概况了,但是工程量就得增加四五倍了。而且即使增加了四五倍的工作量,你仍然无法完美解决所有情况,所以**座的开发者看到安卓请绕行,真爱生命,远离安卓。不要忘了,这才是项目初期做个前端而已,中后期时候安卓的弊端才会真的让你欲哭无泪。
/ [3 c9 b* Y. K: Q! f! c9 P4 \+ ^4 S# x* H- P6 c
# w( J% _# j2 @; H1 }* I
-----------------------------------------------------------补充一下----------------------------------------------------------
; k6 n9 ? A0 R$ P8 O9 R
0 a) O8 M5 C- _2 @移动端浏览器很给力,各种css3和html5大胆的用就行,ie6系的问题将一去不复返~~
N! N% Y. l, O% ^
( [4 E+ ?2 y. \; G! J原文地址:http://qf100站长论坛/news/297 转载请注明出处。
# p& g4 V4 g5 \# R) j, H5 |( o1 r3 k/ _: u; T! }1 Q' Z$ [: F
搜外论坛原创作者:青峰在线 8 b5 J; ~( Q3 N8 m, f6 a
1 L+ j& L( n. |0 `# U5 S
日期:2015-01-28 |