CSS3动画属性有哪些

245 阅读8分钟

一.css3 - 2D

1.2D位移 translate()

将元素向指定的方向移动,类似于position中的relative。

水平移动:向右移动translate(tx,0)和向左移动translate(-tx,0);

垂直移动:向上移动translate(0,-ty)和向下移动translate(0,ty);

对角移动:右下角移动translate(tx,ty)、右上角移动translate(tx,-ty)、左上角移动translate(-tx,-ty)和左下角移动translate(-tx,ty)。

2.2D缩放scale()

让元素根据中心原点对对象进行缩放。默认的值1。因此0.01到0.99之间的任何值,使一个元素缩小;而任何大于或等于1.01的值,让元素显得更大。

缩放scale()函数和translate()函数的语法非常相似,他可以接受一个值,也可以同时接受两个值,如果只有一个值时,其第二个值默认与第一个值相等。例如,scale(1,1)元素不会有任何变化,而scale(2,2)让元素沿X轴和Y轴放大两倍。

scaleX():相当于scale(sx,1)。表示元素只在X轴(水平方向)缩放元素,其默认值是1。

scaleY():相当于scale(1,sy)。表示元素只在Y轴(纵横方向)缩放元素,其默认值是1。

3.2D旋转rotate()

旋转rotate()函数通过指定的角度参数对元素根据对象原点指定一个2D旋转。它主要在二维空间内进行操作,接受一个角度值,用来指定旋转的幅度。如果这个值为正值,元素相对原点中心顺时针旋转;如果这个值为负值,元素相对原点中心逆时针旋转。

rotateX() 方法,元素围绕其 X 轴以给定的度数进行旋转

rotateY() 方法,元素围绕其 Y 轴以给定的度数进行旋转

4.2D倾斜skew()

倾斜skew()函数能够让元素倾斜显示。它可以将一个对象以其中心位置围绕着X轴和Y轴按照一定的角度倾斜。

一个参数时:表示水平方向的倾斜角度;

两个参数时:第一个参数表示水平方向的倾斜角度,第二个参数表示垂直方向的倾斜角度

5.变形原点transform-origin()

transform-origin是变形原点,也就是该元素围绕着那个点变形或旋转,该属性只有在设置了transform属性的时候起作用;

因为我们元素默认基点就是其中心位置,换句话说我们没有使用transform-origin改变元素基点位置的情况下,transform进行的rotate,translate,scale,skew等操作都是以元素自己中心位置进行变化的。

案例展示: css代码

    *{
        margin:0;
        padding:0;
        }
    .box{
        width:500px;
        height:400px;
        margin:50px auto;
        border-bottom:3px solid red;
        position:relative;
        background:url(./images/weiyi.png) no-repeat;
    }
    h2{
        width:60px;
        height:200px;
        position: absolute;
        bottom:30px;
        left:220px;
        text-align: center;
        color:#fff;
        transition:1s;
        transform-origin:center bottom;
        opacity:0;
    }
    .h2-1{
        background:blue;
    }
    .h2-2{
        background:orange;
    }
    .h2-3{
        background:red
    }
    .h2-4{
        background:purple;
    }
    .h2-5{
        background:red;
    }
    .h2-6{
        background:orange;
    }
    .h2-7{
        background:blue;
    }
    .box:hover .h2-1{
        transform:rotate(-90deg);
    }
    .box:hover .h2-2{
        transform:rotate(-60deg);
    }
    .box:hover .h2-3{
        transform:rotate(-30deg);
    }
    .box:hover .h2-5{
        transform:rotate(30deg);
    }
    .box:hover .h2-6{
        transform:rotate(60deg);
    }
    .box:hover .h2-7{
        transform:rotate(90deg);
    }
    .box:hover h2{
        opacity: 1;
    }
    
html代码:
    
<div class="box">
    <h2 class="h2-1">1</h2>
    <h2 class="h2-2">2</h2>
    <h2 class="h2-3">3</h2>
    <h2 class="h2-4">4</h2>
    <h2 class="h2-5">5</h2>
    <h2 class="h2-6">6</h2>
    <h2 class="h2-7">7</h2>
</div>

效果图: 点击前

点击后

二.css3 - 3D

1.3D位移

CSS3中的3D位移主要包括translateZ()和translate3d()两个功能函数;

translate3d(tx,ty,tz)
ty:代表纵向坐标位移向量的长度;

tx:代表横向坐标位移向量的长度;

tz:代表Z轴位移向量的长度。此值不能是一个百分比值,如果取值为百分比值,将会认为无效值。
translateZ(t)

指的是Z轴的向量位移长度。

2.3D旋转

CSS3中的3D旋转主要包括rotateX()、rotateY()、rotateZ()和rotate3d()四个功能函数;

rotateX(a)
    rotateX()函数指定一个元素围绕X轴旋转,旋转的量被定义为指定的角度;如果值为正值,元素围绕X轴顺时针旋转;反之,如果值为负值,元素围绕X轴逆时针旋转。
    
rotateY(a)
    rotateY()函数指定一个元素围绕Y轴旋转,旋转的量被定义为指定的角度;如果值为正值,元素围绕Y轴顺时针旋转;反之,如果值为负值,元素围绕Y轴逆时针旋转。
    
rotateZ(a)
    rotateZ()函数和其他两个函数功能一样的,区别在于rotateZ()函数指定一个元素围绕Z轴旋转
    
rotate3d(x,y,z,a)(建议取值0或1)

x:是一个0到1之间的数值,主要用来描述元素围绕X轴旋转的矢量值;
y:是一个0到1之间的数值,主要用来描述元素围绕Y轴旋转的矢量值;
z:是一个0到1之间的数值,主要用来描述元素围绕Z轴旋转的矢量值;
a:是一个角度值,主要用来指定元素在3D空间旋转的角度,如果其值为正值,元素顺时针旋转,反之元素逆时针旋转。

3.3D缩放

3D缩放:CSS3中的3D缩放主要包括scaleZ()和scale3d()两个功能函数;

简介: CSS3 3D变形中的缩放主要有scaleZ()和scale3d()两种函数,当scale3d()中X轴和Y轴同时为1,即scale3d(1,1,sz),其效果等同于scaleZ(sz)。通过使用3D缩放函数,可以让元素在Z轴上按比例缩放。默认值为1,当值大于1时,元素放大,反之小于1大于0.01时,元素缩小
scale3d()

sx:横向缩放比例;
sy:纵向缩放比例;
sz:Z轴缩放比例;
scaleZ(s)

s:指定元素每个点在Z轴的比例。

注意:scaleZ()和scale3d()函数单独使用时没有任何效果,需要配合其他的变形函数一起使用才会有效果

4.cs3动画

属性:animation

    animation-name
    检索或设置对象所应用的动画名称
    必须与规则@keyframes配合使用, eg:@keyframes mymove{} animation-name:mymove;

    animation-duration
    检索或设置对象动画的持续时间
    说明:animation-duration:3s; 动画完成使用的时间为3s

    animation-timing-function
    检索或设置对象动画的过渡类型
    
        linear:线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
        ease:平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)
        ease-in:由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)
        ease-out:由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)
        ease-in-out:由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)
        step-start:马上跳到动画每一结束桢的状态

    animation-delay
    检索或设置对象动画延迟的时间
    说明:animation-delay:0.5s; 动画开始前延迟的时间为0.5s)

    animation-iteration-count
    检索或设置对象动画的循环次数
    属性值
        animation-iteration-count: infinite | number;
        infinite:无限循环
        number: 循环的次数
    
    animation-direction
    检索或设置对象动画在循环中是否反向运动
    属性值
        normal:正常方向
        reverse:反方向运行
        alternate:动画先正常运行再反方向运行,并持续交替运行
        alternate-reverse:动画先反运行再正方向运行,并持续交替运行
    
    animation-play-state
    检索或设置对象动画的状态
    属性值
        animation-play-state:running | paused;
        running:运动
        paused: 暂停
        animation-play-state:paused; 当鼠标经过时动画停止,鼠标移开动画继续执行
    
    @keyframes关键帧的名称{
            制定关键帧
            from{}
            to{}
            
            0%{
                //开始状态
            }
            25%{

            }
            50%{

            }
            ......
            100%{
                //结束状态
            }
    常用写法:
            animation:关键帧的名称 动画运动时间  linear匀速  动画延迟时间

6.案例展示:

css代码:
    *{
        margin: 0;
        padding: 0;
    }
    body,html{
        height: 100%;
    }
    body{
        background: url(./images/bg2.jpg) no-repeat;
        background-size: 100% 100%;
        perspective: 2000px;
    }
    .box{
        width: 300px;
        height: 400px;
        position: fixed;
        top: 0;bottom: 0;
        right: 0;left: 0;
        margin: auto;
        background: url(./images/a.gif) no-repeat center;
        transform-style: preserve-3d;
        animation: zhuandong 20s linear infinite;
    }
    .box .imgbox{
        width: 300px;
        height: 400px;
        position: absolute;
        transform-origin:center center -600px ;
    }
    .box img{
        width: 100%;
        height: 100%;
        display: block;
    }
    .imgbox1{
        transform: translateZ(600px);
    }
    .imgbox2{
        transform: translateZ(600px) rotateY(36deg);
    }
    .imgbox3{
        transform: translateZ(600px) rotateY(72deg);
    }
    .imgbox4{
        transform: translateZ(600px) rotateY(108deg);
    }
    .imgbox5{
        transform: translateZ(600px) rotateY(144deg);
    }
    .imgbox6{
        transform: translateZ(600px) rotateY(180deg);
    }
    .imgbox7{
        transform: translateZ(600px) rotateY(216deg);
    }
    .imgbox8{
        transform: translateZ(600px) rotateY(252deg);
    }
    .imgbox9{
        transform: translateZ(600px) rotateY(288deg);
    }
    .imgbox10{
        transform: translateZ(600px) rotateY(324deg);
    }
    @keyframes zhuandong{
        0%{
            transform: rotateX(0) rotateY(0);
        }
        25%{
            transform: rotateX(30deg) rotateY(90deg);
        }
        50%{
            transform: rotateX(0deg) rotateY(180deg);
        }
        75%{
            transform: rotateX(-30deg) rotateY(270deg);
        }
        100%{
            transform: rotateX(0) rotateY(360deg);
        }
    }

html代码:
    <div class="box">
        <div class="imgbox1 imgbox">
            <img src="./images/pic1.jpg" alt="">
        </div>
        <div class="imgbox2 imgbox">
            <img src="./images/pic2.png" alt="">
        </div>
        <div class="imgbox3 imgbox">
            <img src="./images/pic3.png" alt="">
        </div>
        <div class="imgbox4 imgbox">
            <img src="./images/pic4.png" alt="">
        </div>
        <div class="imgbox5 imgbox">
            <img src="./images/pic5.jpg" alt="">
        </div>
        <div class="imgbox6 imgbox">
            <img src="./images/pic6.png" alt="">
        </div>
        <div class="imgbox7 imgbox">
            <img src="./images/pic7.png" alt="">
        </div>
        <div class="imgbox8 imgbox">
            <img src="./images/pic8.png" alt="">
        </div>
        <div class="imgbox9 imgbox">
            <img src="./images/pic9.png" alt="">
        </div>
        <div class="imgbox10 imgbox">
            <img src="./images/pic6.png" alt="">
        </div>
    </div>

效果图展示: