CSS3和Less

一、认识移动端

  • 原生App

直接运行在操作系统中的应用;智能手机、平板 等,目前移动设备两大系统平台:
IOS:Object-c (OC)
Android:java

原生APP的优势:

  1. 运行流畅,
  2. 所有的资源都在安装包里,下载安装一次,永久可用;

劣势:

  1. 可移植性差,不能跨平台,IOS的app只能在IOS运行,Android的app只能在Android系统跑;
  2. 时效性差,升级与否决定权在用户手里,如果用户不升级,你做的新功能用户永远不会用;
  • web App

在浏览器中的HTML5的页面时运行、app里面内嵌的webkit内核;
h5的页面如果需要调用摄像头,通讯录、重力感应器… 需要通过浏览器去调用这些功能;

  • WebApp 的优点
  1. 开发效率高
  2. 没有平台限制
  3. 服务供应商拥有更新主动权
  • Hybrid App:
    原生app中中嵌 webview(类似浏览器的东西),业务功能使用html+js完成;

移动端是指运行在移动设备浏览器(或webview)中的h5页面;在移动端没有IE浏览器的兼容性问题,可以使用新技术 移动端开发需要我们掌握:

  1. html5新特性
  2. css3新特性
  3. 移动端的事件、常用库
  4. 本地存储localStorage
  5. geolocation
  6. 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

  1. <link rel="stylesheet/less" href="less文件">

2. 引入编译js的文件

  • 开发环境编译,只需要引入编译less的js文件即可
  1. <script src="less-2.5.3.min.js"></script>

实际项目中我们使用webpack、gulp或者grunt等打包工具中的less编译等功能在打包的时候自动打包并且插入到页面中;

less语法

原来的css:

  1. .box {
  2. width: 200px;
  3. height: 200px;
  4. background: skyblue;
  5. }
  6. .box a {
  7. color: red;
  8. }

改写成less

  1. .box {
  2. .centerPos(200, 200);
  3. width: 200px;
  4. height: 200px;
  5. background: skyblue;
  6. a {
  7. color: red;
  8. }
  9. }

1. less中的变量

  • less 变量:

存储值代表值,以后再用这个值,使用这个变量即可,如果以需要修改,只需要修改这个变量,那么所有用到这个变量的时候只要用到这个就改了;

  • 声明一个变量:

语法: @变量名

  1. @bg-src:"../img/"; /*使用图片资源变迁引入 变量存储,以及拼接*/
  2. @link-color: #000; /* 可以使用 - */
  3. @wid: 200px;
  4. /*使用变量*/
  5. a {
  6. color: @link-color;
  7. width: @wid;
  8. background: url("@{bg-src}1.jpg") no-repeat center;
  9. }

2. less 中的嵌套语法

  1. less中使用嵌套表示层级;html代码如下
  1. <div class="outer">
  2. <div class="inner">
  3. <div class="center"><a href="" class="link"></a></div>
  4. </div>
  5. </div>

less代码

  1. .outer {
  2. .inner {
  3. .center {
  4. a {
  5. }
  6. }
  7. }
  8. }
  1. 在less的嵌套语法中使用 &表示花括号外面的选择器后面紧跟着XX

.pub {

  1. .bg { /*.pub .bg 后代选择器*/
  2. }
  3. & > .bg { /*.pub > .bg 子级选择器*/
  4. }
  5. &.bg { /*.pub.bg 交集选择器*/
  6. }
  7. &:hover { /*.pub:hover 使用伪类*/
  8. }

}

  1. less 嵌套会形成作用域
  1. @width: 100px;
  2. /*嵌套语法,& 使用*/
  3. .pub {
  4. @width: 200px;
  5. .bg {
  6. width: @width; /*.bg最终的width使用的200px*/
  7. }
  8. }
  1. less 中使用函数

less中可以声明函数

  1. .transition(@property: all, @duration: .5s, @timing-function: linear, @delay: 0s) {
  2. transition: @arguments;
  3. }
  4. .cc {
  5. .transition; /*啥也不传时使用默认值*/
  6. .transition(@duration: 1s); /*只修改duration*/
  7. }

四、css3中新增特性

  1. border-radius
  1. .box {
  2. border-radius: 50%;
  3. }
  1. box-shadow: h v blur spread color inset;
  • h 阴影水平偏移值
  • v 阴影竖直偏移值
  • blur 模糊尺寸(可选)
  • spread 阴影尺寸(可选)
  • color 阴影颜色(可选)
  • inset 内置阴影(可选)
  1. .box {
  2. box-shadow: 5px 5px 10px 10px #000;
  3. }
  1. text-shadow: h-shadow v-shadow blur color;
  1. .box {
  2. text-shadow: 5px 5px 10px #000;
  3. }
  1. background-size: 值如下
  • 100px 100px 具体值
  • 100% 100% 宽高百分比(相对于所在容器)
  • cover 以合适的比例把图片整个容器覆盖,但是容器不一定漏出整个图片
  • contain 保证图片纵横比例不变铺满容器的尺寸较小一个方向,另一边根据图片综合比例计算(当一边铺满后,另一边不一定铺满)
  1. background-clip: 值如下
  • border-box 裁切到边框
  • padding-box 裁切到padding
  • content-box 裁切到内容区域
  • text 只填充文本(需要-webkit)

五、CSS3过渡动画

  1. <div id="box" class="box"></div>
  1. .box {
  2. background: #00b38a;
  3. width: 200px;
  4. height: 200px;
  5. transition: all .5s linear 0s;
  6. }
  7. #box:hover {
  8. width: 300px;
  9. height: 300px;
  10. }

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*

示例:

  1. #box:hover {
  2. width: 300px;
  3. height: 300px;
  4. transform: scale(2, 0.5);
  5. }
  6. #box:hover {
  7. width: 300px;
  8. height: 300px;
  9. transform: translate(100px, 100px);
  10. }
  11. #box:hover {
  12. width: 300px;
  13. height: 300px;
  14. transform:rotate(360deg);
  15. }
  16. #box:hover {
  17. transform: skew(0, 45deg);
  18. }

七、关键帧动画

CSS3中使用 @keyframes 定义关键帧动画,使用animation属性调用;

html代码:

  1. <div class="box" id="box"></div>

CSS定义关键帧动画:

  1. @keyframes shake {
  2. 0% {
  3. transform: rotate(45deg);
  4. }
  5. 25% {
  6. transform: rotate(-0deg);
  7. }
  8. 50% {
  9. transform: rotate(-45deg);
  10. }
  11. 75% {
  12. transform: rotate(0deg);
  13. }
  14. 100% {
  15. transform: rotate(45deg);
  16. }
  17. }

调用关键帧动画:

  1. .box {
  2. width: 120px;
  3. height: 300px;
  4. background: url(clock.png) no-repeat;
  5. margin: 20px auto;
  6. transform-origin: center top; /*设置旋转元素的基点位置*/
  7. animation: shake 2s linear 0s infinite; /*调用关键帧动画*/
  8. }

animation属性详解:
animation是一个合成属性,由以下属性合成:

  • animation-name: 运动轨迹名称 @keyframes 定义一个轨迹名称
  • animation-duration: 运动轨迹运动时间
  • animation-timing-function: 运动效果 (linear ease-in ease-out..)
  • animation-delay: 延迟时间
  • animation-iteration-count: 动画执行次数,默认1,infinite 无数次