[前端学习]移动web部分学习笔记,第一天

流式布局

  • 流式布局就是百分比布局,让元素的宽高自适应伸缩。这样可以有效的避免元素过宽,导致移动端设备不能显示完全的问题
  • 目前来说,流式布局配合h5和c3是移动web开发最常用的处理方案

viewport

  • 概念: PC浏览器在渲染html页面时,直接就在浏览器的窗口中显示。而移动端浏览器因为设备屏幕差异大的原因,就引入了viewport这一功能。它是一层虚拟的区域(我们是看不到的),处于浏览器窗口和html页面中间。html页面渲染显示在viewport的区域中,不是直接显示到浏览器窗口
  • 声明:viewport(窗口视图)实际上是通过meta标签来声明的<meta name="viewport">,它只应用于移动端的浏览器,也只有移动端浏览器才能识别它
  • 作用:通过设置viewport的content属性,我们可以控制html显示区域的宽度,缩放比,是否允许用户自行缩放等功能
  • 原理:首先给html设置元素大小为100%,大小就能跟viewport一致。然后再让viewport与设备屏幕大小一致,这样通过一个中间层,就实现了html页面大小与设备屏幕大小一致,从而解决不同移动设备屏幕尺寸不一样的适配问题
    • content几个常用的属性介绍:
      • width=device-width设置viewport的显示宽度,也就是html页面的显示宽度,device-width是获取当前设备屏幕的宽度,这样就能自动适配显示区域大小。也可以设置成固定数值,不推荐
      • initial-scale=xx设置html页面在移动端显示的默认缩放比,一般默认设置1.0就是不做缩放
      • user-scalable=1||0设置是否允许用户自由缩放页面,1是允许,0是不允许
      • maximum-scale=xx设置最大缩放比
      • minimum-scale=xx设置最小缩放比
      • 前三个值是做常用的属性
    • 目前较通用的viewport设置写法:
      • <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=0">
    • 一些非通用的viewport设置方法
      • 淘宝网手机网页就没有设置宽度值,页面大小是正常pc端大小。他们的解决方案是通过js来判断当前设备的屏幕大小,再动态的设置viewport的缩放比,以达到自适应屏幕的效果
  • 另外,viewport如果不设置,在手机端也会默认有,默认宽度是980px。这也是为什么一些pc页面直接在手机显示会缩放,因为设备宽度小于980

移动端布局常见问题

  • 罗列一些常见可能会遇到的css布局问题

移动端设置点击高亮效果

  • 网页在移动端展示时,会默认自带触碰时该元素区域高亮一下的效果,颜色为浅灰色
  • 通过-webkit-tap-highlight-color:颜色||transparent,可以设置改样式的颜色,如果设置为透明就是不显示

所有盒子以边框开始计算宽度

  • 就是之前c3中学到的box-sizing属性,因为移动端中设计到大量的百分比布局,如果不把边框和内边距计算在内,那么添加它们就会超出屏幕范围产生滚动条,这是不合理的。通过这个属性就能解决问题
  • -webkit-box-sizing:border-box(兼容老浏览器)box-sizing:border-box

清除默认表单控件样式

  • 移动端不同浏览器的表单控件会自动加上一些样式,比如内阴影等。为了表现的效果统一,经常会清空默认加上的样式,再由我们自己来添加样式
  • -webkit-appearance:none可以清除

最大宽度和最小宽度

  • 虽然大部分情况下是百分比来设置,但是为保证设计图的清晰度,一般会限制最大宽度max-width和最小宽度min-width,目前行业通用设计稿最大是640px,最小是300px

搜索按钮调用

  • 在移动端点击表单控件会自动弹出输入法,如果想要输入法中的enter(确认)键变成搜索按钮,需要用form标签把表单控件包裹起来,注意form标签不用写属性,传输地址#号或者其他无效地址代替就可

全屏页面设置

  • 因为页面最顶级的元素是htmlbody次之。所以给它们两个设置宽高为100%,再让内部的元素参照它们就实现了全屏页面

定位参照伸缩盒子问题

  • 正常情况下,子元素设置宽高100%是参照的父元素内容区域的宽高值。但是如果子元素设置了定位或者浮动,那么再设置宽高100%,它参照的就是父元素的实际宽高值

拓展知识-逻辑像素和物理像素

  • 概念:现在的移动设备都使用高清屏(Retina技术),大致原理就是让一逻辑像素尺寸由两个或者更多个物理像素来组成,大幅度提高了显示的精度
  • 举个例子:iphone4的屏幕尺寸是320x480,但是它的实际分辨率是640x960,就是2倍率。所以如果针对iphone4设备做图片,就要做640宽度的图片,然后放到320宽度的屏幕中显示,压缩了图片大小,精度也可以说清晰度就变高了
  • 现在手机屏幕越来越清晰,倍率也越来越高,具体倍率计算原理暂时还没弄清楚,但是至少在做移动web开发时要有这个概念,不要直接1:1显示图片,会造成失真
  • 目前主流解决方案:img引入的图片就用宽高来压缩,背景图片就用background-size来压缩
  • 这个东西很重要,以后多研究研究,另外像素不是固定单位,很复杂

移动端事件

touch事件

  • touch事件只会移动端浏览器上触发,总共有三个:
    • touchstart 当手指开始触摸时触发
    • touchmove 当手指触摸并开始移动时触发
    • touchend 当手指离开屏幕结束触摸时触发
    • 注意,在原生js中只能用addEventListener()方法来监听
  • 在移动端touch事件的事件对象中增加了几个属性,需要注意的几个如下:
    • changedTouches 记录最新的所有改变触摸点,可以理解每发生触摸并离开后,它会记录一次放进数组。当下次再次触摸并离开,他会再次记录。在touchend事件的事件对象中,只有该属性
    • targetTouches 记录当前触摸元素内的所有触摸点,可以理解当次触摸可能不止一个手指,那么只要在目标元素内所有手指的触摸点都会被记录,放入数组
    • touches 记录当前触摸的所有触摸点,和上一个不同的是该属性不会区分是否在目标元素内,只要是在页面上触摸的所有点都会记录进数组
  • 通过移动端touch事件的事件对象新增属性记录的触摸点,就可以获取到触摸点所在的坐标:
    • clientX||clientY触摸点在视口的横纵坐标
    • pageX||pageY触摸点在页面的横纵坐标
    • screenX||screenY触摸点在屏幕的横纵坐标
    • 通过这些坐标可以进行很多操作,比如判断用户滑动方向,滑动距离等
  • 过渡效果结束事件
    • transitionEnd 过渡效果结束后会触发(如果需要满足兼容问题,还要同时绑定webkitTransitionEnd)
  • 动画效果结束事件
    • animationEnd 动画效果结束后会触发(如果需要满足兼容问题,还要同时绑定webkitAnimationEnd)

zepto.js

介绍

  • 移动端浏览器和pc端浏览器有一个本质的区别,那就是兼容性。移动端浏览器几乎都支持最新的h5c3功能,所以如果移动端使用jquery框架来开发,一是体积太大,二是很多功能都没有意义(比如jquery的兼容处理以及一些动画API
  • zepto就是一个专门为移动端定制的框架,它有着与jquery类似的api,基本上会用jq就会用zepto。要注意的是zepto并不是100%覆盖了jq的功能
  • zepto还有一点与jq不同,jq的引入文件是一个文件包含了所以的库代码,但是zepto将库代码以模块化来划分。默认引入文件只集成了几个基础的功能,其他功能需要引入对应的模块

定制zepto

  • 一般来说开发都会用到多个功能模块,如果每个模块都引入,那么请求次数就太多了。所以zepto也支持你将多个模块功能整合到一个文件中
  • 1.安装node
  • 2.使用node命令行工具进入zepto主文件
  • 3.运行npm install
  • 4.修改make文件的target.build项,加入你想增加的模块功能
  • 5.运行npm run-script dist
  • 然后会生产一个dist文件,定制版的库文件就在dist文件中

移动端的点击事件

  • 在pc的点击事件是click,但是在移动端click点击事件会有300ms左右的延迟(因手机性能差异以及点击快慢会有波动),所以一般不建议在移动端使用click作为点击事件
    • 造成的原因是:早期手机网页不能很好的自适应显示的内容都很小,所以苹果公司为了解决这个问题,增加了双击放大的技术。正因为这个技术,手机浏览器会给click事件一定的延迟等待,来判断用户是单击还是双击,后来很多浏览器厂商在移动端都效仿了这个功能

tap事件

  • 移动端会优先响应touch事件(几乎没有延迟),所以现在常用的是用touch事件来模拟点击功能,代替click事件,大多数框架中都会封装tap事件(jq、zepto等),直接绑定事件就可以使用。但是要注意:tap事件也有一个副作用,那就是点透
  • 简单说明下点透:如果两个元素重叠在了一起,如果下面的元素绑定了其他点击类事件,那么你给上面的元素绑定了tap事件。当用户操作时,上面的元素执行完tap事件后,下面的元素也会触发它绑定的事件。相当于就是点击指令透到下面的元素了,这是个很严重的问题,而且经常会遇到
  • 正常情况下,移动端开发单击就使用tap事件。如果因为设计或者需求原因,而导致出现点透的情况,那么解决方案可以使用fastclick插件

移动端较常用的插件介绍

fastclick插件

  • 关于fastclick插件:这个插件的作用是解决移动端click事件有300ms左右延迟的问题。因为touch事件是优先触发的,所以才会有点透的问题。而click事件不是,就不会有出现点透。并且touch事件只有移动端才会触发,而click在pc端和移动端都能触发
  • 所以实际上fastclick解决了两个问题:一、点透;二、同一页面pc端移动端都能点击
  • 这个插件在开发中比较常用。使用方法和具体原理查看说明文档
  • github下载地址:https://github.com/ftlabs/fastclick

iscroll插件

  • 关于iscroll插件:这个插件是一个功能类库,它提供了大部分常用的页面元素滚动滑动功能。比如:页面拖动、缩略放大图、元素拖拽、页面滚动等等,非常强大。并且它同时兼容pc端和移动端
  • github下载地址:https://github.com/cubiq/iscroll
  • 使用方法和具体原理查看说明文档

swipe插件

  • 关于swipe插件:实现轮播图功能的插件,同时兼容pc端和移动端
  • 使用方法和具体原理查看说明文档
  • github下载地址:https://github.com/thebird/Swipe

swiper插件

  • 关于swiper插件:专注于提供移动端触摸滑动的效果的插件,其实也是同时兼容pc端和移动端的,相对于swipe插件,不仅覆盖了全部功能而且更加强大多样,但是体量也更大。可根据实际情况来选择使用
  • 使用方法和具体原理查看官方中文网:http://www.swiper.com.cn
  • github下载地址:https://github.com/nolimits4web/swiper
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容