CSS3和Less
一、认识移动端
- 原生App
 
直接运行在操作系统中的应用;智能手机、平板 等,目前移动设备两大系统平台:
IOS:Object-c (OC)
Android:java
原生APP的优势:
- 运行流畅,
 - 所有的资源都在安装包里,下载安装一次,永久可用;
 
劣势:
- 可移植性差,不能跨平台,IOS的app只能在IOS运行,Android的app只能在Android系统跑;
 - 时效性差,升级与否决定权在用户手里,如果用户不升级,你做的新功能用户永远不会用;
 
- web App
 
在浏览器中的HTML5的页面时运行、app里面内嵌的webkit内核;
h5的页面如果需要调用摄像头,通讯录、重力感应器… 需要通过浏览器去调用这些功能;
- WebApp 的优点
 
- 开发效率高
 - 没有平台限制
 - 服务供应商拥有更新主动权
 
- Hybrid App:
原生app中中嵌 webview(类似浏览器的东西),业务功能使用html+js完成; 
移动端是指运行在移动设备浏览器(或webview)中的h5页面;在移动端没有IE浏览器的兼容性问题,可以使用新技术
移动端开发需要我们掌握:
- html5新特性
 - css3新特性
 - 移动端的事件、常用库
 - 本地存储localStorage
 - geolocation
 - websocket
 
二、HTML5新增的标签
- HTML 超文本标记语言
 - XHTML: 更加严谨的标记语言,例如双标签必须闭合、单标签必须使用/ 自闭合,行内属性必须小写、属性值必须使用双引号等。。。
 - XML 可扩展标记语言
 
HTML5 在HTML4的基础上新增了很多标签
- 常用的html标记
 
块级元素:div p h1-h6 ul li ol table form ..
行内:span a label i br
行内块:input img button
h5为了增强标签的语义化,新增了一些标签
- header 头
 - nav 导航
 - section 块
 - footer 底部
 - figure 图片
 - figcation: 图片描述
 - article 文章
 - mark 高亮
 - audio 音频
 - video 视频
 - ….
 
标签语义化有利于SEO
三、认识less
less是什么?
less是CSS预编译语言,类似的还有 sass styluss等;
less和css的区别:
css 是标记语言,不是编程语言,没有类、示例、函数、变量,开发效率低,可复用和可维护性差;
而less等预编译语言就是让css具备面向对象编程思想,有变量、有函数、有作用域,是浏览器不能识别和渲染less代码,需要我们把less代码先编译为正常css后,再交给浏览器进行解析渲染。
使用less
1. 修改link标签的rel属性
把link标签中的rel属性又stylesheet改为stylesheet/less
<link rel="stylesheet/less" href="less文件">
2. 引入编译js的文件
- 开发环境编译,只需要引入编译less的js文件即可
 
<script src="less-2.5.3.min.js"></script>
实际项目中我们使用webpack、gulp或者grunt等打包工具中的less编译等功能在打包的时候自动打包并且插入到页面中;
less语法
原来的css:
.box {width: 200px;height: 200px;background: skyblue;}.box a {color: red;}
改写成less
.box {.centerPos(200, 200);width: 200px;height: 200px;background: skyblue;a {color: red;}}
1. less中的变量
- less 变量:
 
存储值代表值,以后再用这个值,使用这个变量即可,如果以需要修改,只需要修改这个变量,那么所有用到这个变量的时候只要用到这个就改了;
- 声明一个变量:
 
语法: @变量名
@bg-src:"../img/"; /*使用图片资源变迁引入 变量存储,以及拼接*/@link-color: #000; /* 可以使用 - */@wid: 200px;/*使用变量*/a {color: @link-color;width: @wid;background: url("@{bg-src}1.jpg") no-repeat center;}
2. less 中的嵌套语法
- less中使用嵌套表示层级;html代码如下
 
<div class="outer"><div class="inner"><div class="center"><a href="" class="link"></a></div></div></div>
less代码
.outer {.inner {.center {a {}}}}
- 在less的嵌套语法中使用 &表示花括号外面的选择器后面紧跟着XX
 
.pub {
.bg { /*.pub .bg 后代选择器*/}& > .bg { /*.pub > .bg 子级选择器*/}&.bg { /*.pub.bg 交集选择器*/}&:hover { /*.pub:hover 使用伪类*/}
}
- less 嵌套会形成作用域
 
@width: 100px;/*嵌套语法,& 使用*/.pub {@width: 200px;.bg {width: @width; /*.bg最终的width使用的200px*/}}
- less 中使用函数
 
less中可以声明函数
.transition(@property: all, @duration: .5s, @timing-function: linear, @delay: 0s) {transition: @arguments;}.cc {.transition; /*啥也不传时使用默认值*/.transition(@duration: 1s); /*只修改duration*/}
四、css3中新增特性
- border-radius
 
.box {border-radius: 50%;}
- box-shadow: h v blur spread color inset;
 
- h 阴影水平偏移值
 - v 阴影竖直偏移值
 - blur 模糊尺寸(可选)
 - spread 阴影尺寸(可选)
 - color 阴影颜色(可选)
 - inset 内置阴影(可选)
 
.box {box-shadow: 5px 5px 10px 10px #000;}
- text-shadow: h-shadow v-shadow blur color;
 
.box {text-shadow: 5px 5px 10px #000;}
- background-size: 值如下
 
- 100px 100px 具体值
 - 100% 100% 宽高百分比(相对于所在容器)
 - cover 以合适的比例把图片整个容器覆盖,但是容器不一定漏出整个图片
 - contain 保证图片纵横比例不变铺满容器的尺寸较小一个方向,另一边根据图片综合比例计算(当一边铺满后,另一边不一定铺满)
 
- background-clip: 值如下
 
- border-box 裁切到边框
 - padding-box 裁切到padding
 - content-box 裁切到内容区域
 - text 只填充文本(需要-webkit)
 
五、CSS3过渡动画
<div id="box" class="box"></div>
.box {background: #00b38a;width: 200px;height: 200px;transition: all .5s linear 0s;}#box:hover {width: 300px;height: 300px;}
transition属性
transition: all .5s linear 0s;
transition是一个合成属性,有以下属性合成:
- transition-property: 要过渡的属性,默认all
 - transition-duration: 过渡时间
 - transition-timing-function: 过渡效果,默认linear
 - transition-delay: 动画延迟时间
 
六、CSS3变形动画
CSS3的变形动画需要设置transform属性
transform: skew(0, 45deg);
常见的效果有,可以组合使用:
- scale: 缩放
 - translate: 平移
 - rotate: 旋转
 - skew: 倾斜
 
transform-origin: 设置旋转动画的中心点位置;
- 水平: left center right
 - 竖直:top center bottom*
 
示例:
#box:hover {width: 300px;height: 300px;transform: scale(2, 0.5);}#box:hover {width: 300px;height: 300px;transform: translate(100px, 100px);}#box:hover {width: 300px;height: 300px;transform:rotate(360deg);}#box:hover {transform: skew(0, 45deg);}
七、关键帧动画
CSS3中使用 @keyframes 定义关键帧动画,使用animation属性调用;
html代码:
<div class="box" id="box"></div>
CSS定义关键帧动画:
@keyframes shake {0% {transform: rotate(45deg);}25% {transform: rotate(-0deg);}50% {transform: rotate(-45deg);}75% {transform: rotate(0deg);}100% {transform: rotate(45deg);}}
调用关键帧动画:
.box {width: 120px;height: 300px;background: url(clock.png) no-repeat;margin: 20px auto;transform-origin: center top; /*设置旋转元素的基点位置*/animation: shake 2s linear 0s infinite; /*调用关键帧动画*/}
animation属性详解:
animation是一个合成属性,由以下属性合成:
- animation-name: 运动轨迹名称 @keyframes 定义一个轨迹名称
 - animation-duration: 运动轨迹运动时间
 - animation-timing-function: 运动效果 (linear ease-in ease-out..)
 - animation-delay: 延迟时间
 - animation-iteration-count: 动画执行次数,默认1,infinite 无数次
 
【发上等愿,结中等缘,享下等福,择高处立,寻平处住,向宽处行】
