HTML5+CSS3从入门到精通之神奇的CSS3(2)动画
沉沙 2019-06-12 来源 : 阅读 839 评论 0

摘要:本篇文章探讨了HTML5+CSS3从入门到精通之神奇的CSS3(2)动画,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了HTML5+CSS3从入门到精通之神奇的CSS3(2)动画,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

HTML5+CSS3从入门到精通之神奇的CSS3(2)动画

<

四、Css3 2D动画
1、2D 转换方法
函数
 
描述
matrix(n,n,n,n,n,n)
 
定义 2D 转换,使用六个值的矩阵。
translate(x,y)
 
定义 2D 转换,沿着 X 和 Y 轴移动元素。
translateX(n)
 
定义 2D 转换,沿着 X 轴移动元素。
translateY(n)
 
定义 2D 转换,沿着 Y 轴移动元素。
scale(x,y)
 
定义 2D 缩放转换,改变元素的宽度和高度。
scaleX(n)
 
定义 2D 缩放转换,改变元素的宽度。
scaleY(n)
 
定义 2D 缩放转换,改变元素的高度。
rotate(angle)
 
定义 2D 旋转,在参数中规定角度。
skew(x-angle,y-angle)
 
定义 2D 倾斜转换,沿着 X 和 Y 轴。
skewX(angle)
 
定义 2D 倾斜转换,沿着 X 轴。
skewY(angle)
 
定义 2D 倾斜转换,沿着 Y 轴。
2、转换属性
Property
 
描述
 
CSS
transform
 
适用于2D或3D转换的元素
 
3
transform-origin
 
允许您更改转化元素位置
 
3
 
3、形状变换transform
可以实现元素的形状、角度、位置等的变化。
1)rotate(); 以x/y/z为轴进行旋转,默认为z
rotatex(), rotatey(), rotatez(), rotate3d(x, y, z, angle) x, y, z --->矢量
实例:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .wrapper {
            width: 1000px;
            height: 200px;
            border: 1px solid black;
            margin: 100px auto;
        }
        .item {
            margin-right: 30px;
            display: inline-block;
            width: 200px;
            height: 200px;
            background: red;
        }
        .item1 {
            /* 沿着X轴旋转45度 */
            transform: rotateX(45deg);
        }
        .item2 {
            /* 沿着Y轴旋转45度 */
            transform: rotateY(45deg);
        }
        .item3 {
            /* 沿着Z轴旋转45度。默认z轴 */
            transform: rotate(45deg);
        }
 
    </style>
</head>
<body>
    <div>
        <div>未旋转</div>
        <div class="item item1">沿着X轴旋转45度</div>
        <div class="item item2">沿着Y轴旋转45度</div>
        <div class="item item3">沿着Z轴旋转45度</div>
    </div>
</body>
</html>
实例:钟表摆盘
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .wrapper {
            position: relative;
            width: 200px;
            height: 200px;
            border: 1px solid black;
            margin: 100px auto;
            border-radius: 50%;
        }
        li{
            position: absolute;
            top: 0;
            left: 50%;
            transform: translateX(-50%);
            display: inline-block;
            transform-origin: 0 100px;
        }
        span{
            /* 必须先改成行级块元素 */
            display: inline-block;
        }
        li:nth-of-type(2){
            transform: rotate(30deg);
        }
        li:nth-of-type(2) span{
            transform: rotate(-30deg);
        }
        li:nth-of-type(3){
            transform: rotate(60deg);
        }
        li:nth-of-type(3) span{
            transform: rotate(-60deg);
        }
        li:nth-of-type(4){
            transform: rotate(90deg);
        }
        li:nth-of-type(4) span{
            transform: rotate(-90deg);
        }
        li:nth-of-type(5){
            transform: rotate(120deg);
        }
        li:nth-of-type(5) span{
            transform: rotate(-120deg);
        }
        li:nth-of-type(6){
            transform: rotate(150deg);
        }
        li:nth-of-type(6) span{
            transform: rotate(-150deg);
        }
        li:nth-of-type(7){
            transform: rotate(180deg);
        }
        li:nth-of-type(7) span{
            transform: rotate(-180deg);
        }
        li:nth-of-type(8){
            transform: rotate(210deg);
        }
        li:nth-of-type(8) span{
            transform: rotate(-210deg);
        }
        li:nth-of-type(9){
            transform: rotate(240deg);
        }
        li:nth-of-type(9) span{
            transform: rotate(-240deg);
        }
        li:nth-of-type(10){
            transform: rotate(270deg);
        }
        li:nth-of-type(10) span{
            transform: rotate(-270deg);
        }
        li:nth-of-type(11){
            transform: rotate(300deg);
        }
        li:nth-of-type(11) span{
            transform: rotate(-300deg);
        }
        li:nth-of-type(12){
            transform: rotate(330deg);
        }
        li:nth-of-type(12) span{
            transform: rotate(-330deg);
        }
    </style>
</head>
 
<body>
    <div>
        <ul>
            <li><span>12</span></li>
            <li><span>1</span></li>
            <li><span>2</span></li>
            <li><span>3</span></li>
            <li><span>4</span></li>
            <li><span>5</span></li>
            <li><span>6</span></li>
            <li><span>7</span></li>
            <li><span>8</span></li>
            <li><span>9</span></li>
            <li><span>10</span></li>
            <li><span>11</span></li>
        </ul>
    </div>
</body>
 
</html>
 
 
2)scale(); 以x/y为轴进行缩放
scale(x, y) 接受两个值,如果第二参数未提供,则第二个参数使用第一个参数的值
scalex(),scaley()值是数字表示倍数,不加任何单位,scale3d(),scale3d(sx,sy,sz)
实例:
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .wrapper {
            width: 800px;
            height: 100px;
            border: 1px solid black;
            margin: 100px auto;
        }
        .item {
            display: inline-block;
            width: 100px;
            height: 100px;
            background: red;
            border: 1px solid black;
            margin-right:50px;
        }
        .item1 {
            /* 沿着X轴缩放1倍 */
            transform: scaleX(2);
        }
        .item2 {
            /* 沿着Y轴缩放1倍 */
            transform: scaleY(2);
        }
        .item3 {
            /* x、y轴都缩放1倍 */
            transform: scale(2);
        }
 
    </style>
</head>
 
<body>
    <div>
        <div>未缩放</div>
        <div class="item item1">沿着X轴缩放1倍</div>
        <div class="item item2">沿着Y轴缩放1倍</div>
        <div class="item item3">scale(2),x、y轴都缩放1倍</div>
    </div>
</body>
 
</html>
3)skew(); 对元素进行倾斜扭曲
skew(x, y);接受两个值,第一个参数对应X轴,第二个参数对应Y轴。如果第二个参数未提供,则默认值为0
skewx(), skewy()
4)translate(); 可以移动距离,相对于自身位置。
translate(x, [y])
translatex(),translatey(),translatez(),translate3d(x, y, z)
实例:
.item1{
            transform: translateX(100px);
        }
        .item2{
            transform: translateY(100px);
        }
实例:块元素水平垂直居中显示,元素宽高未知
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper{
            position: relative;
            width: 1000px;
            height: 600px;
            margin: 0 auto;
            border: 1px solid black;
        }
        .box{
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <div>
        <div>你好</div>
    </div>
</body>
</html>
4、transform-origin 变换原点
任何一个元素都有一个中心点,默认情况下,其中心点是居于元素x轴和y轴的50%处,如图:
 
也可以取下述值:
5、transition:过渡动画
语法:transition:ele time function delay;
 transition  属性是css3的一个复合属性,主要包括一下几个子属性
transition-property:指定过渡或动态模拟的css属性
transition-duration:指定过渡所需要的时间
transition-timing-function:指定过渡函数
transition-delay:指定开始出现的延迟时间
下列为过渡动画可以参与过渡的属性:
transition  速录函数可以选择的值:
 
实例:
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrapper {
            width: 800px;
            height: 100px;
            border: 1px solid black;
            margin: 100px auto;
        }
        .item {
            display: inline-block;
            width: 100px;
            height: 100px;
            background: red;
            border: 1px solid black;
            margin-right: 50px;
            transition: 3s linear;
        }
        span:hover + div{
            transform: rotate(45deg)
        }
    </style>
</head>
 
<body>
    <div>
        <span>hover此处 ,动画开始:</span>
        <div>带有过渡的动画</div>
    </div>
</body>
 
</html>
 
实例:点击具体item切换显示图片
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
 
        .wrapper {
            position: relative;
            width: 600px;
            height: 300px;
            border: 1px solid black;
            margin: 0 auto;
 
        }
        .wrapper .item {
            width: 50px;
            background: deeppink;
            padding: 3px;
            text-align: center;
            margin-top: 50px;
            margin-left: 10px;
            border-radius: 10px;
            box-shadow: 2px 3px 8px 3px #666;
        }
 
        .wrapper img {
            position: absolute;
            top: 0;
            left: 50px;
            width: 400px;
            height: 300px;
            opacity: 0;
            transition: all 1s linear;
            border-radius: 20px;
        }
 
        .item1:hover + img {
            left: 100px;
            opacity: 1;
        }
        .item2:hover + img {
            left: 130px;
            opacity: 1;
        }
        .item3:hover+img {
            left: 130px;
            opacity: 1;
        }
    </style>
</head>
 
<body>
    <div>
        <div class="item item1">dog1</div>
        <img src="./dog1.jpg">
        <div class="item item2">dog2</div>
        <img src="./dog2.jpg">
        <div class="item item3">dog3</div>
        <img src="./dog3.jpg">
 
    </div>
</body>
 
</html>
6、动画animation  
 animation 属性为css3的复合属性,主要包括以下子属性
1)animation-name:  此属性为执行动画的 keyframe 名
2)animation-duration: 此属性为动画执行的时间
3)animation-timing-function: 指定过渡函数速率
4)animation-delay: 执行延迟时间
5)animation-direction: normal/reverse/alternate/alternate-reverse;
(要用来设置动画播放方向:normal:默认值。动画按正常播放。reverse:动画反向播放。alternate:动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放。alternate-reverse:动画在奇数次(1、3、5...)反向播放,在偶数次(2、4、6...)正向播放。)
6)animation-iteration-count:infinite/number;
(主要用来定义动画的播放次数。n 播放次数,infinite 无限次)
7)animation-fill-mode: none/forwards/backwards;
(定义在动画开始之前和结束之后发生的操作。主要具有四个属性值:none:默认值,表示动画将按预期进行和结束,在动画完成其最后一帧时,动画会反转到初始帧处。forwards: 表示动画在结束后继续应用最后的关键帧的位置。backwards:会在向元素应用动画样式时迅速应用动画的初始帧。both:元素动画同时具有forwards和backwards效果)
8)animation-play-state:runing/pasued;
(主要用来控制元素动画的播放状态。running 播放,paused  暂停)
7、关键帧@keyframes
animation 动画会按照keyframes 关键帧里面指定的帧状态而过渡执行。
0% - 100% 代表动画的时间过渡
@keyframes demoMove{
0%{ background-color:red;}
10%{ background-color:green;}
20%{ background-color:white;}
50%{ width:200px;}
100%{ height:200px;}
}
帧频里面如果只有 0% 和 100%两个关键帧,那么可以用 from to 代替
@keyframes demoMove{
from{ background-color:red;}
to{ height:200px;}
}
实例:方块运动
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper {
            position: relative;
            width: 300px;
            height: 300px;
            margin: 0 auto;
            border: 1px solid black;
        }
        .demo {
            position: absolute;
            left: 0;
            top: 0;
            width: 100px;
            height: 100px;
            background: red;
            animation: move 4S linear infinite;
        }
        @keyframes move {
            25% {
                left: 200px;
                top: 0;
                background: green;
            }
            50% {
                left: 200px;
                top: 200px;
                background: pink;
            }
            75% {
                left: 0;
                top: 200px;
                background: blue;
            }
            100% {
                left: 0;
                top: 0;
                background: red;
            }
        }
    </style>
</head>
 
<body>
    <div>
        <div id="demo"></div>
    </div>
</body>
 
</html>
实例:网页云音乐转盘
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    *{
        padding: 0;
        margin: 0;
    }
    .wrapper{
        position: absolute;
        top: 50%;
        left: 50%;
        transform:translate(-50%,-50%);
        /* border: 1px solid black; */
    }
    button{
        position: absolute;
        left: 50%;
        transform: translateX(-50%);
        bottom: 150px;
        color: #fff;
        font-size: 20px;
        padding: 15px;
        background: red;
    }
    .table{
        width: 200px;
        height: 200px;
        border: 50px solid black;
        border-radius: 50%;
        animation: turn 5s linear infinite paused;
        background: url('./dog1.jpg');
        background-size: 100% 100%;
    }
    .pian{
        position: absolute;
        left: 50%;
        top: -70px;
        transform: translateX(-50%);
        width: 10px;
        height: 150px;
        background: orchid;
        border-bottom-left-radius: 100%;
        border-bottom-right-radius: 100%;
        transform-origin: top;
        transform: rotate(-60deg);
    }
    .active{
        transform: rotate(-30deg);
    }
    @keyframes turn{
        0%{
            transform: rotate(0deg);
        }
        100%{
            transform: rotate(360deg);
        }
    }
    </style>
</head>
<body>
    <button id = "btn">播放/停止</button>
    <div>
        <div></div>
        <div></div>
    </div>
    <script>
        var oTable = document.getElementsByClassName('table')[0];
        var oPian = document.getElementsByClassName('pian')[0];
        var flag = true;
        btn.onclick = function(){
            if(flag){
                flag = false;
                oTable.style.animationPlayState = "running";
                oPian.className = "pian active"
 
            }else{
                oTable.style.animationPlayState = "paused";
                oPian.className = "pian"
                flag = true;
            }
          
        }
    </script>
</body>
</html>
五、Css3 3D动画
1、3D转换方法
函数
 
描述
matrix3d(n,n, n,n,n,n ,
n,n,n ,n,n,n, n,n,n,n )
 
定义 3D 转换,使用 16 个值的 4x4 矩阵。
translate3d(x,y,z)
 
定义 3D 转化。
translateX(x)
 
定义 3D 转化,仅使用用于 X 轴的值。
translateY(y)
 
定义 3D 转化,仅使用用于 Y 轴的值。
translateZ(z)
 
定义 3D 转化,仅使用用于 Z 轴的值。
scale3d(x,y,z)
 
定义 3D 缩放转换。
scaleX(x)
 
定义 3D 缩放转换,通过给定一个 X 轴的值。
scaleY(y)
 
定义 3D 缩放转换,通过给定一个 Y 轴的值。
scaleZ(z)
 
定义 3D 缩放转换,通过给定一个 Z 轴的值。
rotate3d(x,y,z,angle)
 
定义 3D 旋转。
rotateX(angle)
 
定义沿 X 轴的 3D 旋转。
rotateY(angle)
 
定义沿 Y 轴的 3D 旋转。
rotateZ(angle)
 
定义沿 Z 轴的 3D 旋转。
perspective(n)
 
定义 3D 转换元素的透视视图。
2、转换属性
属性
 
描述
 
CSS
transform
 
向元素应用 2D 或 3D 转换。
 
3
transform-origin
 
允许你改变被转换元素的位置。
 
3
transform-style
 
规定被嵌套元素如何在 3D 空间中显示。
 
3
perspective
 
规定 3D 元素的透视效果。
 
3
perspective-origin
 
规定 3D 元素的底部位置。
 
3
backface-visibility
 
定义元素在不面对屏幕时是否可见。
 
3
3、transform-style
transform-style: flat|preserve-3d;
flat: 默认,子元素将不保留其 3D 位置
preserve-3d : 子元素将保留其 3D 位置。
注意:transform-style 属性需要设置在父元素中, 高于任何嵌套的变形元素。设置了transform-style:preserve-3d的元素,就不能防止子元素溢出设置overflow:hidden;否则会导致preserve-3d失效。
4、perspective——景深
 
以简单的把perspective理解成人距离显示器的距离,此值越大的效果越差,越小效果越好。假设你距离100米和1米的距离去看一个边长一米的正方体。
重点记住perspective的值要大于3d物体的值。
①perspective: 600px ;默认值none:物体距离人眼的距离是600px;
实例:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper{
            width: 200px;
            height: 200px;
            margin: 100px auto;
            border: 1px solid #333;
            transform-style: preserve-3d;
            /* perspective: 600px; */
        }
        .item{
            width: 200px;
            height: 200px;
            background: red;
            transform: rotateX(45deg);
          
      
        }
    </style>
</head>
 
<body>
    <div>
        <div></div>
    </div>
</body>
 
</html>
没有景深:
 
有景深:
perspective: 600px;
 
②perspective-origin:默认值是50% 50%
实例:
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper{
            width: 200px;
            height: 200px;
            margin: 100px auto;
            border: 1px solid #333;
            transform-style: preserve-3d;
            perspective: 600px;
            /* 改变视角 */
            perspective-origin: top;
          
        }
        .item{
            width: 200px;
            height: 200px;
            background: red;
            transform: rotateX(90deg);
        }
    </style>
</head>
 
<body>
    <div>
        <div></div>
    </div>
</body>
 
</html>
当有多个变形元素时,把景深设置到父元素上时,只有一个透视点;把景深设置到子元素上时,每一个变形元素都有一个透视点。
实例:父元素设置景深
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper{
            width: 200px;
            height: 200px;
            margin: 100px auto;
            border: 1px solid #333;
            transform-style: preserve-3d;
            perspective: 600px;
            /* 改变视角 */
            perspective-origin: top;
          
        }
        .item{
            width: 200px;
            height: 200px;
            background: red;
            transform: rotateX(75deg);
        }
    </style>
</head>
 
<body>
    <div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
      
    </div>
</body>
 
</html>
实例:子元素设置景深
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper{
            width: 200px;
            height: 200px;
            margin: 100px auto;
            border: 1px solid #333;
            transform-style: preserve-3d;
            /* 改变视角 */
            perspective-origin: top;
          
        }
        .item{
            width: 200px;
            height: 200px;
            background: red;
            transform: perspective(600px) rotateX(75deg);
          
        }
    </style>
</head>
 
<body>
    <div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
      
    </div>
</body>
 
</html>
5、backface-visibility: visible | hidden
在元素运动过程中,能否展示元素的背面
实例:可见
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper{
            width: 200px;
            height: 200px;
            margin: 100px auto;
            border: 1px solid #333;
            transform-style: preserve-3d;
            /* 改变视角 */
            perspective-origin: top;
          
        }
        .item{
            width: 200px;
            height: 200px;
            background: red;
            transform: perspective(600px) rotateX(100deg);
            backface-visibility: visible;
          
        }
    </style>
</head>
 
<body>
    <div>
        <div></div>      
    </div>
</body>
 
</html>
实例:不可见
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper{
            width: 200px;
            height: 200px;
            margin: 100px auto;
            border: 1px solid #333;
            transform-style: preserve-3d;
            /* 改变视角 */
            perspective-origin: top;
          
        }
        .item{
            width: 200px;
            height: 200px;
            background: red;
            transform: perspective(600px) rotateX(100deg);
            backface-visibility: hidden;
          
        }
    </style>
</head>
 
<body>
    <div>
        <div></div>      
    </div>
</body>
 
</html>
6、3d变化是二人转:元素在转,坐标轴其实也在转
两个相同的元素, 其中一个设置了rotateX(90deg), 另一个设置rotateX(-90deg),然后同时设置translateZ(100px);这时, 他们在空间的距离是200px, 而不是0;
实例:
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper {
            position: relative;
            width: 200px;
            height: 200px;
            margin: 100px auto;
            border: 1px solid #333;
            transform-style: preserve-3d;
            perspective-origin: center;
            perspective: 600px;
 
        }
        .item1 {
            position: absolute;
            top: 0;
            width: 200px;
            height: 200px;
            background: red;
            transform: rotateX(90deg) translateZ(100px);
 
        }
        .item2 {
            position: absolute;
            top: 0;
            width: 200px;
            height: 200px;
            background: green;
            transform: rotateX(-90deg) translateZ(100px);
        }
    </style>
</head>
 
<body>
    <div>
        <div></div>
        <div></div>
    </div>
</body>
 
</html>
实例:旋转照片墙
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper{
            position: relative;
            transform-style: preserve-3d;
            width: 200px;
            height: 200px;
            margin: 200px auto;
            animation: turn 4s linear reverse infinite;
        }
        .wrapper div{
            position: absolute;
            top: 0;
            left: 0;
            width: 200px;
            height: 180px;
            line-height: 200px;
            opacity: 0.5;
            text-align: center;
            color: #fff;
            font-size: 30px;
            background: red;
        }
        .wrapper .item1{
            background: red;
            transform: rotateY(0deg) translate3d(0,0,200px);
        }
        .wrapper .item2{
            background: green;
            transform: rotateY(60deg) translate3d(0,0,200px);
        }
        .wrapper .item3{
            background: orange;
            transform: rotateY(120deg) translate3d(0,0,200px);
        }
        .wrapper .item4{
            background: deepskyblue;
            transform: rotateY(180deg) translate3d(0,0,200px);
        }
        .wrapper .item5{
            background: deeppink;
            transform: rotateY(240deg) translate3d(0,0,200px);
        }
        .wrapper .item6{
            background: purple;
            transform: rotateY(300deg) translate3d(0,0,200px);
        }
        @keyframes turn{
            0%{
                transform: rotateX(-20deg) rotateY(0deg);
            }
            100%{
                transform: rotateX(-20deg) rotateY(360deg);
            }
        }
    </style>
</head>
 
<body>
    <div>
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
        <div>6</div>
    </div>
</body>
 
</html>
六、Css 3 动画性能优化
1. 尽可能多的利用硬件能力,如使用3D变形来开启GPU加速
 
注意:如动画过程有闪烁(通常发生在动画开始的时候),可以尝试下面的Hack:
 
如下面一个元素通过translate3d右移500px的动画流畅度会明显优于使用left属性:
注:3D变形会消耗更多的内存与功耗,应确实有性能问题时才去使用它,兼在权衡
2. 尽可能少的使用box-shadows与gradients, 这两个都是页面性能杀手,能避免尽量避免。
3. 尽可能的让动画元素不在文档流中,以减少重排。
 4. 优化 DOM reflow
实例:立方体旋转
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .wrapper{
            position: relative;
            transform-style: preserve-3d;
            width: 200px;
            height: 200px;
            margin: 200px auto;
            animation: turn 5s linear infinite;
        }
        .wrapper div{
            position: absolute;
            top: 0;
            left: 0;
            width: 200px;
            height: 200px;
            line-height: 200px;
            opacity: 0.5;
            text-align: center;
            color: #fff;
            font-size: 30px;
            background: red;
        }
        .wrapper .item1{
            background: red;
            transform: rotateX(0deg) translate3d(0,0,100px);
        }
        .wrapper .item2{
            background: deepskyblue;
            transform: rotateX(180deg) translate3d(0,0,100px);
        }
        .wrapper .item3{
            background: green;
            transform: rotateY(90deg) translate3d(0,0,100px);
        }
        .wrapper .item4{
            background: orange;
            transform: rotateY(-90deg) translate3d(0,0,100px);
        }
     
        .wrapper .item5{
            background: deeppink;
            transform: rotateX(90deg) rotateZ(90deg) translate3d(0,0,100px);
        }
        .wrapper .item6{
            background: purple;
            transform: rotateX(-90deg) rotateZ(90deg) translate3d(0,0,100px);
        }
        @keyframes turn{
            0%{
                transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg);
            }
            25%{
                transform: rotateX(90deg) rotateY(90deg) rotateZ(90deg);
            }
            50%{
                transform: rotateX(180deg) rotateY(180deg) rotateZ(180deg);
            }
            75%{
                transform: rotateX(270deg) rotateY(270deg) rotateZ(270deg);
            }
            100%{
                transform: rotateX(360deg) rotateY(360deg) rotateZ(360deg);
            }
        }
    </style>
</head>
 
<body>
    <div>
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
        <div>6</div>
    </div>
</body>
 
</html>    

      本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程