渐变和动画
渐变
CSS3中,我们为了添加某种效果可以从一种样式转变到另一个的时候,无需使用Flash动画或JavaScript。使用 transition 即可。
CSS3 过渡是元素从一种样式逐渐改变为另一种的效果。 要实现这一点,必须规定两项内容:
- 指定要添加效果的CSS属性
 - 指定效果的持续时间。
 
比如:我们需要在 .trans 宽度变化时使用渐变,耗时 2s,只需要声明
.trans {
  transition: width 2s;
  width: 200px;
}
然后当鼠标悬浮的时候让宽度从 200px 变为 300px
.trans:hover {
  width:300px;
}
如果我们需要添加多个样式的变换效果,添加的属性由逗号分隔:
.trans {
  transition: width 2s, height 2s, transform 2s;
}
其实,transition 属性是缩写属性,详细属性如下
| 属性 | 描述 | 
|---|---|
| transition | 简写属性,用于在一个属性中设置四个过渡属性。 | 
| transition-property | 规定应用过渡的 CSS 属性的名称。 | 
| transition-duration | 定义过渡效果花费的时间。默认是 0。 | 
| transition-timing-function | 规定过渡效果的时间曲线。默认是 "ease"。 | 
| transition-delay | 规定过渡效果何时开始。默认是 0。 | 
其中,transition-timing-function 可选值如下:
| 值 | 描述 | 
|---|---|
| linear | 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))。 | 
| ease | 规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。 | 
| ease-in | 规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。 | 
| ease-out | 规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。 | 
| ease-in-out | 规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。 | 
| cubic-bezier(n,n,n,n) | 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值。 | 
我们可以使用渐变完成很多“动画”效果,如码蜂社官网的导航条。
动画
要创建CSS3动画,你将不得不了解 @keyframes 规则。
@keyframes 规则是创建动画。 @keyframes 规则内指定一个CSS样式和动画将逐步从目前的样式更改为新的样式。
我们可以指定一个动画,将背景从红色变为黄色:
@keyframes animation-name
{
    from {background: red;}
    to {background: yellow;}
}
或者使用动画完成百分比声明:
@keyframes animation-name
{
    0% {background: red;}
    100% {background: yellow;}
}
我们可以使用百分比实现更细粒度的控制:
@keyframes animation-name
{
    0%   {background: red;}
    25%  {background: yellow;}
    50%  {background: blue;}
    100% {background: green;}
}
转换(transform)
为了实现动画效果,我们往往需要让目标平移,拉升或是旋转。transform 属性即可完成我们的需求。transform 与 position: relative 类似,不改变元素原先在文档流中的位置,只是视觉上显示位置发生改变。
translate
translate()方法,根据左(X轴)和顶部(Y轴)位置给定的参数,从当前元素位置移动。
如下代码可以将一个 div 向右平移 50px,向下平移 100px
div {
  transform: translate(50px,100px)
}
rotate
rotate()方法,在一个给定度数顺时针旋转的元素。负值是允许的,这样是元素逆时针旋转。
如下代码可以将一个 div 旋转30度
div {
  transform: rotate(30deg);
}
scale
scale()方法,该元素增加或减少的大小,取决于宽度(X轴)和高度(Y轴)的参数;
如下代码可以将一个 div 水平拉升到原来的 2 倍,垂直拉升到原来的 3 倍
div {
  transform:scale(2,3)
}
3D 转换
CSS3 允许对元素使用 3D 转换。
具体使用和参数与 2D 类似,详细可参考下表:
| 函数 | 描述 | 
|---|---|
| translate3d(x,y,z) | 定义 3D 转化。 | 
| translateX(x) | 定义 3D 转化,仅使用用于 X 轴的值。 | 
| translateY(y) | 定义 3D 转化,仅使用用于 Y 轴的值。 | 
| translateZ(z) | 定义 3D 转化,仅使用用于 Z 轴的值。 | 
| scale3d(x,y,z) | 定义 3D 缩放转换。 | 
| scaleX(x) | 定义 3D 缩放转换,通过给定一个 X 轴的值。 | 
| scaleY(y) | 定义 3D 缩放转换,通过给定一个 Y 轴的值。 | 
| scaleZ(z) | 定义 3D 缩放转换,通过给定一个 Z 轴的值。 | 
| rotate3d(x,y,z,angle) | 定义 3D 旋转。 | 
| rotateX(angle) | 定义沿 X 轴的 3D 旋转。 | 
| rotateY(angle) | 定义沿 Y 轴的 3D 旋转。 | 
| rotateZ(angle) | 定义沿 Z 轴的 3D 旋转。 | 
| perspective(n) | 定义 3D 转换元素的透视视图。 | 
实战
完成以下 loading 图