CSS3实现3D球体旋转动画
html
- <div class="ball-box">
- <div class="ball">
- <div class="line1"></div>
- <div class="line2"></div>
- <div class="line3"></div>
- <div class="line4"></div>
- <div class="line5"></div>
- </div>
- </div>
css
- <style type="text/css">
- body{
- background-color: #000000;
- }
- .ball-box{
- width: 300px;
- height: 300px;
- position: absolute;
- left: 50%;
- top: 50%;
- margin: -150px 0 0 -150px;
- -webkit-perspective-origin: 50% 50%;
- -moz-perspective-origin: 50% 50%;
- -ms-perspective-origin: 50% 50%;
- -o-perspective-origin: 50% 50%;
- perspective-origin: 50% 50%;
- -webkit-perspective: 3000px;
- -moz-perspective: 3000px;
- -ms-perspective: 3000px;
- -o-perspective: 3000px;
- perspective: 3000px;
- }
- @-webkit-keyframes rotate3d {
- 0%{
- -webkit-transform: rotateZ(-30deg) rotateY(0deg);
- -moz-transform: rotateZ(-30deg) rotateY(0deg);
- -ms-transform: rotateZ(-30deg) rotateY(0deg);
- -o-transform: rotateZ(-30deg) rotateY(0deg);
- transform: rotateZ(-30deg) rotateY(0deg);
- }
- 100%{
- -webkit-transform: rotateZ(-30deg) rotateY(360deg);
- -moz-transform: rotateZ(-30deg) rotateY(360deg);
- -ms-transform: rotateZ(-30deg) rotateY(360deg);
- -o-transform: rotateZ(-30deg) rotateY(360deg);
- transform: rotateZ(-30deg) rotateY(360deg);
- }
- }
- @-moz-keyframes rotate3d {
- 0%{
- -webkit-transform: rotateZ(-30deg) rotateY(0deg);
- -moz-transform: rotateZ(-30deg) rotateY(0deg);
- -ms-transform: rotateZ(-30deg) rotateY(0deg);
- -o-transform: rotateZ(-30deg) rotateY(0deg);
- transform: rotateZ(-30deg) rotateY(0deg);
- }
- 100%{
- -webkit-transform: rotateZ(-30deg) rotateY(360deg);
- -moz-transform: rotateZ(-30deg) rotateY(360deg);
- -ms-transform: rotateZ(-30deg) rotateY(360deg);
- -o-transform: rotateZ(-30deg) rotateY(360deg);
- transform: rotateZ(-30deg) rotateY(360deg);
- }
- }
- @-ms-keyframes rotate3d {
- 0%{
- -webkit-transform: rotateZ(-30deg) rotateY(0deg);
- -moz-transform: rotateZ(-30deg) rotateY(0deg);
- -ms-transform: rotateZ(-30deg) rotateY(0deg);
- -o-transform: rotateZ(-30deg) rotateY(0deg);
- transform: rotateZ(-30deg) rotateY(0deg);
- }
- 100%{
- -webkit-transform: rotateZ(-30deg) rotateY(360deg);
- -moz-transform: rotateZ(-30deg) rotateY(360deg);
- -ms-transform: rotateZ(-30deg) rotateY(360deg);
- -o-transform: rotateZ(-30deg) rotateY(360deg);
- transform: rotateZ(-30deg) rotateY(360deg);
- }
- }
- @-o-keyframes rotate3d {
- 0%{
- -webkit-transform: rotateZ(-30deg) rotateY(0deg);
- -moz-transform: rotateZ(-30deg) rotateY(0deg);
- -ms-transform: rotateZ(-30deg) rotateY(0deg);
- -o-transform: rotateZ(-30deg) rotateY(0deg);
- transform: rotateZ(-30deg) rotateY(0deg);
- }
- 100%{
- -webkit-transform: rotateZ(-30deg) rotateY(360deg);
- -moz-transform: rotateZ(-30deg) rotateY(360deg);
- -ms-transform: rotateZ(-30deg) rotateY(360deg);
- -o-transform: rotateZ(-30deg) rotateY(360deg);
- transform: rotateZ(-30deg) rotateY(360deg);
- }
- }
- @keyframes rotate3d {
- 0%{
- -webkit-transform: rotateZ(-30deg) rotateY(0deg);
- -moz-transform: rotateZ(-30deg) rotateY(0deg);
- -ms-transform: rotateZ(-30deg) rotateY(0deg);
- -o-transform: rotateZ(-30deg) rotateY(0deg);
- transform: rotateZ(-30deg) rotateY(0deg);
- }
- 100%{
- -webkit-transform: rotateZ(-30deg) rotateY(360deg);
- -moz-transform: rotateZ(-30deg) rotateY(360deg);
- -ms-transform: rotateZ(-30deg) rotateY(360deg);
- -o-transform: rotateZ(-30deg) rotateY(360deg);
- transform: rotateZ(-30deg) rotateY(360deg);
- }
- }
- .ball{
- height: 100%;
- -webkit-transform-style: preserve-3d;
- -moz-transform-style: preserve-3d;
- -ms-transform-style: preserve-3d;
- transform-style: preserve-3d;
- -webkit-animation: rotate3d 30s linear infinite;
- -moz-animation: rotate3d 30s linear infinite;
- -ms-animation: rotate3d 30s linear infinite;
- -o-animation: rotate3d 30s linear infinite;
- animation: rotate3d 30s linear infinite;
- }
- .ball:after{
- display: block;
- content: '';
- width: 1px;
- height: 500px;
- background-color: #ff0;
- position: absolute;
- top: -100px;
- left: 150px;
- }
- .ball > div{
- border: 1px #ffffff solid;
- position: absolute;
- width: 100%;
- height: 100%;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border-radius: 50%;
- }
- .ball .line1{
- -webkit-transform: rotateY(0deg);
- -moz-transform: rotateY(0deg);
- -ms-transform: rotateY(0deg);
- -o-transform: rotateY(0deg);
- transform: rotateY(0deg);
- }
- .ball .line2{
- -webkit-transform: rotateY(36deg);
- -moz-transform: rotateY(36deg);
- -ms-transform: rotateY(36deg);
- -o-transform: rotateY(36deg);
- transform: rotateY(36deg);
- }
- .ball .line3{
- -webkit-transform: rotateY(72deg);
- -moz-transform: rotateY(72deg);
- -ms-transform: rotateY(72deg);
- -o-transform: rotateY(72deg);
- transform: rotateY(72deg);
- }
- .ball .line4{
- -webkit-transform: rotateY(108deg);
- -moz-transform: rotateY(108deg);
- -ms-transform: rotateY(108deg);
- -o-transform: rotateY(108deg);
- transform: rotateY(108deg);
- }
- .ball .line1{
- -webkit-transform: rotateY(144deg);
- -moz-transform: rotateY(144deg);
- -ms-transform: rotateY(144deg);
- -o-transform: rotateY(144deg);
- transform: rotateY(144deg);
- }
- </style>