1、响应式布局

开发一个页面,在所有的设备上都能够完美展示。

媒体查询:@media screen and (max-width:100px) { }

媒体类型:screen(屏幕)

print(打印机)
handheld(手持设备)
all(通用)

常用媒体查询参数:

width —— 视口宽高
height —— 视口宽高
device-width —— 设备的宽高
device- height —— 设备的宽高
orientation:检查设备处于横向(landscape)还是竖屏(portrait)

2、响应式设计设计点

设计点一:百分比布局

仅仅使用媒体查询来适应不同固定宽度设计,只会从一组css到另一组css的切换。两种设计之间没有任何平滑渐变。只使用媒体查询,布局有时会变得不可控制。
当然,这只是建议,也有一些页面采用固定布局的情况下能够很好的在一些没有考虑过媒体查询情况下的设备上很好的展示。

设计点二:弹性图片

思路:无论何时,全都包在图片的元素宽度范围内,以最大的宽度同比完整的显示图片。

img{ max-height: 100% }

设计点三:重新布局,显示与隐藏

当页面达到手机屏幕宽度的时候,很多时候就要放弃一些传统的页面设计思想。力求页面简单,做如下处理:
① 同比例缩减元素尺寸
② 调整页面结构布局
③ 隐藏冗余的元素
经常需要切换位置元素使用【绝对定位】,减少重绘提高渲染性能。

关于响应式设计的思考:

根据响应式设计的理念,一个页面包含所有设备不同屏幕的样式和图片,当一个移动设备访问一个响应式的页面,就会下载pc,笔记本,ipad等不同设备对应的样式。而这些样式却是冗余的,完全没有用。
权衡利弊:性能不是最优,但是能减少重复开发。

3、 特殊样式处理

(1) 高清图片

在移动web页面上渲染图片,为了避免图片产生模糊,图片的宽度应该用物理像素单位渲染,即是100 * 100的图片,应该使用100dp * 10dp。
width:(w_value/dpr)px;
height:(w_height/dpr)px;

(2) 一像素边框

同样是retina屏幕下的问题,根本原因:1px使用2dp渲染。
border:0.5px;(错误),仅仅ios8可以使用
通用方案:scaleY(0.5)

(3) 相对单位rem

为了适应各大屏幕的手机,px略显固定,不能根据尺寸的大小而改变,使用相对单位更能体验页面兼容性。
em:是根据父节点的font-size为相对单位
rem:是根据html的font-size为相对单位
em在多层嵌套下,变得非常难以维护,rem更加能作为全局统一设置的度量
那么,rem的基值设置为多少比较好?
回归目的:为了适应各大手机屏幕
rem = screen.width / 20

不使用rem的情况:font-size

一般来讲font-size是不应该使用rem的相对单位的。因为字体的大小是趋向于阅读的实用性,并不适合于排版布局。
同理,趋向于一些固定的元素的特性。我们不使用rem而改为使用px去确保在不同屏幕上表现一致(跟rem的目的相反)。

(4) 多行文本溢出•••

单行文本溢出,对title类的使用非常多,而多行文本类,在详情介绍则用的比较多。

 //单行文本溢出…
.inaline {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
//多行文本溢出…
.intwoline {
display: -webkit-box: !important;
overflow: hidden; text-overflow: ellipsis;
word-break: break-all; -webkit-box-orient: vertical;
-webkit-line-clamp:;
}

4、 终端交互优化

对click事件say no
弹性滚动
上拉刷新
tap事件基础
touch触摸事件
下拉加载
300ms:

移动web页面上的click事件响应都要慢上300ms
用300ms判断是单击还是双击

(1) tap基础事件

300ms延迟怎么破?tap事件代替click事件。自定义tao事件原理:
在touchstart、touchend的记录时间、手指位置,在touchend时进行比较,如果手指位置为同一位置(或允许移动一个非常小的位移值)且时间间隔较短(一般认为是200ms),且过程中未曾触发过touchmove,即可认为触发了手持设备上的“click”,一般称它为“tap”。

tap“点透”的bug: 有两层,点击第一层的时候,如果点击的区域在第二层的范围内,那么第二层也会被触发。(原因与300ms有关)

tap透传的解决方案:
①使用缓存动画,过渡300ms的延迟
②中间层dom元素的加入,让中间层接收这个“穿透”事件,稍后隐藏
③“上下”都使用tap事件,原理上解决tap穿透事件,(但是不可避免原生标签的click事件,如a,input)。
③ 改用Fastclick的库(听过最新的zepto已经fixed掉这个bug)

(2) Touch基础事件

触摸才是移动设备的交互的核心事件,支持多点触摸。
touchstart:手指触摸屏幕触发(已经有手指放屏幕上不会出发)
touchmove:手指在屏幕上滑动,连续触发
touchend:手指离开屏幕时触发
touchcancel:系统取消touch时候触发(不常用)eg:滑动页面时来了一个电话或者其他系统事件

除常见的事件属性外,触摸事件包含专有的触摸属性:
touches:跟踪触摸操作的touch对象数组
targetTouches:特定事件目标的touch对象数组
changeTouches:上次触摸改变的touch对象数组

一个小BUG: android只会触发一次touchstart,一次touchmove,touchend不触发。(4.0,4.1有,4.2修复没有了,4.4开始又出现了)

解决方案: 在touchmove中加入:event.preventDefault(),可fixedBug。

但注意:event.preventDefault()会导致默认行为不发生,如scroll,导致页面不滚动!如果页面带有滚动条,就需要考虑更换解决方案。

(3) 弹性滚动,下拉刷新

①弹性滚动:当客户端的页面滚动到顶部或底部的时候,滚动条会收缩并让我们多滑动一定距离。通过缓冲反弹的效果,带给用户良好的体验。
移动web页面也是拥有这样的能力的,但滚动有几种情况需要考虑:
body层滚动:(系统特殊化处理)
自带弹性滚动,overflow:hidden失效,GIF和定时器暂停。
局部滚动:没有弹性滚动,没有滚动惯性,不流畅。
局部滚动开启弹性滚动:

body {
overflow:scroll;
-webkit-overflow-scrolling:touch;
}
但注意:android不支持原生的弹性滚动!但可以借助三方库iScroll来实现

②下拉刷新:顶端下拉一小点距离,页面弹性滚动向下。
④ 上拉加载:使用scroll事件,而不是touch事件(android有bug)

(4) Canvas & GPU render【GPU 渲染】

优化技巧: canvas代替img标签
drawImage(image,x,y);canvas上绘制图片
drawImage(image,x,y,width,height);canvas上绘制缩放图片

原因: img使用浏览器渲染,当图片特别大且手机性能不是很好的情况下,会特别卡,通常表现在滑动图片。因为没有触发物理设备本身的GPU(图形处理器)渲染

image object:

① 预加载图片:当设置img.src=””的时候,就表示请求加载图片
② 图片的按比例缩放

(5) css3 animation

当一个css3动画结束时,我们可以监听相关事件AnimationEnd,比如对于webkit来说,是webkitAnimationEnd。

5、 跨终端web

① 单域 - Media Query
② 单域 – 多模板
③ 多域 – 跳转(很原始)
④ 多平台 App

(1) 移动优先:

① 移动端的用户和流量越来越多
② 各种屏幕让我们更聚焦业务的本领
③ 移动设备有更先进的人机交互体验

(2) 多终端检测
(3) 接口:结构:通用接口,

接口模型:前端消费者;后端生产者;测试监督者

6、零碎的细节

1)CSS3动画,代替DOM animation,效率更高,因为css3直接使用浏览器的GPU(图形处理器)渲染

2) 当你给一个元素设置它的百分比宽度的时候,他需要一个比照,也就是父元素,但是当它没有父的时候,需要给他一个绝对定位absolute值,但是在移动开发中,给整个整块的页面使用position: absolute;很占用内存,特别是当内容比较多的时候,会非常明显。会有几个后果:在ios下,会导致浏览器直接崩溃掉;在android下,会导致非常非常的卡。所以建议直接用js计算。

3)将图片显示到一排上,不使用浮动,使用-webkit-transform:translate3d(0,0,0); position: absolute;

4)new Date() * 1;// * 1 ,进行数值运算,转换为数字形式的时间戳

5)

self.startX = evt.touches[0].pageX; //记录开始的位移,touches包含着所有手指触摸在屏幕上的点的集合
-webkit-backface-visibility:hidden;/* 防止闪白 */

6)更多图片的优化,保留3个要使用的节点,当前的,上一个,下一个图片的节点,剩余的不需要的删除

7)jQuery Mobile(JQM jQMobile)
是jQuery在手机上和平板设备上的版本,是创建移动web app的框架。

8)2048制作过程中遇到的bug:(见9(2)touch基础事件BUG)

// 手机上手指识别无用,chrome19827号错误:touchevent不被触发。防止没有正确使用preventDefault()
document.addEventListener('touchmove', function(event) {
event.preventDefault();
});

10)使用Dropbox发布自己的web app
免费
限制: ① 静态网站 ② 速度较慢(在国外) ③ 域名不宜记忆
11)web app、native app和hybrid app(混合模式)

第134天:移动web开发的一些总结(二)的更多相关文章

  1. web开发规范文档二

    头部        header\hd 内容块      content\con\bd text txt title 尾部        footer 导航        nav\menu sub-n ...

  2. Python Web开发问题收集(二)

  3. Flask web开发之路十二

    ge请求和post请求 ### get请求和post请求:1. get请求: * 使用场景:如果只对服务器获取数据,并没有对服务器产生任何影响,那么这时候使用get请求. * 传参:get请求传参是放 ...

  4. 移动web开发介绍——浏览器

    前段时间了解学习了一下<移动Web手册>,觉得真的需要这种不是偏向技术.框架或工具的书籍,只是单纯的讲解一些关于移动Web最基本的知识.正好今天整理一部分之前学习过的内容,记录和分享,也方 ...

  5. Solon Web 开发

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  6. Solon Web 开发,一、开始

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  7. Solon Web 开发,二、开发知识准备

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  8. Solon Web 开发,四、请求上下文

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  9. Solon Web 开发,五、数据访问、事务与缓存应用

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  10. Solon Web 开发,六、过滤器、处理、拦截器

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

随机推荐

  1. 20155315 2016-2017-2 《Java程序设计》第三周学习总结

    教材学习内容总结 1.构造方法决定类生成对象的方式 用this将已存在的参数的值指定给此参数. 用new建立新的实例. class Clothes { String color; char size; ...

  2. 20155323 第四次实验 Android程序设计实验报告

    20155323 第四次实验 Android程序设计实验报告 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局管理器的使用: ...

  3. 一个命令安装lnmp

    安装LNMP执行:wget -c http://soft.vpser.net/lnmp/lnmp1.3-full.tar.gz && tar zxf lnmp1.3-full.tar. ...

  4. [hdu6051]If the starlight never fade-[欧拉函数+原根]

    Description 传送门 Solution orz大佬yxq..本题神仙 设g为P的原根. 设$x=g^{a}$,$y=g^{b}$. 由于$(g^{a}+g^{b})^{i}\equiv (g ...

  5. 【HNOI2014】世界树

    题面 题解 虚树好题(只是细节太多) 构出虚树后,一定要仔细梳理关键点之间的点是上面属于父亲,下面属于儿子. 然后二分出所有的点的所属就可以了 代码 #include<cstdio> #i ...

  6. [CF1042D] Petya and Array

    题面 题解 这道题目到底叫什么好呢?? 史上最短CDQ分治题 记一个前缀和,然后CDQ分治即可. 代码 #include<cstdio> #include<algorithm> ...

  7. C# VS,连接到oracle 报要升级到8.多少版本的错

    1:确定服务器的oracle版本 2:本地的客户端版本要和服务器一致 3:操作系统位数要一致

  8. Sublime Text 3安装完美的Vim支持,ActualVim/NeoVim

    很多IDE和编辑器都有Vim插件用于支持Vim模式,但大多数都有些问题,拿我一直用的Idea来说,它的vim在ctrl+v后,选择多行的行前插入,如果这几行中有空行,它不会把空格算在内,所以最终是会少 ...

  9. Linux中新增硬盘的分区,格式化与挂载

    Linux中新增硬盘的分区,格式化与挂载 本篇教程内容为怎样对Linux新增硬盘进行挂载,所以如果有准备新增硬盘但是有各种问题的,请参看本篇教程. 我们先说说什么是挂载? 我们知道Linux中的所有设 ...

  10. less 语法特性翻译稿 - 特性快速预览部分

    原文地址 http://lesscss.cn/features/ 概述 作为CSS的一种扩展语法,Less不仅仅向后兼容CSS,新的特性也是基于CSS现有语法.这使得学习Less变得容易,如果你有所怀 ...