CSS动画

关键词:css, transition, transform, animation

过渡效果

  • transition: 要过渡的属性 花费时间 运动曲线 何时开始(延迟的时间);
  • 运动曲线 默认ease
  • 何时开始 默认0s
  • 如果有多组属性变化,还是用逗号隔开。


/* transition: 要过渡的属性 花费时间 运动曲线 何时开始(延迟的时间); */
transition: width 0.6s ease 0s, height 0.3s ease-in 1s;

/* 所有属性都变化用all 就可以了 后面俩个属性可以省略 */
/* 这个s单位必须写 */
transition: all 0.3s;

/* 有多组属性变化时,用逗号隔开 */
transition: width 0.6s ease-in 0.3s, height 0.6s ease-out 0.2s;

变换

变换效果都可以与过渡效果transition同时使用。

transition: all 0.6s;

2D缩放

/* 水平、垂直都缩放 */ transform: scale(0.3, 0.6)

/* 只写一个数值时,相当于X、Y都缩放相同的比例 */
/* transform: scale(0.5) */

2D旋转

/*
单位:度 deg
正数:顺时针
负数:逆时针
*/
transform: rotate(700deg);

变形中心点

/* 设置的变形中心 */
transform-origin: 200px 100px;

/* 也可以设置方向 */
transform-origin: left;

2D倾斜

/* 向下倾斜30度 */
transform: skew(0, 30deg);

/* 向上倾斜30度 */
transform: skew(0, -30deg);

/* 向左倾斜30度 */
transform: skew(30deg, 0);

/* 向右倾斜30度 */
transform: skew(-30deg, 0);

3D旋转

左手坐标系: 伸出左手,让拇指和食指成“L”形,大拇指向右,食指向上,中指指向前方。这样我们就建立了一个左手坐标系,拇指、食指和中指分别代表X、Y、Z轴的正方向。

/*
单位:度 deg
正数:顺时针
负数:逆时针
*/

/* 绕X轴旋转 */
transform: rotateX(700deg);

/* 绕Y轴旋转 */
transform: rotateY(700deg);

/* 绕Z轴旋转 */
transform: rotateZ(700deg);

视距

眼睛到屏幕的距离。视距越大效果越不明显,视距越小,越明显。

/* 视距要加在父视图上 */
.class1 {
    perspective: 1000px;
}

.classbase:hover {
    /* 绕Y轴旋转 */
    transform: rotateY(700deg);
}

3Dz轴移动

需要先给父视图设置一个视距,才能看到效果。

/* Z轴移动 */
transform: translateZ(300px);

3D移动

/*
transform: translate3d(x, y, z);
x 和 y 可以是 px 可以是 % 但是z 只能是px
*/

/* 相当于是同时移动了xyz轴 */
transform: translate3d(300px, 100px, 500px);

动画

单个动画

animation:动画名称 动画时间 运动曲线 何时开始 播放次数 是否反方向;

div {
    width: 300px;
    height: 150px;
    background-color: pink;
    border: 2px solid blue;

    /* 
    animation:动画名称 动画时间 运动曲线  何时开始  播放次数  是否反方向; 
    */

    /* infinite 无限循环  */
    /* alternate 从起点开始动画 */
    /* alternate-reverse 从终点开始动画 */

    /*
    一般的用法:
    不重复的动画 animation: aniname 2s;
    无限循环动画 animation: aniname 2s infinite;
    */
    animation: helloname 2s ease-in 0s infinite alternate;
}

/* 自定义名称为 helloname 的动画 */
@keyframes helloname {
    /* 起始位置 */
    frome {
        transform: translateX(0);
    }
    /* 结束位置 */
    to {
        transform: translateX(500px);
    }
}

多组动画

div {
    width: 100px;
    height: 60px;
    background-color: pink;
    border: 2px solid blue;
    animation: aniname 2s infinite;
}

@keyframes aniname {
    0% {
        transform: translate3d(0, 0, 0);
    }
    25% {
        transform: translate3d(400px, 0, 0);
    }
    50% {
        transform: translate3d(400px, 400px, 0);
    }
    75% {
        transform: translate3d(0, 400px, 0);
    }
    100% {
        transform: translate3d(0, 0, 0);
    }
}

/* 父视图设置个视距,Z轴再变化下,就是3D动画了。 */