移动web

移动web
代码下载地址
链接:http://pan.baidu.com/s/1pKXcQM3 密码:qv7n

移动web
2.移动web的基础知识
2.1 pixel 移动开发像素基础

iphone5 分辨率640*1136

px:css pixels 逻辑像素,浏览器使用的抽象单位
dp,pt:device independent pixels 设备无关像素
dpr:devicePixelRatio 设备像素缩放比

计算公式:
1px = dpr*dpr*dp

平面上:1px = 2*2*dp
纬度上:1px = 2*dp

DPI:打印机每英寸可以喷的墨汁点(印刷行业)
PPI:屏幕每英寸的像素数量,即单位英寸内的像素密度
目前,在计算机显示设备参数描述上,二者意思是一样的。

ppi越高,像素数越高,图像越清晰
但可视度越低(小),系统默认设置缩放比越大

            ldpi   mdpi hdpi xhdpi
ppi          120    160  240   320 
默认缩放比    0.75  1.0   1.5  2.0

Retina屏(高清屏):dpi都是大于等于2

以iphone5为例子
设备分辨率1136*640dp
根号下(1136*1136+640*640)/4=326ppi
326ppi属于retina屏幕,dpr=2
1px = dpr*dpr*dp
phone5的屏幕为320*568px


2.2 viewport视图
ios的viewport是980px


2.3 viewport_meta标签

布局viewport:document.body.clientWidth
度量viewport:widow.innerWidth

<meta name="viewport" content="width=device-width, initial-scale=1, 

user-scalable=no" />


2.4 viewport_coding
设计移动web
方案一:根据设备的实际宽度来设计(常用)
手机宽320px,我们就拿320px设计
方案二:1px = 1dp
缩放0.5。根据设备的物理像素dp等于抽象像素px来设计。1像素边框和高清图片

都不需要额外处理。


3.高效的移动web布局
3.1
响应式布局responsive 高清图片retina px,em,rem
盒模型background-size font-size 弹性滚动 多行文本溢出 
flex弹性盒子布局 高效居中方案 等比例填充列行

3.2 flexbox弹性盒子布局

根据元素个数不同,自动填充容器

.nav{
overflow:hidden;
background-color:#de7c3c;
padding:10px;
display:-webkit-flex;<---------------------
}
.item{
color:#fddfa7;
padding:0 5px;
text-align:center;
flex:1;<---------------------
}

display:-webkit-flex;表示使用弹性布局
flex:number;占容器的比例


flex等比划分
flex:1;flex:2;
flex混合划分
width:100px;flex:2;flex:1;


不定宽高的水平垂直居中
.myoff-wrapper{
position:absolute;
top:50%;
left:50%;
z-index:3;
-webkit-transform:translate(-50%,-50%);
border-radius:6px;
background:#fff;
}
【flexbox版】不定宽高的水平垂直居中
.parent{
justify-content:center;//子元素水平居中<---------------------
align-items:center;//子元素垂直居中<-------------------------
display:-webkit-flex;
}

3.3 flex弹性盒模型

项目代码地址https://github.com/williamtank/welcome_mobile

兼容性:
ios可以使用最新的flex布局
android4.4以下,只能兼容旧版的flexbox布局
android4.4及以上,可以使用最新的flex布局

新flex布局                      旧flexbox布局
display:-webkit-flex;        display:-webkit-flex-box;
-webkit-flex:1;               -webkit-flex-box:1;
justify-content:center;          box-pack:center;
align-items:center;              box-align:center;


3.4 响应式设计
媒体查询
@media screen and (max-width:1024px){}

媒体类型:
screen(屏幕)
print(打印机)
handheld(手持设备)
all(通用)

常用媒体查询参数:
width-视口宽度
height-视口宽度
device-width:设备的宽度
device-height:设备的高度
orientation:检查设备处于横向(landscape)还是竖屏(portrait)

响应式设计
设计点一:百分比布局
仅仅使用媒体查询来适应不同的固定宽度设计,只会从一组css到另一组css的切

换。两者之间的没有任何平滑渐变。当没有命中媒体查询时,表现就会变得不可

控制。

设计点二:弹性图片
img{
max-width:100%;
}

设计点三:重新布局,显示和隐藏
1.同比例缩减元素尺寸
2.调整也没结构布局
3.隐藏冗余的元素


3.5 移动web特别样式处理

高清图片:
100*100px-->100*100dp
正常是100*100的,iphone5上就用50*50的,iphone6上就用37.5*37.5的

一像素边框:
同样是retina屏幕下的问题,根本原因是:1px 使用2dp渲染
sacleY(.5.sidebar .folder li{
padding:8px 0 8px 15px;
color:#7c7c7c;
cursor:pointer;
position:relative;
}
.folder li + li:before{
position:absolute;
top:-1px;
left:0;
content:'';
width:100%;
height:1px;
border-top:1px soldi #ddd;
-webkit-transform:scaleY(0.5);
}


相对单位rem:
em:是根据父节点的font-size为相对单位
rem:是根据html的 font-size为相对单位

em在多层嵌套下,不好用
rem更加能作为全局统一设置的度量

rem的基值设置多少?
rem=screen.width/20


//默认320px
html{font-size:32px;}
//iphone6
@media(min-device-width:375px){
    html{font-size:37.5px;}
}
//iphone6 plus
@media(min-device-width:414px){
    html{font-size:41.4pxp;}
}

如iphone5上的rem基值为32px,渲染一张64*64px的div,则用2rem*2rem去渲染。

换算公式是:
width:px/rem基值
height:px/rem基值


多行文本溢出...:
//单行文本溢出...对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:2;        //共显示2行
}

4.终端交互优化

4.1
在移动设备上没有了鼠标输入,hover等一些鼠标事件不再生效。取而代之是更人

性的触摸事件touch.

不用click事件-->tap事件基础
弹性滚动-->touch触摸事件
上拉刷新--->下拉下载


4.2 tap基础事件

300毫秒的故事
移动web页面上的click事件响应都要慢上300ms

tap基础事件:
使用tap事件代替click事件

自定义tap事件原理:
在touchstart,touchend时记录时间,手指位置,在touchend时进行比较,如果手

指位置为同意位置(或允许移动一个非常小的位移值)且时间间隔较短(一般认为是

200ms),且过程中未曾触发过touchmove,即可认为触发了手持设备上的"click",

一般称为"tap"

移动框架库zepto.js

Tap "点透"的 bug

Tap透传的解决方案:
1.使用缓动动画,过度300ms的延迟
2.中间层dom元素的加入,让中间层接受这个穿透事件,稍后隐藏
3.“上下”都使用tap事件,原理上解决tap透传事件(但不可避免原生标签的

click事件)
4.改用fastclick的库
最新的zepto.js已经去掉这个bug了



4.3 触摸touch


touch基础事件:
触摸才是移动设备的交互的核心事件
touchstart:手指触摸屏幕触发(已经有手指放屏幕上不会触发)
touchmove:手指在屏幕滑动,连续触发
touchend:手指离开屏幕时触发
touchcancel:系统取消touch时候触发(不常用)

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


每个touch对象包含属性:
clientX:触摸目标在视口中的x坐标
clientY:触摸目标在视口中的y坐标
identifier:标识触摸的唯一id.
pageX:触摸目标在页面中的x坐标(包含滚动)
pageY:触摸目标在页面中的y坐标(包含滚动)
screenX:触摸目标在屏幕中的x坐标
screenY:触摸目标在屏幕中的y坐标
target:触摸的dom节点目标。

bug:
android只会触发一次touchstart,touchmove,touchend不触发
解决方案:
在touchmove中加入:event.preventDefault()。可以去掉bug.
但注意:event.preventDefault()会导致默认行为不发生。如scroll,导致页面不

滚动!


弹性滚动:
当客户端的页面滚动到顶部或底部的时候,滚动条会收缩并让我们多滑动一定距

离。

移动web页面也可以弹性滚动,但有几种情况:
body层滚动:系统特殊化处理
    自带弹性滚动,overflow:hidden失效,gif和定时器暂停
局部滚动:
    没有弹性滚动,没有滚动惯性,不流畅
局部滚动开启弹性滚动:
body{
overflow:scroll;
-webkit-overflow-scrolling:touch;
}

注意!android不支持原生的弹性滚动,但可以借助三方库iscroll来实现。


下拉刷新:
顶端下拉一小点距离页面弹性滚动向下,例子:兴趣部落

上拉加载:
使用scroll事件,而不是touch事件
android有bug

以上内容来自慕课网地址http://www.imooc.com/learn/494

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值