可恶,css动画学不会了!

822 阅读4分钟

前言

对于刚学css时的我,经常搞不清这几个属性,由于也不经常用,所以每次再使用的时候就需要重新百度查阅这些属性是干嘛的,所以在这里进行了归纳。

v2-ee7f615551b706e1f9814875ca35f6f1_720w.jpg

属性描述
animation(动画)设置动画属性,,可以用来指定一组或多组动画,每组之间用逗号相隔。
transition(过渡)设置元素的过渡样式
transform(变形)用于元素进行旋转、缩放、移动或倾斜,和设置样式的动画没有什么关系
translate(移动)translate是transform的一个属性值,即移动。
HTML5中的translate是作为规定是否应该翻译元素内容
<p translate="no">请勿翻译本段。</p>
<p>本段可被译为任意语言。</p>

animation

这个属性在官方的介绍上animation是transition的扩展。

属性描述
@keyframes规定动画模式
animation设置所有动画属性的简写属性
animation-delay规定动画开始的延迟
animation-direction规定动画是像前播放,向后播放还是交替播放
animation-duration规定动画完成一个周期应花费的时间
animation-fill-mode规定元素在不播放动画时的样式(在开始前、结束后、或者两者同时)
animation-iteration-count规定动画应播放的次数
animation-name规定 @keyframes 动画的名称。
animation-play-state规定动画是运行还是暂停。
animation-timing-function规定动画的速度曲线。
属性简写:animation: name(名称) duration(周期时间) timing-function(速度曲线) delay(延迟时间) iteration-count(动画播放次数) direction(播放顺序) fill-mode(不播放时的样式) play-state(动画是运行还是暂停);

练习:

.item {
  color: white;
  float: left;
  margin-right: 2%;
}

.content {
  background-color: black;
  height: 25px;
  width: 100%;
  overflow: hidden;
}

.cylon_eye {
  background-color: rgb(162, 0, 255);
  background-image: linear-gradient(to right,
      rgba(0, 0, 0, .9) 25%,
      rgba(0, 0, 0, .1) 50%,
      rgba(0, 0, 0, .9) 75%);
  color: white;
  height: 100%;
  width: 20%;
  
          animation:yao 4s linear 0s infinite alternate ;
}

        @keyframes yao { from { margin-left: -20%; } to { margin-left: 100%; }  }
   
    <div class="content">
        <div class="item"></div>
        <div class="cylon_eye"></div>
      </div>

animation动画.gif

transition

过渡,字面意思上来讲,就是元素从这个属性(color)的某个值(red)过渡到这个属性(color)的另外一个值(green),这是一个状态的转变,需要一种条件来触发这种转变,比如我们平时用到的:hover、:focus、:checked、媒体查询或者JavaScript。 下面是关于这些属性的整理:

属性描述
transition-property规定设置过渡效果的 CSS 属性的名称
transition-duration规定完成过渡效果需要多少秒或毫秒
transition-timing-function规定速度效果的速度曲线
transition-delay定义过渡效果何时开始
属性简写:transition: property duration timing-function delay;

练习:

  .test{
    height: 100px;
    width: 100px;
    font-size: 20px;
    background-color: pink;
    //过渡时间为3秒
    transition-duration: 3s;
    //所有属性都会 获得css效果
    transition-property: all;
    //慢速开始的过渡效果
    transition-timing-function: ease-in;
    //两秒后开始过渡
    transition-delay: 2s;
}    
.test:hover{
    width: 500px;
    font-size: 80px;

}
<div class="test"></div>

translate动画.gif

transform

transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。

属性含义
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转换
translate3d(x,y,z)定义3D转换
translateX(x)定义转换,只是用 X 轴的值。
translateY(y)定义转换,只是用 Y 轴的值。
translateZ(z)定义 3D 转换,只是用 Z 轴的值
scale(x,y)定义2D缩放转换
scale3d(x,y,z)定义3D缩放转换
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倾斜转换
skewX(angle)定义沿着X轴的3D倾斜转换
skewY(angle)定义沿着Y轴的2D倾斜转换
perspective(n)为3D转换元素定义透视视图
rotateX(a)函数功能等同于rotate3d(1,0,0,a)

练习

ul{
    position:relative;
    height:300px;
    width:300px;
    list-style:none;
    margin:100px auto;
    transform-style:preserve-3d;
    /* 名称,动画需要4秒来完成,动画已低速开始低速结束,动画延迟间隔时间为0,动画播放没有限制  */
    animation:yao 4s ease-in-out 0s infinite;
  }
  li{
    position:absolute;
    height:300px;
    width:300px;
    font-size:5em;
    text-align:center;
    line-height:300px;
   
  }
  li:nth-child(1){
    background-color: pink;
    transform: translateZ(150px); 
  }
  li:nth-child(2){
    background-color:yellow;
    transform: rotateY(90deg) translateZ(150px);
  }
  li:nth-child(3){
    background-color:orange;
    transform: rotateX(90deg) translateZ(150px);
  }
  li:nth-child(4){
    background-color:cornflowerblue;
    transform: rotateX(-90deg) translateZ(150px);
  }
  li:nth-child(5){
    background-color:rgb(85, 0, 255);
    transform: rotateY(-90deg) translateZ(150px);  
  }
  li:nth-child(6){
    background-color:purple;
    transform: rotateX(180deg) translateZ(150px);
  }
 
  @keyframes yao{
    
    100%{
      transform:rotateX(360deg) rotateY(360deg) rotateZ(360deg) ;
      /* transform:rotate3d(1,1,1,360deg) */

    }
  }
<ul>
  <li></li>
  <li>Y</li>
  <li>A</li>
  <li>O</li>
  <li></li>
  <li></li>
</ul>

transform动画.gif