css3 动画笔记

作者:blue(又名一书and一世界) 我的github
**用途: **当作字典来查

some websites to learn css3Animate

  • css3动画文档 by W3CSchool
  • css3动画简介 by阮一峰
  • css3动画手册 by 腾讯 isux
  • css3动画之硬件加速 by w3cplus
  • 调试css3 动画 keyframe by w3ctech
  • css动画的性能优化 by zencode.in
  • 浏览器是如何渲染页面的 by code.leozhang2018.me (读完了之后会更加懂得如何提升css动画性能)
  • 前端开发体系建设日记 by 张云龙 (这个链接是作为拓展的)

transition

  • grammar: tansition: property duration timing-function delay;
  • detail
    • transition-property:要过渡的css属性
    • transition-duration:要过渡持续多少秒或者毫秒
    • transition-timing-function:速度效果的速度曲线
    • transition-delay:延迟多少秒执行过渡
  • notice
    • 默认值:transition:all 0 ease 0
    • 如果transition-duration属性没有被设置,则默认为0,即不会产生过渡效果
    • tanstion-timing-function: linear/匀速/ | ease-in /加速/ | ease-out /减速/ | ease /逐渐放慢/ | cubic-bezier /函数,自定义速度模式,可以使用 工具网站 这个网站制作/
  • compatibility
    • 目前,各大浏览器(包括IE 10)都已经支持无前缀的transition,所以transition已经可以很安全地不加浏览器前缀。
    • 不是所有的CSS属性都支持transition,完整的列表查看这里,以及具体的效果。
    • transition需要明确知道,开始状态和结束状态的具体数值,才能计算出中间状态。比如,height从0px变化到100px,transition可以算出中间状态。但是,transition没法算出0px到auto的中间状态,也就是说,如果开始或结束的设置是height: auto,那么就不会产生动画效果。类似的情况还有,display: none到block,background: url(foo.jpg)到url(bar.jpg)等等。
  • advantage : 简单易用
  • disavantage
    • transition需要事件触发,所以没法在网页加载时自动发生。
    • transition是一次性的,不能重复发生,除非一再触发。
    • transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。
    • 一条transition规则,只能定义一个属性的变化,不能涉及多个属性。

animation

  • grammar: name duration timing-function delay iteration-count direction
  • detail
    • @keyframes:规定动画
    • animation-name:绑定选择器的keyframe名称
    • animation-duration:动画的持续时间,以秒或者毫秒计
    • animation-timing-function:动画的速度曲线
    • animation-delay:延迟多少秒执行动画
    • animation-iteration-count:动画播放次数
    • animation-diretion:是否应该轮流反向播放动画
    • animation-play-state(通常用在js控制是否播放,object.style.animationPlayState):(paused[停止] | running[播放])规定动画正在播放还是暂停
    • animation-fill-mode(通常用在js控制动画效果是否可见,object.style.animationFillMode):(none[不改变默认行为] | forwards[当动画完成后,保持最后一个属性值] | backwards[在animation-delay 所制定的一段时间内,在动画显示之前,应该开始属性值] | both[向前和向后填充模式都被应用])规定动画在播放之前或之后,其动画效果是否可见。
  • compatibility
    • Internet Explorer 10、Firefox 以及 Opera 支持 @keyframes 规则和 animation 属性。Chrome 和 Safari 需要前缀 -webkit-
    • Internet Explorer 9,以及更早的版本,不支持 @keyframe 规则或 animation 属性
  • notice
    • 默认值:animation:none 0 ease 0 1 normal
    • 尽量少在@keyframe里使用除了transform,opacity,filter以外的元素,因为会触发浏览器的重绘(repaint)详情
    • @keyframe
      • 定义:以百分比来规定改变发生的时间,或者通过关键词"from" 和 "to",等价于0%和100%,0%是动画的开始时间,100%是结束时间
      • grammar:@keyframes animationname{ keyframes-selector { css-styles;} }
      • detail
        • animationname:(必需)定义动画名称
        • keyframes-selector:(必需)动画时长的百分比,合法的值:0%-100%(可以使用 from[0%] 和 to[100%])
        • css-styles:(必需)一个或多个合法的css样式属性
      • example

          @keyframes mymove
          {
            0%   {top:0px;}
            25%  {top:200px;}
            50%  {top:100px;}
            75%  {top:200px;}
            100% {top:0px;}
          }
          @-moz-keyframes mymove /* Firefox */
          {
            0%   {top:0px;}
            25%  {top:200px;}
            50%  {top:100px;}
            75%  {top:200px;}
            100% {top:0px;}
          }

          @-webkit-keyframes mymove /* Safari 和 Chrome */
          {
            0%   {top:0px;}
            25%  {top:200px;}
            50%  {top:100px;}
            75%  {top:200px;}
            100% {top:0px;}
          }

          @-o-keyframes mymove /* Opera */
          {
            0%   {top:0px;}
            25%  {top:200px;}
            50%  {top:100px;}
            75%  {top:200px;}
            100% {top:0px;}
          }

  • 如果animation-duration属性没有设置,则时长为0,即动画不会被播放
  • animation-iteration-count默认值为1,可设置为infinite(无限次播放)
  • animation-direction:normal /正常播放/ | alternate /轮流反向播放/
  • advantage :解决了transition过渡效果不能循环播放的弊端
  • disvantage:目前,IE 10和Firefox(>= 16)支持没有前缀的animation,而chrome不支持,所以必须使用webkit前缀。代码必须写成下面这样。

      div:hover {
        -webkit-animation: 1s rainbow;
        animation: 1s rainbow;  
      }

      @-webkit-keyframes rainbow {
        0% { background: #c00; }
        50% { background: orange; }
        100% { background: yellowgreen; }
      }

      @keyframes rainbow {
        0% { background: #c00; }
        50% { background: orange; }
        100% { background: yellowgreen; }
      }

transform

  • grammar:transform:none | transform-functions
  • detail:none and transform-functions
    • none:不定义转换
    • matrix(n,n,n,n,n,n):定义2D转换,使用六个值的矩阵
    • matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n):定义3D转换,使用16个值的4X4矩阵
    • translate(x,y):定义2D转换(参数:x轴移动量,y轴移动量。+即向右移动,-即向左移动。单独一个量时表示x轴移动量与y轴移动量相等)
    • translate3d(x,y,z):定义3D转换(参数基于translate(x,y)扩展)
    • translateX(x):定义转换,只用于X轴的值
    • translateY(y):定义转换,只用于Y轴的值
    • translateZ(z):定义转换,只用于Z轴的值
    • scale(x,y):定义2D缩放转换(参数x,y是倍数)
    • scale(x,y,z):定义3D缩放转换(参数基于scale(x,y)扩展)
    • scaleX(x):设置X轴的值来定义缩放转换
    • scaleY(y):设置Y轴的值来定义缩放转换
    • scaleZ(z):设置Z轴的值来定义缩放转换
    • rotate(angle):定义2D旋转。在参数中规定角度(正是顺时针,负是逆时针)
    • rotate3d(x,y,z,angle):定义3D旋转
    • rotateX(angle):定义沿着X轴的3D旋转
    • rotateY(angle):定义沿着Y轴的3D旋转
    • rotateZ(angle):定义沿着Z轴的3D旋转
    • skew(x-angle,y-angle):定义沿着X和Y轴的2D倾斜转换
    • skew(angle):定义沿着X轴的2D倾斜转换
    • skew(angle):定义沿着Y轴的2D倾斜转换
    • perspective(n):为3D转换元素定义透视视图
  • compatibility
    • Internet Explorer 10、Firefox、Opera 支持 transform 属性
    • Internet Explorer 9 支持替代的 -ms-transform 属性(仅适用于 2D 转换)
    • Safari 和 Chrome 支持替代的 -webkit-transform 属性(3D 和 2D 转换)
    • Opera 只支持 2D 转换
    • Internet Explorer 10 和 Firefox 支持 3D 转换
    • Chrome 和 Safari 需要前缀 -webkit-
    • Opera 仍然不支持 3D 转换(它只支持 2D 转换)
  • notice
    • transform-origin可以定义改变被转换元素的位置
      • grammar:transform-origin:x-axis,y-axis,z-zxis
      • 默认值:transform-origin:50% 50% 0
      • detail
        • x-axis | y-axis:定义视图被置于X轴的何处。可能的值:left | center | right | length | %
        • z-axis:定义视图被置于Z轴的何处。可能的值:length
      • compatibility
        • Internet Explorer 10、Firefox、Opera 支持 transform-origin 属性
        • Internet Explorer 9 支持替代的 -ms-transform-origin 属性(仅适用于 2D 转换)
        • Safari 和 Chrome 支持替代的 -webkit-transform-origin 属性(3D 和 2D 转换)
        • Opera 只支持 2D 转换
    • transform-style规定如何在3D空间中呈现被嵌套的元素
      • grammar:transform-style:flat | preserve-3d
      • tranform-style默认值:transform-style:flat
      • compatibility
        • Firefox 支持 transform-style 属性
        • Chrome、Safari 和 Opera 支持替代的 -webkit-transform-style 属性
    • perspective定义3D元素距视图的距离,以像素计。
      • grammar:perspective number | none
      • perspective默认值:perspective:none
      • detail
        • 当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身
        • perspective 属性只影响 3D 转换元素
        • 通常和perspective-origin属性配合改变3D元素的底部位置
      • compatibility
        • 目前浏览器都不支持 perspective 属性
        • Chrome 和 Safari 支持替代的 -webkit-perspective 属性
    • perspective-origin定义 3D 元素所基于的 X 轴和 Y 轴。该属性允许您改变 3D 元素的底部位置
      • grammar:perspective-origin:x-axis,y-axis
      • perspective-origin默认值:perspective-origin:50% 50%
      • detail
        • 当为元素定义 perspective-origin 属性时,其子元素会获得透视效果,而不是元素本身
        • 该属性必须与 perspective 属性一同使用,而且只影响 3D 转换元素
      • compatibility
        • 目前浏览器都不支持 perspective-origin 属性
        • Chrome 和 Safari 支持替代的 -webkit-perspecitve-origin 属性
    • backface-visibility定义当元素不面向屏幕时是否可见
      • grammar:backface-visibility: visible | hidden
      • backface-visibility默认值:backface-visibility:visible
      • detail
        • 如果在旋转元素不希望看到其背面时,该属性很有用
      • compatility
        • 只有 Internet Explorer 10+ 和 Firefox 支持 backface-visibility 属性
        • Opera 15+、Safari 和 Chrome 支持替代的 -webkit-backface-visibility 属性

下一篇文章预告: chrome dev tools 简介

你可能感兴趣的:(css3 动画笔记)