LeaVerou 大牛 2014 jsconf > asia speech
http://lea.verou.me/css-4d/ b站视频资源 https://www.bilibili.com/video/av22257628/
阮一峰老师推荐 http://www.ruanyifeng.com/blog/2014/02/css_transition_and_animation.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>CSS 3 transition & animation</title><link rel="stylesheet" href="style.css" /></head><body><img class="spiral" src="./img/spiral.png"></img><div class="heart"><img src="./img/heart.svg"></img></div><div style="display: flex;"><div class="barX"><span>rotateX</span><img src="./img/frames.png"></img></div><div class="barY"><span>rotateY</span><img src="./img/frames.png"></img></div><div class="barZ"><span>rotateZ</span><img src="./img/frames.png"></img></div></div></body></html>
@keyframes living {from {transform: rotate(0deg);}50% {transform: rotate(180deg);}to {transform: rotate(360deg);}}.spiral {width: 150px;height: 150px;animation: 5s 3s living linear infinite;/* transition-duration */transition: 3s;/* transition-property *//* transition: 3s height; *//* transition: 2s width, 2s height; *//* transition-delay *//* transition: 2s height, 2s 2s width; *//* transition-timing-function *//* transition: 2s height linear, 2s 2s width ease-in-out; *//* transition: 1s cubic-bezier(0.83, 0.97, 0.05, 1.44); */}/*transition需要明确知道,开始状态和结束状态的具体数值,才能计算出中间状态。比如,height从0px变化到100px,transition可以算出中间状态。但是,transition没法算出0px到auto的中间状态,也就是说,如果开始或结束的设置是height: auto,那么就不会产生动画效果。类似的情况还有,display: none到block,background: url(foo.jpg)到url(bar.jpg)等等。*/.spiral:hover {width: 300px;height: 300px;/* transform: none; *//* 转换——移动 *//* transform: translate(100px, 50px); *//* transform: translate3d(100px, 200px, 30px); *//* transform: translateX(200px); *//* transform: translateY(200px); *//* 转换——缩放 *//* transform: scale(1.2); *//* transform: scale(0.8, 1.2); *//* transform: scale3d(0.8, 0.9, 1.1); *//* transform: scaleX(0.5); *//* transform: scaleY(0.5); *//* transform: scaleZ(1); *//* 转换——旋转 *//* transform: rotate(90deg); *//* transform: rotate3d(10, 20, 30, 60deg); *//* transform: rotateX(60deg); *//* transform: rotateY(60deg); *//* transform: rotateZ(60deg); *//* 转换——倾斜 *//* transform: skew(30deg, 30deg); *//* transform: skewX(30deg); *//* transform: skewY(60deg); */}/*transition的优点在于简单易用,但是它有几个很大的局限。(1)transition需要事件触发,所以没法在网页加载时自动发生。(2)transition是一次性的,不能重复发生,除非一再触发。(3)transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。(4)一条transition规则,只能定义一个属性的变化,不能涉及多个属性。CSS Animation就是为了解决这些问题而提出的。*//* 三个状态 */@keyframes rainbow {from {background: #c00;}50% {background: orange;}to {background: yellowgreen;}}@keyframes beats {from,to {transform: scale(0.8) translateX(-50px);}/* 25% {transform: scale(1) translate(0);} */50% {transform: scale(1.2) translateX(50px);}/* 75% {transform: scale(1) translate(0);} */}.heart {width: 500px;height: 300px;text-align: center;/* 如果想让动画保持突然终止时的状态,就要使用animation-play-state属性 */animation: 1s rainbow infinite;animation-play-state: paused;}.heart img {width: 300px;height: 300px;}.heart:hover {/* animation: name duration timing-function delay iteration-count direction fill-mode; *//* 默认情况下,动画只播放一次。 animation-duration animation-name *//* animation: 1s rainbow; *//* animation-timing-function linear、ease-in *//* animation: 1s rainbow linear; *//* animation-delay *//* animation: 1s rainbow ease-in 2s; *//* 指定播放次数 iteration-count *//* animation: 2s rainbow 3; *//* infinite关键字,可以让动画无限次播放 infinite... *//* animation: 1s rainbow infinite; *//* animation-direction: normal、alternate、reverse、alternate-reverse *//* animation: 2s rainbow 3 normal; *//* animation: 2s rainbow 3 alternate; *//* animation: 2s rainbow 3 reverse; *//* animation: 2s rainbow 3 alternate-reverse; *//* 保持在结束状态, animation-fill-mode: none/forwards/backwards/both *//* animation: 2s rainbow forwards; *//* 浏览器从一个状态向另一个状态过渡,是平滑过渡。steps函数可以实现分步过渡。 *//* animation: 1s rainbow infinite steps(10); */animation-play-state: running;}.heart img:hover {animation: 1s beats infinite;}@keyframes rotateX {from {transform: rotateX(0deg);}50% {transform: rotateX(180deg);}to {transform: rotateX(360deg);}}@keyframes rotateY {from {transform: rotateY(0deg);}50% {transform: rotateY(180deg);}to {transform: rotateY(360deg);}}@keyframes rotateZ {from {transform: rotateZ(0deg);}50% {transform: rotateZ(180deg);}to {transform: rotateZ(360deg);}}.barX {width: 300px;height: 300px;line-height: 150px;}.barX img {width: 100%;animation: 1s rotateX linear infinite;}.barY {width: 300px;height: 300px;line-height: 150px;}.barY img {width: 100%;animation: 3s rotateY linear infinite alternate;}.barZ {width: 300px;height: 300px;line-height: 150px;}.barZ img {width: 100%;animation: 5s rotateZ linear infinite reverse;}
spiral.png
heart.svg
frames.png
