本系列文章,主要是围绕css3属性,实现咱们常见的各类效果,这些效果都是咱们实战开发中常常能够用到的效果:css
- 逐帧动画 - “加载中” 案例
- 闪烁效果
- 打字动画
- 状态平滑的动画
以你们最多见的 “加载中” 的效果为例: html
可是这种方案的缺陷就是gif自己是不透明的,并且咱们没法去加一个特殊样式,只能依靠设计给什么样的效果,咱们就显示什么样的效果。css3
首先,来一张背景图: bash
width: 50px;
height: 50px;
background: url("./img/loader.png") 0 0;
background-size: cover;
复制代码
这个时候,效果就是只显示第一张图片,接下来,咱们添加动画函数
div{
width: 50px;
height: 50px;
background: url("./img/loader.png") 0 0;
background-size: cover;
animation: loader 1s infinite;
}
@keyframes loader {
to {
background-position: -800px 0;
}
}
复制代码
此时,咱们添加完动画之后,发现最后效果并非咱们想要的 ,为何呢?这就回到了咱们此节的标题,逐帧动画布局
默认状况下,动画的运行速度是按贝塞尔曲线运行的,能够简单理解为并非匀速去运行的,那咱们该怎么样调整速度呢? 使用step()函数,它能够传入一个参数,表示这次动画是分几步完成的,例如,step(8) 表示这次动画是分8部完成,也就是总共8帧,且逐帧匀速去执行的。post
因此,最终代码以下:字体
div{
width: 50px;
height: 50px;
background: url("./img/loader.png") 0 0;
background-size: cover;
animation: loader 1s infinite steps(8);
}
@keyframes loader {
to {
background-position: -800px 0;
}
}
复制代码
用css能够实现各类类型的闪烁效果:例如,对整个元素,对文字颜色,对边框颜色等都是能够实现闪烁效果的,这里,咱们以文字闪烁为例, 这也是最多见的一个效果,用于突出提示某些文字的信息。动画
实现思路:首先仍是经过动画去控制文字的颜色,不一样状况下,文字的颜色不一样,这样带来的效果就是文字的闪烁效果。网站
初步代码以下:
//文字开始颜色为黑色,1s后颜色为透明,如此 循环闪烁
p{
animation: blink 1s infinite;
}
@keyframes blink {
to {
color: transparent;
}
}
复制代码
此时的问题:当1s的动画结束之后,文字颜色又由透明变为黑色,此时这个过程是很生硬的直接跳回原来的颜色,那么,如何让文字更加平稳的显现,同时又可让文字更加平稳的隐去,这是接下来要实现的关键。
啦啦啦 ,另一个法宝属性就出来了:animation-direction
animation-direction 的 惟 一 做 用 就 是 反 转 每 一 个 循 环 周 期 (reverse),或第偶数个循环周期(alternate),或第奇数个循环周期 (alternate-reverse)。它的伟大之处在于,它会同时反转调整函数, 从而产生更加逼真的动画效果。看了说明,可能还不太清楚,咱们来看一下图片:
例如:alternate,是反转偶数的循环周期,正常咱们颜色是从黑色变成透明,可是到了第二周期(偶数周期),因为进行了反转,此时颜色就成了从透明变成黑色,如此循环,就是咱们上图中所看到的效果啦,这样看起来确实过分的更加平稳。
最终代码以下:
p{
animation: blink 1s infinite alternate;
}
@keyframes blink {
50% {
color: transparent;
}
}
复制代码
首先,咱们来看一下效果:
实现思路:
让容器的宽度成为动画的主体:把全部文本包裹在这个容 器中,而后让它的宽度从 0 开始以步进动画的方式、一个字一个字地扩张到 它应有的宽度。你可能已经察觉到了,这个方法是有局限的:它并不适用于 多行文本 11 。然而幸运的是,在绝大多数状况下,咱们把这种效果应用在相似 标题的单行文本上。
代码以下:
//html代码
<div>
CSS is awesome!
</div>
//css代码
div{
font-family: Consolas, Monaco, monospace; //这些都是等宽字体
font-size: 30px;
width: 15ch;
white-space: nowrap;
overflow: hidden;
border-right: .05em solid;
animation: write 8s steps(15);
}
@keyframes write{
from {
width: 0
}
}
复制代码
注意:此处咱们用到一个ch单位:在等宽字体中,“0”字形的宽度和其余全部字形的宽度是同样的。因 此,若是咱们用 ch 单位来表达这个标题的宽度,那取值实际上就是字符的 数量:在这个例子中就是 15。
首先,咱们来看一个效果:点击查看,
效果描述:这张图 片本来是横幅的。圆形区域显露 出的是图片的右半部分,而当用 户的鼠标移到图上时,它会缓慢 地向左滚动,从而显露出原先被 裁掉的部分。在默认状况下,当 用户把鼠标移开时,图片会生硬 地跳回原始位置,这很容易让人 误觉得 UI 崩坏了。由于这是一个 很是小的网站,而这张图片又非 常显眼,因此我实在没法对这个 问题视而不见
因此,接下来想要实现的效果的核心就是:如何手动的触发动画的执行,同时如何暂定动画的执行。
固然,答案很简单:animation-play-state ! 它就是为暂停动画专门设计的。
代码以下:
@keyframes panoramic {
to { background-position: 100% 0; }
}
.panoramic {
width: 150px; height: 150px;
background: url("img/naxos-greece.jpg");
background-size: auto 100%;
animation: panoramic 10s linear infinite alternate;
animation-play-state: paused; //默认暂停动画
}
.panoramic:hover, .panoramic:focus {
animation-play-state: running; //鼠标附上去的时候,执行动画
}
复制代码