5分钟学会CSS动画-Part2:animation

Part1看这里:Transition


学会Animation能够写出比单纯的transition炫酷的多的动画效果,要学习animation前先要了解keyframes的写法,这两个属性必须要成对使用才有效果。

1 keyframes

语法

@keyframes [name] {
  from {
    [styles];
       }
  to {
    [styles];
     }
}

keyframes不需要任何选择器。name可以随便起。from后面的大括号描述某个动画开始是怎么样的,to后面描述结束是怎么样的。
比如

@keyframes myframes {
    from {
        height: 200px;
        background: orange;
    }
    to {
        height: 480px;
        background: pink;
        }
}

更高级点的写法是把from和to换成0%和100%

@keyframes myframes {
0% {
    height: 200px
    }
100% { 
    height: 600px
    background: orange
    } 
} 

这样做的好处是,你可以尽情添加更多的keyframe百分比,描述更细致的动画效果,甚至不需要按照0-100的顺序来写,比如下面的写法也是可以的:

@keyframes myframes {
  0% {
    height: 200px
          }
  30%, 100% {
    width: 400px
          }
  70% {
    height: 600px
    background: orange
          }
    }

2 Animation

有了keyframes,就可以在animation中使用它们来给元素添加动画。

2.1 语法

.element {
    animation: [name][duration][timeing-function][delay][iteration-count][direction][fill-mode][play-state];
    }

animation是需要放在css选择器中的,属性中的第一个name就是需要跟keyframes的name相呼应的。比如下面的缩写方式:

 .element {
    animation: myframes 2s ease-in 0s infinite normal forwards paused;
    }

2.2 animation属性详解

要彻底掌握animation,需要逐项弄清楚这些属性究竟是什么意思:

  animation-name: myframes 
  animation-duration: 2s 
  animation-delay: 0s
  animation-timeing-function: ease-in-out  
  animation-iteration-count: infinite
  animation-direaction: normal
  animation-fill-mode: forwards
  animation-play-state: running
  • animation-delay 是我们需要等多久能看到动画开始,而不是每次动画之间的间隔。如果想要控制每次动画的间隔,需要写在keyframe的百分比中间。

  • animation-direction可以是正常的normal,也可以是reverse,就是倒着来从100%到0%,可以配合animation-iteration-count比如count:3,就倒着执行3次。还可以是alternate,正着1次,倒着1次,正着1次,这样算3次。

  • animation-fill-mode 非常有用!它会控制动画结束之后这个元素的停止状态。normal就是最正常的反回最初的状态,而forwards则会让元素停在动画结束的最后1帧的状态。我经常使用fowards这个参数让元素停止在动画结束的状态。

  • animation-play-state 可以是running或者是paused,paused可以在任何时间点暂停动画,配合js使用。

2.3 如何触发animation动画

  1. hover伪类
  2. class改变
  3. 增加新元素

2.4 示例应用

  • 1
notify.gif

查看我的codepen代码
像这样一个通知小动画,当某个元素被hover的时候,出现一个小通知,告知用户有几个新评论几个新的点赞。
实现方法是先写好一个自定义的keyframes(用Sass,所以没写花括号和分号)

@keyframes note
    0%
      opacity: 0
      transform: scale(0.1) rotate(30deg) translateY(50px) rotateX(90deg)
  50%
      transform: rotate(-10deg) rotateX(-2deg)
      opacity: 1
  70%
      transform: rotate(3deg)
  100%
      transform: scale(1)  

先将通知元素隐藏,display: none。当元素被hover的时候,display: flex(或者block,这里用flex是因为通知元素内部的布局需要),并且执行 animation: note 800ms ease-in-out forwards , fowards是为了让动画执行完停止在最后一帧而不是消失,note就是自定义的keyframes。

  • 2
    第二个示例是当导航变化的时候,四种list-view出现的动画效果:
appear.gif

查看我的codepen代码

触发动画的方式是添加class。给点击的导航添加一个.active的class。

这个动画的重点是如何实现每个item渐次出现的效果,秘诀就是要给每个item添加不一样的animation-delay:

如果你也用Sass写css的话,只要写个for循环,就能非常容易的实现:

  .menu-3 
    li
      opacity: 0

      @for $i from 1 through 6
        &:nth-child(#{$i})
          animation:
            name: menu3
            duration: 300ms
            timeing-function: ease-in-out
            fill-mode: forwards
           //这里的delay就是渐次效果的关键
            delay: 100ms * $i - 100

不用sass,直接写css也是可以的,可以查看源码中css编译之后的结果。

如果觉得有用,请给我点个赞吧(ง •̀_•́)ง!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,653评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,321评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,833评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,472评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,306评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,274评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,658评论 3 385
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,335评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,638评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,697评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,454评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,311评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,699评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,986评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,254评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,647评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,847评论 2 335

推荐阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,723评论 0 2
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,299评论 0 11
  • CSS 中的 transform,transition 和 animation 是分开的三部分内容,其中 tran...
    teabyii阅读 1,279评论 0 25
  • CSS 中的 transform,transition 和 animation 是分开的三部分内容,其中 tran...
    单纯的土豆阅读 710评论 0 4
  • 管理情绪 一个灵感:今天的我脑袋里突然蹦出了一个灵感,突然想明白了为什么我被别人刺激了之后会非常的生气,而且在这个...
    暖心之地阅读 457评论 0 2