CSS3动画

1.transition

  过渡,可以在不使用Flash动画或者JavaScript的情况下,为元素从一种样式变换为另一种样式时添加效果。虽然低版本浏览器(ie9以下版本)不支持,但是不会影响页面布局。经常搭配:hover一起使用。

  transition:要过渡的属性 花费时间 运动曲线 何时开始

  属性:想要变化的CSS属性,可以是宽高、颜色、内外边距等

  花费时间:完成过渡过程需要的时间,单位是s(必须写单位),比如0.5s

  运动曲线:前两个属性是必须提供的,运动曲线默认是ease(即慢快慢),还有linear(始终以相同速度执行过渡)等

  何时开始:单位是s,用来设置延迟触发的时间,默认是0s

<div></div>
<style>
    div {
        width: 200px;
        height: 100px;
        background-color: skyblue;
    }
    div:hover {
        width: 400px;
        height: 200px;
        background-color: red;
        /* 当多个属性要变化时,用逗号隔开 */
        /* transition: width 1s, height 1s, background-color 1s; */
        /* 当所有属性都要变化时,用all */
        transition: all 1s;
    }
</style>

2.transform

  转换,可以实现元素的位移(translate)、旋转(rotate)、缩放(scale)等效果

translate:2D移动,可以改变元素在页面中的位置,类似定位。沿着X和Y轴移动元素。

  移动元素有三种方法(position、margin和translate),translate最大的优点是不会影响到其他元素的位置。

  translate中的百分比单位是相对于自身元素的百分比,比如宽度为100px,x轴移动50%即向右移动50px

  translate对行内标签没有效果

transform: translate(100px, 100px);
transform: translateX(100px);

  水平垂直居中

<div></div>
<style>
    div {
        width: 200px;
        height: 100px;
        background-color: skyblue;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }
</style>

rotate:2D旋转,单位是deg(度),正值顺时针,默认旋转的中心点是元素的中心点

transform: rotate(45deg);
// 设置元素中心点 transform-origin: left bottom; transform-origin: 50px 50px;

scale:2D缩放,可以设置中心点缩放,并且缩放不会影响到其他元素,大于1放大,小于1缩小

transform: scale(2, 2);

当同时有位移和其他属性的时候,先写位移

3.animation

  动画,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。相比于过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。

  制作动画分为两步:1.先定义动画,2再调用动画

  动画序列:0%是动画的开始,100%是动画的完成,这样的规则就是动画序列,在这个过程中可以改变任意多样式任意多的次数。需要使用百分比(整数,就是动画持续时间的划分)来规定变化发生的时间,或关键字form和to,等同于0%和100%

<div></div>
    <style>
        /* 定义动画 */
        @keyframes move {
            /* 开始状态 */
            0% {
                transform: translate(0, 0);
            }
            25% {
                transform: translate(1000px, 0);
            }
            50% {
                transform: translate(1000px, 500px);
            }
            75% {
                transform: translate(0, 500px);
            }
            /* 结束状态 */
            100% {
                transform: translate(0, 0);
            }
        }
        div {
            width: 200px;
            height: 100px;
            background-color: skyblue;
            /* 调用动画 */
            animation-name: move;
            /* 动画持续时间 */
            animation-duration: 0.1s;
        }
    </style>

  常用属性:animation-delay          规定动画何时开始

      animation-iteration-count: ;      规定动画被播放的次数,infinite为无限循环

      animation-direction        规定动画在下一周期是否逆向播放,可以实现动画走回来,而不是直接跳回来的功能

      animation-fill-mode      规定动画结束后状态,默认backwards(回到起始),可以设置forwards(保持结束状态)

      animation-play-state    规定动画是否正在运行或暂停,默认是running,paused为暂停,可以结合hover使用,即鼠标移上去则暂停动画

      animation-timing-function     规定动画的速度曲线,如ease、linear等,其中steps()指定了时间函数中的步长

实现打字机效果

<div>一二三四五六七八九十</div>
    <style>
        /* 定义动画 */
        @keyframes move {
            /* 开始状态 */
            0% {
                width: 0;
            }
            /* 结束状态 */
            100% {
                width: 200px;
            }
        }
        div {
            overflow: hidden;
            font-size: 20px;
            width: 0;
            height: 30px;
            /* 让文字强制在一行内显示 */
            white-space: nowrap;
            background-color: skyblue;
            /* 调用动画 */
            animation-name: move;
            /* 动画持续时间 */
            animation-duration: 2s;
            animation-timing-function: steps(10);
            animation-fill-mode: forwards;
        }
    </style>

4.3D转换

  多了一个z轴:垂直屏幕,往外是正值,往里是负值

translate3d

  主要就是多了一个translateZ(),并且单位一般用px而不用百分比

transform: translate3d(x, y, z);

perspective

  透视,就是视距,即人眼到屏幕的距离,想让网页产生3D效果必须加透视,单位是像素,离视觉点越近成像越大,越远成像越小。

  perspective需要写到被观察元素的父元素上面,父元素中的每个子元素可以加不同的translateZ,来实现立体的效果。

  见文章:https://www.cnblogs.com/yanggeng/p/11285856.html

perspective: 200px;

rotate3d

  3D旋转,可以让元素在三维空间内沿着x轴,y轴、z轴或自定义轴进行旋转

  deg为正值图片的上沿往里面翻转

transform: rotateX(45deg);
transform: rotate3d(x, y, z, deg);  // 自定义角度

transform-style

  3D呈现,用来控制子元素是否开启三维立体环境,preserve-3d为开启立体空间。需要在父元素添加该属性,能够影响到子元素。

  用途:一个父元素中有3D元素,需要开启立体空间,否则子元素的立体效果不会显示

transform-style: preserve-3d;

 

posted @ 2020-05-26 12:00  ajjoker  阅读(88)  评论(0)    收藏  举报