绚丽的3D动画(纯CSS实现,代码有点长啊,在这里不知道怎么折叠起来,讲究看看吧)
效果图:https://bupt-hjm.github.io/css3-3d/(转)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> /*容器*/ .container{ -webkit-perspective: 1000px; -moz-perspective: 1000px; -ms-perspective: 1000px; perspective: 1000px; } /*盒子*/ .piece-box{ position: relative; width: 200px; height: 200px; margin: 300px auto; perspective-origin: 50% 50%; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d; -moz-animation: pieceRotate 5s; -webkit-animation: pieceRotate 5s; -o-animation: pieceRotate 5s; } .piece-box2{ -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d; animation: boxRotate 5s 10s infinite; -moz-animation: boxRotate 5s 10s infinite; -webkit-animation: boxRotate 5s 10s infinite; -o-animation: boxRotate 5s 10s infinite; } .piece{ position: absolute; width: 200px; height: 200px; background: red; opacity: 0.5; } .piece-1{ background: #ff6666; -webkit-transform: rotateY(0deg) translateZ(173.2px); -ms-transform: rotateY(0deg) translateZ(173.2px); -o-transform: rotateY(0deg) translateZ(173.2px); transform: rotateY(0deg) translateZ(173.2px); animation: piece1Rotate 5s 5s; -webkit-animation: piece1Rotate 5s 5s; -moz-animation: piece1Rotate 5s 5s; -o-animation: piece1Rotate 5s 5s; -webkit-animation-fill-mode: forwards; animation-fill-mode: forwards; } .piece-2{ background: #006699; -webkit-transform: rotateY(60deg) translateZ(173.2px); -ms-transform: rotateY(60deg) translateZ(173.2px); -o-transform: rotateY(60deg) translateZ(173.2px); transform: rotateY(60deg) translateZ(173.2px); animation: piece2Rotate 5s 5s; -webkit-animation: piece2Rotate 5s 5s; -moz-animation: piece2Rotate 5s 5s; -o-animation: piece2Rotate 5s 5s; -webkit-animation-fill-mode: forwards; animation-fill-mode: forwards; } .piece-3{ background: #ffff00; -webkit-transform: rotateY(120deg) translateZ(173.2px); -ms-transform: rotateY(120deg) translateZ(173.2px); -o-transform: rotateY(120deg) translateZ(173.2px); transform: rotateY(120deg) translateZ(173.2px); animation: piece3Rotate 5s 5s; -webkit-animation: piece3Rotate 5s 5s; -moz-animation: piece3Rotate 5s 5s; -o-animation: piece3Rotate 5s 5s; -webkit-animation-fill-mode: forwards; animation-fill-mode: forwards; } .piece-4{ background: #009999; -webkit-transform: rotateY(180deg) translateZ(173.2px); -ms-transform: rotateY(180deg) translateZ(173.2px); -o-transform: rotateY(180deg) translateZ(173.2px); transform: rotateY(180deg) translateZ(173.2px); animation: piece4Rotate 5s 5s; -webkit-animation: piece4Rotate 5s 5s; -moz-animation: piece4Rotate 5s 5s; -o-animation: piece4Rotate 5s 5s; -webkit-animation-fill-mode: forwards; animation-fill-mode: forwards; } .piece-5{ background: #ff0033; -webkit-transform: rotateY(240deg) translateZ(173.2px); -ms-transform: rotateY(240deg) translateZ(173.2px); -o-transform: rotateY(240deg) translateZ(173.2px); transform: rotateY(240deg) translateZ(173.2px); animation: piece5Rotate 5s 5s; -webkit-animation: piece5Rotate 5s 5s; -moz-animation: piece5Rotate 5s 5s; -o-animation: piece5Rotate 5s 5s; -webkit-animation-fill-mode: forwards; animation-fill-mode: forwards; } .piece-6{ background: #ff6600; -webkit-transform: rotateY(300deg) translateZ(173.2px); -ms-transform: rotateY(300deg) translateZ(173.2px); -o-transform: rotateY(300deg) translateZ(173.2px); transform: rotateY(300deg) translateZ(173.2px); animation: piece6Rotate 5s 5s; -webkit-animation: piece6Rotate 5s 5s; -moz-animation: piece6Rotate 5s 5s; -o-animation: piece6Rotate 5s 5s; -webkit-animation-fill-mode: forwards; animation-fill-mode: forwards; } @keyframes pieceRotate { 0% { -webkit-transform: rotateY(0deg); -ms-transform: rotateY(0deg); -o-transform: rotateY(0deg); transform: rotateY(0deg); } 100% { -webkit-transform: rotateY(360deg); -ms-transform: rotateY(360deg); -o-transform: rotateY(360deg); transform: rotateY(360deg); } } @-moz-keyframes pieceRotate { 0% { -webkit-transform: rotateY(0deg); -ms-transform: rotateY(0deg); -o-transform: rotateY(0deg); transform: rotateY(0deg); } 100% { -webkit-transform: rotateY(360deg); -ms-transform: rotateY(360deg); -o-transform: rotateY(360deg); transform: rotateY(360deg); } } @-webkit-keyframes pieceRotate { 0% { -webkit-transform: rotateY(0deg); -ms-transform: rotateY(0deg); -o-transform: rotateY(0deg); transform: rotateY(0deg); } 100% { -webkit-transform: rotateY(360deg); -ms-transform: rotateY(360deg); -o-transform: rotateY(360deg); transform: rotateY(360deg); } } @-o-keyframes pieceRotate { 0% { -webkit-transform: rotateY(0deg); -ms-transform: rotateY(0deg); -o-transform: rotateY(0deg); transform: rotateY(0deg); } 100% { -webkit-transform: rotateY(360deg); -ms-transform: rotateY(360deg); -o-transform: rotateY(360deg); transform: rotateY(360deg); } } @keyframes piece1Rotate { 0% { -webkit-transform: rotateY(0deg)translateZ(173.2px); -ms-transform: rotateY(0deg)translateZ(173.2px); -o-transform: rotateY(0deg)translateZ(173.2px); transform: rotateY(0deg)translateZ(173.2px); } 100% { -webkit-transform: rotateY(0deg)translateZ(100px); -ms-transform: rotateY(0deg)translateZ(100px); -o-transform: rotateY(0deg)translateZ(100px); transform: rotateY(0deg)translateZ(100px); } } @-moz-keyframes piece1Rotate { 0% { -webkit-transform: rotateY(0deg)translateZ(173.2px); -ms-transform: rotateY(0deg)translateZ(173.2px); -o-transform: rotateY(0deg)translateZ(173.2px); transform: rotateY(0deg)translateZ(173.2px); } 100% { -webkit-transform: rotateY(0deg)translateZ(100px); -ms-transform: rotateY(0deg)translateZ(100px); -o-transform: rotateY(0deg)translateZ(100px); transform: rotateY(0deg)translateZ(100px); } } @-webkit-keyframes piece1Rotate { 0% { -webkit-transform: rotateY(0deg)translateZ(173.2px); -ms-transform: rotateY(0deg)translateZ(173.2px); -o-transform: rotateY(0deg)translateZ(173.2px); transform: rotateY(0deg)translateZ(173.2px); } 100% { -webkit-transform: rotateY(0deg)translateZ(100px); -ms-transform: rotateY(0deg)translateZ(100px); -o-transform: rotateY(0deg)translateZ(100px); transform: rotateY(0deg)translateZ(100px); } } @-o-keyframes piece1Rotate { 0% { -webkit-transform: rotateY(0deg)translateZ(173.2px); -ms-transform: rotateY(0deg)translateZ(173.2px); -o-transform: rotateY(0deg)translateZ(173.2px); transform: rotateY(0deg)translateZ(173.2px); } 100% { -webkit-transform: rotateY(0deg)translateZ(100px); -ms-transform: rotateY(0deg)translateZ(100px); -o-transform: rotateY(0deg)translateZ(100px); transform: rotateY(0deg)translateZ(100px); } } @keyframes piece2Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateY(100px)rotateX(90deg); -ms-transform: translateY(100px)rotateX(90deg); -o-transform: translateY(100px)rotateX(90deg); transform: translateY(100px)rotateX(90deg); } } @-moz-keyframes piece2Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateY(100px)rotateX(90deg); -ms-transform: translateY(100px)rotateX(90deg); -o-transform: translateY(100px)rotateX(90deg); transform: translateY(100px)rotateX(90deg); } } @-webkit-keyframes piece2Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateY(100px)rotateX(90deg); -ms-transform: translateY(100px)rotateX(90deg); -o-transform: translateY(100px)rotateX(90deg); transform: translateY(100px)rotateX(90deg); } } @-o-keyframes piece2Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateY(100px)rotateX(90deg); -ms-transform: translateY(100px)rotateX(90deg); -o-transform: translateY(100px)rotateX(90deg); transform: translateY(100px)rotateX(90deg); } } @keyframes piece3Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateX(100px)rotateY(90deg); -ms-transform: translateX(100px)rotateY(90deg); -o-transform: translateX(100px)rotateY(90deg); transform: translateX(100px)rotateY(90deg); } } @-moz-keyframes piece3Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateX(100px)rotateY(90deg); -ms-transform: translateX(100px)rotateY(90deg); -o-transform: translateX(100px)rotateY(90deg); transform: translateX(100px)rotateY(90deg); } } @-webkit-keyframes piece3Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateX(100px)rotateY(90deg); -ms-transform: translateX(100px)rotateY(90deg); -o-transform: translateX(100px)rotateY(90deg); transform: translateX(100px)rotateY(90deg); } } @-o-keyframes piece3Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateX(100px)rotateY(90deg); -ms-transform: translateX(100px)rotateY(90deg); -o-transform: translateX(100px)rotateY(90deg); transform: translateX(100px)rotateY(90deg); } } @keyframes piece4Rotate { 0% { -webkit-transform: rotateY(0deg)translateZ(173.2px); -ms-transform: rotateY(0deg)translateZ(173.2px); -o-transform: rotateY(0deg)translateZ(173.2px); transform: rotateY(0deg)translateZ(173.2px); } 100% { -webkit-transform: rotateY(0deg)translateZ(-100px); -ms-transform: rotateY(0deg)translateZ(-100px); -o-transform: rotateY(0deg)translateZ(-100px); transform: rotateY(0deg)translateZ(-100px); } } @-moz-keyframes piece4Rotate { 0% { -webkit-transform: rotateY(0deg)translateZ(173.2px); -ms-transform: rotateY(0deg)translateZ(173.2px); -o-transform: rotateY(0deg)translateZ(173.2px); transform: rotateY(0deg)translateZ(173.2px); } 100% { -webkit-transform: rotateY(0deg)translateZ(-100px); -ms-transform: rotateY(0deg)translateZ(-100px); -o-transform: rotateY(0deg)translateZ(-100px); transform: rotateY(0deg)translateZ(-100px); } } @-webkit-keyframes piece4Rotate { 0% { -webkit-transform: rotateY(0deg)translateZ(173.2px); -ms-transform: rotateY(0deg)translateZ(173.2px); -o-transform: rotateY(0deg)translateZ(173.2px); transform: rotateY(0deg)translateZ(173.2px); } 100% { -webkit-transform: rotateY(0deg)translateZ(-100px); -ms-transform: rotateY(0deg)translateZ(-100px); -o-transform: rotateY(0deg)translateZ(-100px); transform: rotateY(0deg)translateZ(-100px); } } @-o-keyframes piece4Rotate { 0% { -webkit-transform: rotateY(0deg)translateZ(173.2px); -ms-transform: rotateY(0deg)translateZ(173.2px); -o-transform: rotateY(0deg)translateZ(173.2px); transform: rotateY(0deg)translateZ(173.2px); } 100% { -webkit-transform: rotateY(0deg)translateZ(-100px); -ms-transform: rotateY(0deg)translateZ(-100px); -o-transform: rotateY(0deg)translateZ(-100px); transform: rotateY(0deg)translateZ(-100px); } } @keyframes piece5Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateX(-100px)rotateY(90deg); -ms-transform: translateX(-100px)rotateY(90deg); -o-transform: translateX(-100px)rotateY(90deg); transform: translateX(-100px)rotateY(90deg); } } @-moz-keyframes piece5Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateX(-100px)rotateY(90deg); -ms-transform: translateX(-100px)rotateY(90deg); -o-transform: translateX(-100px)rotateY(90deg); transform: translateX(-100px)rotateY(90deg); } } @-webkit-keyframes piece5Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateX(-100px)rotateY(90deg); -ms-transform: translateX(-100px)rotateY(90deg); -o-transform: translateX(-100px)rotateY(90deg); transform: translateX(-100px)rotateY(90deg); } } @-o-keyframes piece5Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateX(-100px)rotateY(90deg); -ms-transform: translateX(-100px)rotateY(90deg); -o-transform: translateX(-100px)rotateY(90deg); transform: translateX(-100px)rotateY(90deg); } } @keyframes piece6Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateY(-100px)rotateX(90deg); -ms-transform: translateY(-100px)rotateX(90deg); -o-transform: translateY(-100px)rotateX(90deg); transform: translateY(-100px)rotateX(90deg); } } @-moz-keyframes piece6Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateY(-100px)rotateX(90deg); -ms-transform: translateY(-100px)rotateX(90deg); -o-transform: translateY(-100px)rotateX(90deg); transform: translateY(-100px)rotateX(90deg); } } @-webkit-keyframes piece6Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateY(-100px)rotateX(90deg); -ms-transform: translateY(-100px)rotateX(90deg); -o-transform: translateY(-100px)rotateX(90deg); transform: translateY(-100px)rotateX(90deg); } } @-o-keyframes piece6Rotate { 0% { -webkit-transform: translateX(173.2px)rotateY(0deg); -ms-transform: translateX(173.2px)rotateY(0deg); -o-transform: translateX(173.2px)rotateY(0deg); transform: translateX(173.2px)rotateY(0deg); } 100% { -webkit-transform: translateY(-100px)rotateX(90deg); -ms-transform: translateY(-100px)rotateX(90deg); -o-transform: translateY(-100px)rotateX(90deg); transform: translateY(-100px)rotateX(90deg); } } @keyframes boxRotate { 0% { -webkit-transform: rotateX(0deg)rotateY(0deg); -ms-transform: rotateX(0deg)rotateY(0deg); -o-transform: rotateX(0deg)rotateY(0deg); transform: rotateX(0deg)rotateY(0deg); } 100% { -webkit-transform: rotateX(360deg)rotateY(360deg); -ms-transform: rotateX(360deg)rotateY(360deg); -o-transform: rotateX(360deg)rotateY(360deg); transform: rotateX(360deg)rotateY(360deg); } } @-moz-keyframes boxRotate { 0% { -webkit-transform: rotateX(0deg)rotateY(0deg); -ms-transform: rotateX(0deg)rotateY(0deg); -o-transform: rotateX(0deg)rotateY(0deg); transform: rotateX(0deg)rotateY(0deg); } 100% { -webkit-transform: rotateX(360deg)rotateY(360deg); -ms-transform: rotateX(360deg)rotateY(360deg); -o-transform: rotateX(360deg)rotateY(360deg); transform: rotateX(360deg)rotateY(360deg); } } @-webkit-keyframes boxRotate { 0% { -webkit-transform: rotateX(0deg)rotateY(0deg); -ms-transform: rotateX(0deg)rotateY(0deg); -o-transform: rotateX(0deg)rotateY(0deg); transform: rotateX(0deg)rotateY(0deg); } 100% { -webkit-transform: rotateX(360deg)rotateY(360deg); -ms-transform: rotateX(360deg)rotateY(360deg); -o-transform: rotateX(360deg)rotateY(360deg); transform: rotateX(360deg)rotateY(360deg); } } @-o-keyframes boxRotate { 0% { -webkit-transform: rotateX(0deg)rotateY(0deg); -ms-transform: rotateX(0deg)rotateY(0deg); -o-transform: rotateX(0deg)rotateY(0deg); transform: rotateX(0deg)rotateY(0deg); } 100% { -webkit-transform: rotateX(360deg)rotateY(360deg); -ms-transform: rotateX(360deg)rotateY(360deg); -o-transform: rotateX(360deg)rotateY(360deg); transform: rotateX(360deg)rotateY(360deg); } } </style> </head> <body> <div class="container"> <div class="piece-box"> <div class="piece-box2"> <div class="piece piece-1"></div> <div class="piece piece-2"></div> <div class="piece piece-3"></div> <div class="piece piece-4"></div> <div class="piece piece-5"></div> <div class="piece piece-6"></div> </div> </div> </div> </body> </html>