移动端基础(瓜瓜老师)
内置浏览器:
IOS:safari
Windows Phone:IE
Android 2.X和大部分Android 4.x:安卓Webkit
Chrome拥有的Nexus:Google chrome
Android 4.4+ 三星使用的三星chrome
Amazon:silk
可下载浏览器: firefox , Opera, UC, QQ, 360
移动端浏览器都是高级浏览器
对HTML5和CSS3有很好的支持,所以我们不用考虑兼容性问题。
HTML5:
语义化标签:header footer nav artcle main aside
离线存储:可使用Localstorage存储信息到用户的设备中
localStorage.getItem
localStorage.setItem
地理位置:移动特性,使用Navigate.getlocation来说明用户地理位置
设备转向和螺旋仪:摇一摇,devicemotion事件:获取设备x/y/z方向上的加速度
CSS3特性
圆角与阴影
渐变背景
变形:平移、旋转、缩放
变换和动画
交互:
开发与调试(教程)
设备:尺寸。旋转
媒介:print screen
网络:userAgent,网速
传感:触摸、地理位置
CSS像素
设备像素比:DevicePixelRatio = 设备像素/CSS像素
解决不同移动设备下视觉效果。
视口(viewPort)
布局视口:CSS布局会被他约束。document.documentElement.width/height
视觉视口:用户屏幕中看到区域的CSS像素 window.innerWidth/Height
理想视口:浏览器认为对设备来说最合适的布局视口的大小
放大效果:视觉视口变小了,布局视口没有变化。
通过这句话设置:
<meta name = "view" content="width=device-width,initial-scale=1">
width:布局视口宽度
initial-scale:页面的初始缩放程度和布局视口的宽度
minimum-scale:最小缩放程度
maxmum-scale:最大缩放程度
user-scalable:是否可缩放
媒体查询(Media Query)
针对不同屏幕应用不同的样式
<link rel="stylesheet" href="m.css" media="screen and (max-width:480px)"/>
或者:
<style type = "text/css">
@media screen and (min-width:480px){
.selector {}
}
</style>
媒体查询
(min/max-)width/height
orientation 方向
oritation:landscape /*代表横屏*/
resolution 分辨率
device-pixel-ratio
(min/max-)aspect-ratio
Device-width, device-height, device-aspect-ratio不可靠
弹性布局
页面的body宽度为100%
自适应布局
display:table 支持性很好!CSS2.1支持
CSS3 Flex Box 是w3c的终极武器
CSS | html |
---|---|
display: table | <table> |
display: table-cell | <td> |
display: table-row | <tr> |
display: table-column | <col> |
display: table-column-group | <colgroup> |
display: table-footer-group | <tfoot> |
display: table-header-group | <thead> |
多栏自适应等高布局
Display:table实现多栏等高布局
<div class="wrap">
<div class="side">Side</div>
<div class="main">Main</div>
<div class="extra">Extra</div>
</div>
/*
* 使用display:table实现多栏、等高、垂直居中布局
*/
.wrap {
display: table;
width: 100%;
}
.wrap>div {
display: table-cell;
/* 垂直居中 */
vertical-align: middle;
}
.side {
width: 100px;
height: 250px;
}
.extra {
width: 100px;
}
/*
* 无关的样式
*/
.wrap {
font: 28px/1.6 sans-serif;
color: white;
}
.wrap>div {
padding: 20px;
}
.side {
background: #f44;
}
.main {
background: #09c;
}
.extra {
background: #f60;
}
Flexbox
水平或垂直排成一行
控制子元素对齐方式
控制子元素的宽度、高度
控制子元素的显示顺序
控制子元素是否折行
Demo:
Html:
<div class="container">
<div class="item1">Item 1. Flexbox Rocks!</div>
<div class="item2">Item 2. Go for it! CSS Tricks' A Complete Guide to Flexbox provides strong reference documentation for all properties and valuesiew of the spec.</div>
<div class="item3">Item 3. Flexbox has a funny history.</div>
</div>
CSS:
/**
* flex box
*/
.container {
/* flex | inline-flex */
display: flex;
/* 伸缩流(主轴)方向 row 水平 | row-reverse | column 垂直 | column-reverse */
flex-direction: row;
/* 主轴对齐 flex-start 左 | flex-end 右 | center 中 | space-between n-1个空格 | space-around n+1个空格*/
justify-content: flex-start;
/* 侧轴对齐 flex-start | flex-end | center | baseline | stretch 拉伸成等高 */
align-items: stretch;
/* 伸缩行换行 nowrap 不换行 | wrap 换行 | wrap-reverse */
flex-wrap: wrap;
/* 对齐伸缩行 stretch 根据高度拉伸 | flex-start 顶对齐 | flex-end | center | space-between | space-around */
align-content: stretch;
//height: 1000px;
}
/*
* order 显示顺序
*/
.item1 { order: 3; }
.item2 { order: 2; }
.item3 { order: 1; }
/*
* flex 伸缩因子
* 第一个参数:没有剩余宽度大小 可为auto
* 第二个参数:填满剩余空间(比例)
* 第三个参数:空间不足时,需要从其他box抽出多少(比例)
*/
.item1 { flex: 100px 1 1; }
.item2 { flex: 100px 2 1; }
.item3 { flex: 100px 1 1; }
/*
* 侧轴对齐
*/
.item1 { align-self: auto; }
/*
* margin auto
*/
.item1 {
margin-right: 0;
}
/* 垂直居中最简方案,为标准鼓掌!
* .container { display: flex; }
* .child { margin: auto; }
*/
/* http://philipwalton.github.io/solved-by-flexbox/ */
/*
* 无关的属性
*/
.container {
color: #fff;
border: 3px solid #666;
font-family: sans-serif;
}
.container > div {
padding: 10px;
width: 120px;
}
.item1 {
background: #f44;
font-size: 32px;
}
.item2 {
background: #09c;
}
.item3 {
background: #f60;
}
Flexbox学习最新的,可以用工具解决兼容性问题:flexbox转化
#####图片
液态图片:img { max-width: 100%; }
使用2x 图片 (IE下基本不支持)
width:200px的img,使用分辨率宽为400的图片
background-size: 50% auto;
srcset和picture
<img src="low-res.jpg" srcset="high-res.jpg 2x">
<picture>
<source srcset="med.jpg 1x, med-hd.jpg 2x" media="(min-width: 40em)" />
<source srcset="sm.jpg 1x, sm-hd.jpg 2x" />
<img src="fallback.jpg" alt="" />
</picture>
####响应式javascript
使用matchMedia
if(matchMedia(‘screen and (min-width:480px)’).matches){
}
处理orientationChange事件
Window.addEventListener(“oritationchange”,function(){
Alert(“the orientation of the device is now” +screen.orientation);
});
Test demo
Html:
<nav>
<ul class="nav-list">
<li><i class="icon-home"></i></li>
<li>Blog</li>
<li>Gallery</li>
<li>Project</li>
<li>About</li>
</ul>
</nav>
CSS:
/*
* 使用flex-box实现自适应导航条
*/
.nav-list {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.nav-list li {
flex: auto 1 1;
}
.nav-list li:first-child {
flex-grow: 0.000001;
}
/*
* 无关的样式
*/
body {
font: 18px/1.6 sans-serif;
}
.nav-list {
background: #f88;
line-height: 50px;
color: white;
font-size: 20px;
}
.nav-list li {
border-bottom: 1px solid white;
text-align: center;
}
.nav-list li+li {
border-left: 1px solid white;
padding: 0 15px;
}
.nav-list li:nth-child(1) {
background: #0099CC;
font-size: 40px;
padding: 0 10px;
}
移动端事件
鼠标事件:mousedown mousemove mouseup click
Touch事件: touchstart touchmove touchend
Click延迟
手机上的click事件有约300ms的延迟,因为浏览器要判断是否为双击缩放行为
部分浏览器,会在页面不可缩放时取消延时
Google Chrome 会在Viewport Meta的content设为device-width时取消延时
IE会在CSS的touch-action设为manipulation时取消延时
Safari无法取消延时
解决办法
使用touch事件模拟tap轻触行为。
touchEvent
有三个touchList类型的关键属性
touchlist里的每一项结构与MouseEvent类似
window.ontouchstart = function(e) {
console.log(e.touches); // 屏幕上所有手指
console.log(e.targetTouches); // 当前元素上的手指
console.log(e.changedTouches); // 有变化的手指
console.log(e.changedTouches[0].clientX); //获得第一个手指相对于视觉视口的横向偏移
console.log(e.changedTouches[0].pageX); //获得第一个手指相对于布局视口的横向偏移
}