移动前端的坑

先介绍一下项目环境,前端工具使用fis-plus,主要使用了zepto插件。整体架构比较简单。

在这里我们不讨论viewport布局(使用viewport貌似坑会少很多,但是由于条件限制,有时只能使用原始方法开发),下面进入正题:

零、调试工具

推荐大家在调试移动端页面时使用chrome的toggle device mode。

在此模式下可以随意切换市面上的各种主流机型。不过真机与模拟环境还是有一定差距,在后期测试阶段你将会深切地感受到这一点,木哈哈哈。

一、布局。

PC端和移动端的布局的思路还是比较不同的。如果最初没有考虑好移动端布局的思路,在后期兼容性等完善过程中将会超级痛苦。

在PC端我们很常见的一种布局思路如下:将网页主题设为固定宽度,居中,并定义最小宽度,可适配各种大小的PC端屏幕。由于PC端可视范围较大,所以上述方法可行,但是移动端完全不同,移动端的屏幕本身就比较小,所以我们必须全部利用起来。移动端的页面一般来说结构都会比较简单,下面分结构介绍两种布局:

(1)居中

一般banner或者按钮等元素都会定义为居中布局。在ps中量好外边距后,直接给元素设置margin,如:margin: 0 10px; 无需设置宽度,元素会自动撑开,且在任何屏幕上都会有相同10px的左右外边距。

(2)多个元素水平排列


  比如上图中常用网址中的咨询、hao123、图片、凤凰四个一排,怎样做到在任何移动端都能够漂亮的排列呢?很简单,将每个元素都设置成25%的宽度并居中,就能达到上述的效果。

比较复杂一点的,如上图中第一排的新闻、小说等图标是怎么样布局的呢?经过简单的计算,每个元素都定义为16%的宽度,这样总共是16%*6=96%,剩下的4%再给两边的元素各加2%的外边距就ok了。

如果你想实现更加完美的效果,比如使图片跟随手机屏幕的大小变化,则可以给图片设置相对宽度,并使高度自动伸缩,则可以达到以上效果。

二、像素

由于现在需要多移动端使用的是retina视网膜屏幕,所以在看页面设计图时,需要按照原型图尺寸的一半进行长度赋值。这里就会引出一个十分蛋疼的问题:当设计图有1px的线条或border时,我们该怎么办!

有人说了,iOS 8 和 OS X Yosemite 支持 0.5px 的边框。我只能说呵呵,光有两个系统是木有用的。

告诉大家一个目前来看最佳方案:

伪类 + transform

原理是把原先元素的 border 去掉,然后利用:before或者:after重做 border ,并 transform 的 scale 缩小一半,原先的元素相对定位,新做的 border 绝对定位。

.test:before {

content: " ";

position: absolute;

left: 0;

top: 0;

width: 100%;

height: 1px;

border-top: 1px solid #dadad9;

-webkit-transform-origin: 0 0;

-ms-transform-origin: 0 0;

transform-origin: 0 0;

-webkit-transform: scaleY(0.5);

-ms-transform: scaleY(0.5);

transform: scaleY(0.5);

}

在调试兼容性的过程中可能会遇到各种麻烦,不过耐心的慢慢调试,页面一定会实现完美的1像素,你也会炼成钛合金像素眼。

三、点击事件

在移动端的点击事件中,如果使用我们异常熟悉的click事件,确实不是一个最佳方案。因为click事件因为种种历史原因,有300ms的延时。所以我们可以使用tap事件。

使用tap事件你可以能在开发过程中又会遇到一个蛋疼的问题:点击穿透现象。如果页面上弹出一个dialog,并且,在确定按钮的下一层的这个位置正好有一个绑定了点击事件的元素,那就热闹了,点击一下,可以触发两个事件。

如何避免呢?介绍两个简单的方法,一个是将tap换成click,或者在事件最后加上preventDefault();防止冒泡。

四、空div在低端安卓显示不出来问题

在开发过程中发现了这样一个奇怪的问题:有些无内容的容器已经设置了高度与宽度,也设置了背景图,但是在安卓低端机上就是无法显示。目前解决方案自我感觉非常山寨:将高度或宽度换成对应的padding,将容器撑起来。虽然山寨,但是实践验证了,这种方法非常好用。

五、外边距合并

还是安卓的低端机上的问题,(貌似在低版本的PC端浏览器也会出现,但是很少遇到),外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

这个情况下对元素使用overflow:hidden;就会消除外边距的合并,百试百灵。

六、display使用table-cell等表格布局导致页面错乱。

仍然是安卓的低端机上的问题。在开发页面过程中我也很少使用表格布局,出现问题的情况会比较多。正常可以使用inline-block,配合float:left;一般不会出现问题。

七、缓存

html5中的web storage分为localStorage与sessionStorage。

localStorage用于持久化的本地存储。如果用户不主动清空数据,数据永远不会过期。

sessionStorage用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问,当回话结束时,数据也随之销毁。因此,sessionStorage不是一种持久化的本地存储,仅仅是绘画级别的存储。

八、文字垂直居中

在PC端开发时,比较常用的方法为设置相同的height与line-height。但是在移动端,如果在某些容器中使用此类方法,你会发现文字在某些机型上跑偏了二里地。

从这个现象可以看出,移动端的浏览器对于css的解析确实没有PC端完善。原来以为IE三兄弟(IE6、IE7、IE8)是最坑的了,没想到被移动端的无数个兄弟完爆了。

言归正传,如何解决上述问题呢?微信采用的是在需要垂直居中的容器外套一层div,使用盒模型强制将其内部容器垂直居中。具体实现可参见 http://weui.github.io/weui 微信样式库。

另外就是在input中尽量不使用line-height,避免引起placeholder垂直位置偏移。

九、页脚元素避免使用绝对定位。

移动端页面经常会有页脚放置copyright或logo的需求,这时千万不要使用position:absolute;bottom: 20px; 这种坑爹布局。如果这个页面存在输入需求,当调起软键盘时,你定义的这个绝对位置元素就会蹦跶到软键盘上方的页面上。

可能你会觉得,如果页面没有输入框,就不存在这种问题了吧。too young too naive。世界上还有一种奇葩机型,返回键是设置的在页面底部的啊!!!你只要一写绝对定位在页脚底部的布局,百分百中招啊!

所以我们尽量不要使用上面的那种布局,如果硬要达到距离页面底部固定高度的效果,可以动态计算页面最小高度并进行赋值~

时间: 2024-11-10 16:33:16

移动前端的坑的相关文章

web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史

秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知,不问自晓,古今行事,未之有也 」 我们都知道如今流行的框架:Vue.Js.AngularJs.ReactJs.已经逐渐应用到各个项目和实际应用中,它们都是MVVM数据驱动框架系列的一种. 在了解MVVM之前,我们先回想一下前端发展的历史阶段,做到心中有数,才会更好理解. 这段回想历史.由于网上就可查不少资料,

web前端入坑第四篇:你还在用 jQuery?

web前端入坑第四篇:你还在用 jQuery? 大妈都这么努力,我们有几个人回家还看书的? 先来补齐[web前端入坑系列]前三篇的连接web前端入坑系列:点击标题进入第一篇: web 前端入坑第一篇:web前端到底是什么?有前途吗第二篇: web前端入坑第二篇:web前端到底怎么学?干货资料!第三篇:web前端入坑第三篇 | 一条"不归路" - 学习路线! 再说这个话题之前,我们先来扫盲普及一下 [jquery] 到底是什么以及它火爆将近十年的重要原因. [ 重新认识 - Jquery

web前端入坑第二篇:web前端到底怎么学?干货资料! 【转】

http://blog.csdn.net/xllily_11/article/details/52145172 版权声明:本文为博主[小北]原创文章,如要转载请评论回复.个人前端公众号:前端你别闹,JS前端实用开发QQ群 :147250970 欢迎加入~! 目录(?)[+] hi,大家好! 我的第一篇文章:[web前端到底是什么?有前途吗?],在我没想到如此 ‘HOT’ 的情况下 得到很多好评和有效传播. 也为我近期新开的 个人前端公众号:前端你别闹(webunao) 直接增加了几百粉(果然,帅

web 前端入坑第一篇:web前端到底是什么?有前途吗

web前端到底是什么? 某货: "前几年前端开发人员鱼目混杂,技术参差不齐,相对学习起来不规范,导致> 前端开发人员聚集,所以现在前端工种和工资还是没得到普遍重视,但近2年来,> > HTML5.JS 的流行,让前端异常火爆,以后还会更有前途吗?请问您怎么看?" 我 "我只能告诉你:前端不灭""除非你不要脸!""前些年因为国内都不要脸,然而现在都明白了用户体验至上,现在都要脸:""不但要脸 还要胸大

前端入坑

1.声明 本人并非技术大牛,甚至连牛都算不上,对于真正的大牛来说,我还只是一个小菜鸟.本人也并非科班出身,而是半路出家,因为处于对互联网的热爱(出于高考原因未能选择软件行业,至今都是无法抹去的痛),而投身了互联网,来到了我大前端的世界里.然而为什么写blog,是因为我曾经看过一位前端大师写的一篇名为<作为一个程序员我为什么要写博客>的博文,使我印象深刻,久久不能忘怀,本人建议程序员都看一下,必定受益匪浅. 附一张本人认为的程序员进阶路线: 注:这张图是我自己认为的进阶路线,并且也在为之努力,如

移动前端:坑与填坑

1.页面高度渲染错误 坑:页面底部部分与浏览器导航条重合了 填坑:重置高度 document.documentElement.style.height = window.innerHeight + 'px'; 2.transform碰上模糊 坑:在android中,如果元素或其父元素应用transform后,元素设置border-radius会变模糊 填坑:先放大再缩小 body{padding: 20px;background:purple;-webkit-transform: transla

前端脱坑日记之加载特效制作1

相信大家在生活中已经对加载界面已经非常熟悉,一个优美的加载界面绝对让你好感度大增,不说废话了让我们来看看代码吧! <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="css/bootstr

我今年28岁了,我在海棠学院学习前端

今天下午又拖着陈老师讲了一个小时的函数调用和闭包问题,总算给搞明白了.真的非常感谢陈老师的耐心解答,我觉得的像我这么刨根问底的学员也算极品了吧(这里不知道该用什么表情) 出于感谢,不由得想为这家初创的在线教育品牌打打广告.嗯,我今年28岁了,我在海棠学院学习前端. 虽然说是打广告,但我想讲讲这三个多月来在海棠学习前端的真实体会以及一些个人的想法,希望能给一些朋友提供点有价值的参考. 如果你在看这篇文章,那么我想你可能在面临三个问题:1.要不要入前端的坑.2.要不要报培训班学习前端.3.要不要报海

《前端圈技术论坛-腾讯互娱专场》观后感

11月22日,周六,天气晴朗,原计划今天和阿武去参加前端圈技术论坛深圳专场,可是我要加班,吃完午饭阿武发来一张现场图片,用的还是周四羽毛球赛的冠军奖品——一个手机鱼眼镜头拍摄的,同事阿王问我这是什么活动,得知我已报名后,当即让我放下工作赶过去参加,好在活动现场就在隔壁大楼C1-18F,于是才有了这篇观后感. 整体来说这次专场比上次的iweb峰会质量高一些,干货比较多.本次论坛主要内容有: 1.TGideas副总监PANTHER致辞 由于去的晚了点,没有赶上. 2.TGideas重构四组(重构工程