CSS3 入门详解(二)

11. 动画

动画是 CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。

11.1 如何实现动画

必要元素:

  • a、通过@keyframes指定动画序列;
  • b、通过百分比将动画序列分割成多个节点;
  • c、在各节点中分别定义各属性
  • d、通过animation将动画应用于相应元素;

示例代码: 两种定义动画的方式

11.2 动画关键属性

关键属性

  • a、animation-name设置动画序列名称
  • b、animation-duration动画持续时间
  • c、animation-delay动画延时时间
  • d、animation-timing-function动画执行速度,linearease
  • e、animation-play-state动画播放状态,runningpaused
  • f、animation-direction动画逆播,alternate
  • g、animation-fill-mode动画执行完毕后状态,forwardsbackwards
  • h、animation-iteration-count动画执行次数,inifinate
  • i、steps(60)表示动画分成60步完成

参数值的顺序:

关于几个值,除了名字,动画时间,延时有严格顺序要求其它随意。

示例代码:



效果图:

11.3 动画案例

1、全屏切换

定义三个动画集,当点击 a标签的时候,通过他的锚点触发对应的动画集。


1 2 3

效果图:

2、大海波涛

波浪其实是两张图片,执行的是同一组动画,只需要在第二张图片执行动画的时候,让它延迟 1s执行,就可以出现“波动”的感觉。


 

效果图:

3、宇宙

通过定位确定各“星球”的位置,再对每个星球设定单独的动画,形成联动的各大星球。


            

效果图:

4、无缝滚动轮播

结构上与普通的轮播图没有什么区别,定义一个盒子的宽度,宽度为八张图片的总宽度,定义一个动画集, 10s内将 ul0的位置移动到盒子的宽度,此时动画集结束,应该是跳到 0的位置,循环此动画就会形成无缝滚动。之所以 ul下的 li定义的是十四张图片,是因为,一开始的时候图片从零的位置向右移动时,如果只有七张图片的时候,右边是空白的,只有完全到达盒子宽的时候,整个图片才会显示完整,用户体验很差,所以需要用到障眼法,就是用 14张图片。



效果图:

5、进度条

前面已经接触了一个 demo,只不过是一个静态的进度条,现在我们通过动画,让他动起来。



效果图:

6、时钟案例

本时钟案例,主要是依赖CSS3中动画以及旋转的概念实现的。



效果图:

7、魔方案例




  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

效果图:

12. 伸缩布局

本章节摘自阮一峰老师的《Flex 布局教程》

CSS3在布局方面做了非常大的改进,使得我们对块级元素的布局排列变得十分灵活,适应性非常强,其强大的伸缩性,在响应式开中可以发挥极大的作用。伸缩布局也叫弹性布局或者 flex布局。

12.1 什么是伸缩布局

FlexFlexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为Flex布局。

.box{
  display: flex;
}

行内元素也可以使用Flex布局。

.box{
  display: inline-flex;
}

Webkit内核的浏览器,必须加上-webkit前缀。

.box{
  display: -webkit-flex; /* Safari */
  display: flex;
}

注意,设为Flex布局以后,子元素的floatclearvertical-align属性将失效。

12.2 基本概念

浏览器兼容性:

学习几个新概念:

  • 主轴:Flex容器的主轴主要用来配置Flex项目,默认是水平方向
  • 侧轴:与主轴垂直的轴称作侧轴,默认是垂直方向的
  • 方向:默认主轴从左向右,侧轴默认从上到下
  • 主轴和侧轴并不是固定不变的,通过flex-direction可以互换。

12.3 flex-direction属性

flex-direction属性决定主轴的方向(即项目的排列方向)。
.box { flex-direction: row | row-reverse | column | column-reverse; }

参数说明:

  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

示例代码:



flex-direction: row 水平向右

1
2
3
4

flex-direction: row-reverse 水平向左

1
2
3
4

flex-direction: column 垂直向下

1
2
3
4

flex-direction: column-reverse 垂直向上

1
2
3
4

效果图:

12.4 flex-wrap 属性

默认情况下,项目都排在一条线(又称"轴线")上。 flex-wrap属性定义,如果一条轴线排不下,如何换行。
.box{
    flex-wrap: nowrap | wrap | wrap-reverse; 
}

参数说明:

  • nowrap(默认):不换行,宽度自动适应;
  • wrap:换行,第一行在上方;
  • wrap-reverse:换行,第一行在下方

示例代码:



nowrap(默认):不换行。

1
2
3
4
5
6
7

wrap:换行,第一行在上方。

1
2
3
4
5
6
7

wrap-reverse:换行,第一行在下方。

1
2
3
4
5
6
7

效果图:

12.5 flex-flow 属性

flex-flow属性是 flex-direction属性和 flex-wrap属性的简写形式,默认值为 row nowrap
.box {
  flex-flow:  || ;
}

示例代码:



row nowrap(默认):不换行。

1
2
3
4
5
6
7

效果图:

12.6 justify-content 属性

justify-content属性定义了项目在主轴上的对齐方式。
.box {
  justify-content: flex-start | flex-end | center | space-between | space-around;
}

参数说明:

  • flex-start:(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

示例代码:



flex-start(默认值):左对齐

1
2
3
4

flex-end:右对齐

1
2
3
4

center: 居中

1
2
3
4

space-between:两端对齐,项目之间的间隔都相等。

1
2
3
4

space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

1
2
3
4

效果图:

12.7 align-items 属性

align-items属性定义项目在交叉轴上如何对齐。
.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
}

参数说明:

  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

示例代码:



flex-start:交叉轴的起点对齐。

1
2
3
4

flex-end:交叉轴的终点对齐。

1
2
3
4

center:交叉轴的中点对齐。

1
2
3
4

baseline: 项目的第一行文字的基线对齐。

1
2
3
4

stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

1
2
3
4

效果图:

12.8 align-content 属性

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
.box {
    align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}

参数说明:

  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。

示例代码:



flex-start:交叉轴的起点对齐。

1
2
3
4
5
6
7
8
9
10
11
12

flex-end:与交叉轴的终点对齐。

1
2
3
4
5
6
7
8
9
10
11
12

center:与交叉轴的中点对齐。

1
2
3
4
5
6
7
8
9
10
11
12

space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。

1
2
3
4
5
6
7
8
9
10
11
12

space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

1
2
3
4
5
6
7
8
9
10
11
12

stretch(默认值):轴线占满整个交叉轴。

1
2
3
4
5
6
7
8
9
10
11
12

效果图:

12.9 Order 属性

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为 0
.item {
    order: ; 
}

参数说明:

  • order属性值是一个数值,可以是正数,也可以是负数,在当前项目里,数值越小,排列越靠前。

示例代码:



1
2
3
4
(order:-1)

效果图:

12.10 flex-grow 属性

flex-grow属性定义项目的放大比例,默认为 0,即如果存在剩余空间,也不放大。
.item { 
    flex-grow: ; /* default 0 */ 
}

参数说明:

  • 如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

示例代码:



1
flex-grow: 1
2
flex-grow: 2
3
flex-grow: 1

效果图:

12.11 flex-shrink 属性

flex-shrink属性定义了项目的缩小比例,默认为 1,即如果空间不足,该项目将缩小。
.item {
    flex-shrink: ; /* default 1 */ 
}

参数说明:

  • 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
  • 负值对该属性无效。

示例代码:



1
flex-shrink: 0
2
3

效果图:

12.12 flex-basis 属性

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间( main-size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为 auto,即项目的本来大小。
.item { 
    flex-basis: ; | auto; /* default auto */ 
}

示例代码:



1
2
3

效果图:

12.13 flex 属性

flex属性是 flex-grow, flex-shrinkflex-basis的简写,默认值为 0 1 auto。后两个属性可选。

该属性有两个快捷值:auto (1 1 auto)none (0 0 auto)

.item { 
    flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] 
}

12.14 align-self 属性

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items属性。默认值为 auto,表示继承父元素的 align-items属性,如果没有父元素,则等同于 stretch
.item {
    align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

参数说明:

  • auto:表示继承父元素的align-items属性,如果没有父元素,则等同于stretch
  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

示例代码:



stretch(默认值):轴线占满整个交叉轴。

1
2
3
flex-end
4

效果图:

你可能感兴趣的:(css3,flex,css3动画)