前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!

  • translate:平移;是transform的一个属性;
  • transform:变形;是一个静态属性,可以改变元素的形状或位置,做出 2d 或 3d 效果;
  • transition:过渡,转变;使 css 属性值在一段时间内平滑的变化,需要有触发条件(如 hover 等),是 animation 的简化版;
  • animation:动画;可以设置多帧效果,然后把它们组合变换,按动画效果展示出来;

transition

  过渡,右有四个子属性:

  • transition-property:过渡属性,默认为 all;
  • transition-duration:过渡效果花费的时间,默认值是0,以秒或毫秒计,不能为负值;
  • transition-timing-function:定义过渡效果的速度,默认值 ease(开始和结束慢,中间快),可以设置 linear(匀速)、ease-in(慢速开始)、ease-out(慢速结束)、ease-in-out(和ease类似,开始和结束慢,但是中间更快)、贝塞尔曲线;
  • transition-delay:定义过渡延时时间;默认值为0(直接开始),以秒或毫秒计,可为负值;
  • transition的四个子属性可以缩写,用空格隔开;其中 duration(过渡时间)和 delay(延时时间)两个值都是时间,当两个值都存在时,第一个是 duration(过渡时间),第二个是 delay(延时时间);如果只存在1个时间,那就是 duration(过渡时间),delay(延时时间)默认为0;
  • transition可以同时设置多个属性的过渡效果,用逗号隔开;
  • transition需要有触发条件,animation 则不需要;

  建议看 大神的这篇博文,讲的比较详细,里面还有关于 API 的东西;

  

  想整个 hover 效果的,弄了好久,又是 iframe(在 jsrun.cn 网站上做出效果,然后分享,自动生成 iframe 链接),又是 js 的,都没弄出来,好像是没有 js 权限,懒得整了。

  <style type="text/css">
* {
padding: 0;
margin: 0;
} .wrapper {
margin: 100px;
height: 300px;
border: 10px solid #f0f;
background: #0ff;
position: relative;
cursor: pointer;
} .test {
width: 100px;
height: 100px;
background: #f60;
position: absolute;
left: 30px;
top: 30px;
transition: width 1s ease-in-out 2s,
height 2s ease-in,
background 3s linear,
left .5s ease-out,
top 1.5s ease-in;
} .wrapper:hover .test {
width: 150px;
height: 50px;
background: #ff0;
left: 200px;
top: 150px;
}
</style>
<div class="wrapper">
<div class="test"></div>
</div>

animation

  动画,一种样式到另一种样式的动画效果,可以改变任意多的次数任意多的样式,用百分比来规定发生的时间,或关键词"from"和"to",等同于"0%"和"100%";

  1. 先用 @keyframes 定义动画的名称,然后根据时间轴来写不同的动画效果;
  2. 在需要做动画效果的元素身上设置 animation 属性,并绑定动画名称,然后设置动画持续时间、时间函数、延时、播放次数、播放方向、播放状态、填充模式等;

@keyframes:

  • @keyframes,声明动画名称;时间轴的百分比顺序可以随便排列,最后浏览器都是从0%到100%按顺序解析,0%不可以省略百分号;
  • 设置小于0%或者大于100%的百分比是无效的;
  • 如果0%或100%没有写动画效果的属性,那么将应用元素默认的属性值;
  • 如果多个 @keyframes 的名称相同,那么只有最后一个有效,如果最后一个 @keyframes 没有写任何属性,那么动画效果就是没有的(不管前面相同名称的 @keyframes)

animation-duration

  动画执行完成所需时间,默认为0(没有动画效果),不能为负值,否则将没有动画效果;

animation-timing-function

  类似与transition的时间函数,默认值ease(开始和结束慢,中间快),可以设置linear(匀速)、ease-in(慢速开始)、ease-out(慢速结束)、ease-in-out(和ease类似,开始和结束慢,但是中间更快)、贝塞尔曲线;

animation-delay

  定义延时多长时间后开始播放动画;可以设置负值(从提前多少秒的位置开始播放动画);

animation-interation-count

  循环次数,默认值是1,可以设置整数或小数,不能是0以及负值,也可以设置关键词"infinite"(无限次数);

animation-direction

  默认值 normal(正向),可设置 reverse(反向)、alternate(在奇数次正向,偶数次反向;也就是说动画顺序是0%---100%---0%---100%---...)、alternate-reverse(在奇数次反向,偶数次正向,也就是说动画顺序是100%---0%---100%---0%---...);

  safari 浏览器不支持 alternate 和 alternate-revers 属性;

animation-fill-mode

  定义动画开始帧和结束帧的动作;默认值是 none(动画结束后,回归到初始状态,不是0%,是元素本身属性);

  可设置 forwards(元素停留在动画结束的状态,这个值并不一定是100%的位置,因为可能是反向播放,也可能播放次数是小数);

  可设置 backwards(元素停留在动画开始的状态,这个值不一定是0%的位置,因为延迟开始的时间可能是负值);

  可设置 both,意思是同时具有 forwards 和 backwards 的效果;

animation-play-state

  设置动画运行(running)或者暂停(paused);

  建议看 大神的这篇博文,讲的比较详细,里面还有关于API的东西;

  六面体旋转:

  <style type="text/css">
* {
padding: 0;
margin: 0;
} li {
list-style: none;
} .wrapper {
width: 600px;
height: 600px;
margin: 0 auto;
} .demo-container {
position: relative;
width: 600px;
height: 600px;
perspective: 1800px;
/*定义视距*/
} @keyframes bigMove {
0% {
transform: rotateX(-25deg)rotateY(-45deg);
} 20% {
transform: rotateX(-25deg)rotateY(135deg);
} 100% {
transform: rotateX(-25deg)rotateY(135deg);
}
} @keyframes smallMove {
0% {
transform: rotateX(-25deg)rotateY(-45deg);
} 20% {
transform: rotateX(-25deg)rotateY(-405deg);
} 100% {
transform: rotateX(-25deg)rotateY(-405deg);
}
} .box {
width: 300px;
height: 300px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -150px;
margin-top: -150px;
transform: rotateX(-25deg)rotateY(-45deg);
transform-style: preserve-3d;
animation: bigMove 5s infinite ease-in-out 2s;
} .box li {
width: 300px;
height: 300px;
box-shadow: 0 0 5px #98b5e0;
text-align: center;
font: 28px/300px "microsoft yahei";
color: #fff;
position: absolute;
top: 0;
left: 0;
background: radial-gradient(circle, rgba(165, 193, 235, .5) 0%, rgba(134, 167, 218, .5) 50%);
} .box .front {
transform: translateZ(150px);
} .box .back {
transform: translateZ(-150px)rotateY(180deg);
} .box .left {
transform: translateX(-150px)rotateY(-90deg);
} .box .right {
transform: translateX(150px)rotateY(90deg);
} .box .top {
transform: translateY(-150px)rotateX(90deg);
} .box .bottom {
transform: translateY(150px)rotateX(-90deg);
} /*inner*/
.inner {
width: 100px;
height: 100px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -50px;
margin-top: -50px;
transform-style: preserve-3d;
transform: rotateX(-25deg)rotateY(-45deg);
animation: smallMove 5s infinite ease-in-out 2s;
} .inner li {
width: 100px;
height: 100px;
box-shadow: 0 0 2px #0b65ea;
text-align: center;
font: 28px/100px "microsoft yahei";
color: #fff;
position: absolute;
top: 0;
left: 0;
background: radial-gradient(circle, rgba(84, 153, 218, .5) 0%, rgba(73, 130, 215, .5) 50%);
} .inner .front {
transform: translateZ(50px);
} .inner .back {
transform: translateZ(-50px)rotateY(180deg);
} .inner .left {
transform: translateX(-50px)rotateY(-90deg);
} .inner .right {
transform: translateX(50px)rotateY(90deg);
} .inner .top {
transform: translateY(-50px)rotateX(90deg);
} .inner .bottom {
transform: translateY(50px)rotateX(-90deg);
}
</style>
<div class="wrapper">
<div class="demo-container">
<ul class="box">
<li class="front"></li>
<li class="back"></li>
<li class="left"></li>
<li class="right"></li>
<li class="top"></li>
<li class="bottom"></li>
</ul>
<ul class="inner">
<li class="front"></li>
<li class="back"></li>
<li class="left"></li>
<li class="right"></li>
<li class="top"></li>
<li class="bottom"></li>
</ul>
</div>
</div>

  球旋转:

  

  <style type="text/css">
* {
padding: 0;
margin: 0;
} li {
list-style: none;
} body {
background: #000;
} .wrapper {
width: 600px;
height: 600px;
margin: 0 auto;
perspective: 1800px;
} .demo-container {
position: relative;
width: 600px;
height: 600px;
overflow: hidden;
} @keyframes boxXuanzhuan {
0% {
transform: rotateX(50deg)rotateZ(170deg)rotateY(50deg);
} 30% {
transform: rotateY(50deg)rotateX(170deg)rotateZ(30deg);
} 60% {
transform: rotateZ(50deg)rotateY(170deg)rotateX(95deg);
} 100% {
transform: rotateX(50deg)rotateZ(170deg)rotateY(66deg);
}
} .box {
width: 600px;
height: 600px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -300px;
margin-top: -300px;
/*transition: all 3s;*/
/*transform: rotateX(-134deg)rotateY(64deg);*/
transform-style: preserve-3d;
animation: boxXuanzhuan 30s infinite ease alternate;
} @keyframes liXuanZhuan {
0% {
background: #acf91a;
color: #00B700;
border-radius: 50%;
width: 50px;
height: 30px;
box-shadow: 0 0 10px #adff2f;
} 30% {
background: #f9641a;
color: #f71af9;
border-radius: 20%;
width: 60px;
height: 50px;
box-shadow: 0 0 10px #818217;
} 70% {
background: #6932bf;
color: #FFFFFF;
border-radius: 50%;
width: 50px;
height: 50px;
box-shadow: 0 0 10px #adff2f;
} 100% {
background: #acf91a;
color: #00B700;
border-radius: 10%;
width: 50px;
height: 30px;
box-shadow: 0 0 10px #adff2f;
}
} .box li {
background: #00FF99;
position: absolute;
width: 60px;
height: 60px;
left: 50%;
top: 50%;
margin-left: -30px;
margin-top: -30px;
font: 22px/60px "microsoft yahei";
color: #F08787;
border-radius: 50%;
text-align: center;
animation: liXuanZhuan 20s infinite ease alternate;
} .item1 {
transform: translateZ(250px);
} .item2 {
transform: translateZ(-250px);
} .item3 {
transform: rotateY(90deg)translateZ(250px);
} .item4 {
transform: rotateY(-90deg)translateZ(250px);
} .item5 {
transform: rotateY(45deg)translateZ(-250px);
} .item6 {
transform: rotateY(-45deg)translateZ(-250px);
} .item7 {
transform: rotateY(45deg)translateZ(250px);
} .item8 {
transform: rotateY(-45deg)translateZ(250px);
} .item9 {
transform: rotateY(-45deg)rotateX(45deg)translateZ(250px);
} .item10 {
transform: rotateY(-135deg)rotateX(45deg)translateZ(250px);
} .item11 {
transform: rotateY(45deg)rotateX(45deg)translateZ(250px);
} .item12 {
transform: rotateY(135deg)rotateX(45deg)translateZ(250px);
} .item13 {
transform: rotateY(-45deg)rotateX(-45deg)translateZ(250px);
} .item14 {
transform: rotateY(-135deg)rotateX(-45deg)translateZ(250px);
} .item15 {
transform: rotateY(45deg)rotateX(-45deg)translateZ(250px);
} .item16 {
transform: rotateY(135deg)rotateX(-45deg)translateZ(250px);
} .item17 {
transform: rotateX(90deg)translateZ(250px);
} .item18 {
transform: rotateX(-90deg)translateZ(250px);
}
</style>
<div class="wrapper">
<div class="demo-container">
<ul class="box">
<li class="item1"></li>
<li class="item2"></li>
<li class="item3"></li>
<li class="item4"></li>
<li class="item5"></li>
<li class="item6"></li>
<li class="item7"></li>
<li class="item8"></li>
<li class="item9"></li>
<li class="item10"></li>
<li class="item11"></li>
<li class="item12"></li>
<li class="item13"></li>
<li class="item14"></li>
<li class="item15"></li>
<li class="item16"></li>
<li class="item17"></li>
<li class="item18"></li>
</ul>
</div>
</div>

css 动画(二) transition 过渡 & animation 动画的更多相关文章

  1. css010 css的transform transition和animation

    css010 css的transform transition和animation 看着没有一个能想起他们是干什么的.. 1.         Transform    Transform(变形) r ...

  2. transition和animation动画简介

    本文介绍CSS动画的两大组成部分:transition和animation.我不打算给出每一条属性的详尽介绍,那样可以写一本书.这篇文章只是一个简介,帮助初学者了解全貌,同时又是一个快速指南,当你想不 ...

  3. css3动画入门transition、animation

    css3动画 transition.animation CSS3 transition demo <!DOCTYPE html> <html> <head> < ...

  4. css3动画:transition和animation

    概述 之前写过css3 动画与display:none冲突的解决方案,但是最近却发现,使用animation效果比transition好得多,而且不和display:none冲突.下面我把相关新的记录 ...

  5. CSS 3学习——transition 过渡

    以下内容根据官方规范翻译以及自己的理解整理. 1.介绍 这篇文档介绍能够实现隐式过渡的CSS新特性.文档中介绍的CSS新特性描述了CSS属性的值如何在给定的时间内平滑地从一个值变为另一个值. 2.过渡 ...

  6. 30分钟玩转css3动画, transition,animation

    其实css3动画是就是2种实现,一种是transition,另一种就是animation.transition实现的话就是只能定制开始帧,和结束2帧:而animation实现的话可以写很多关键帧.没有 ...

  7. android动画介绍之 自定义Animation动画实现qq抖一抖效果

    昨天我们介绍了Animation的基本用法.小伙伴们了解的怎么样了?如果还没有了解过Animation的小伙伴可以看看这篇博客 android动画介绍--Animation 实现loading动画效果 ...

  8. CSS(十二).transition的应用之CSS中心扩散

    实现 css中心向两边扩散的两个核心 1.hover 之前的 垂直居中 2.文字置于最顶层 顺道来讲讲hover 伪元素是不支持 hover 的,不过我们可以给普通的 tag 标签添加 hover 以 ...

  9. CSS总结六:动画(一)ransition:过渡、animation:动画、贝塞尔曲线、step值的应用

    transition-property transition-duration transition-timing-function transition-delay animation-name a ...

随机推荐

  1. git clone 报“The project you were looking for could not be found.”

    因为自己的项目不止一个 又有自动保存git密码的功能,当clone第二个项目的时候就报了如下错误 之前一直是找到钥匙串删除,发现有时候并没有效果.今天在网上搜了一下 发现了一个新的解决办法 在项目前面 ...

  2. IIS URL Rewriting and ASP.NET Routing

    IIS URL Rewriting and ASP.NET Routing With the release of the URL Rewrite Module for IIS and the inc ...

  3. RT-Thread 柿饼GUI

    目前主流的嵌入式GUI开发技术中,RT-Thread/Persimmon.TouchGFX和emWin是最受人瞩目的.   RT-Thread/ Persimmon是国内主导开发的实时线程操作系统RT ...

  4. group by 分组去重查询

    数据库中的数据是这样的: 想要看看有几种类型,可以用group by: select * from activiti.act_ru_task where PROC_INST_ID_ in (selec ...

  5. 使用Flask构建机器学习模型API

    1. Python环境设置和Flask基础 使用"Anaconda"创建一个虚拟环境.如果你需要在Python中创建你的工作流程,并将依赖项分离出来,或者共享环境设置," ...

  6. vue---vue2.x自定义plugin,给vue添加全局方法,原型上增加全局方法

    1. 自定义plugin.js export default{ install(Vue,options); { Vue.prototype.toStringTwo=(str)=>( ('0000 ...

  7. Intel AI Cloud 使用

    1.申请AI Cloud A ‘training-ready’ hardware like Amazon® EC2, Intel® AI DevCloud, or a GPU-based system ...

  8. 双缓冲技术局部更新原理之派生自View

    package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.Canvas ...

  9. ISO/IEC 9899:2011 条款6.2.2——标识符的连接

    6.2.2 标识符的连接 1.在不同作用域中声明的一个标识符或在同一作用域多次出现的一个标识符可以被用作对同一个对象或函数的引用,通过一个称为连接的过程.[注:在两个不同的标识符之间没有连接.]有三种 ...

  10. 安装TensorFlow时出现ERROR: Cannot uninstall 'wrapt'问题的解决方案

    pip install -U --ignore-installed wrapt enum34 simplejson netaddr pip install -i https://pypi.tuna.t ...