2015-04-27 63 views
-1

我發現了一個我非常喜歡的CSS動畫。我想在動畫的中心放置一個圖標。我意識到動畫並沒有真正的3D動畫發生,因爲它只是旋轉的三種不同的形狀。但是我希望有經驗的人可以在它們的中心添加一個圖標,然後讓旋轉的物體在圖標周圍呈現三維效果。在CSS動畫的中心添加圖標

codepen demo

html { 
 
    height: 100%; 
 
} 
 

 
body { 
 
    background-image: radial-gradient(circle farthest-corner at center, #3C4B57 0%, #1C262B 100%); 
 
} 
 

 
.loader { 
 
    position: absolute; 
 
    top: calc(50% - 32px); 
 
    left: calc(50% - 32px); 
 
    width: 64px; 
 
    height: 64px; 
 
    border-radius: 50%; 
 
    perspective: 800px; 
 
} 
 

 
.inner { 
 
    position: absolute; 
 
    box-sizing: border-box; 
 
    width: 100%; 
 
    height: 100%; 
 
    border-radius: 50%; 
 
} 
 

 
.inner.one { 
 
    left: 0%; 
 
    top: 0%; 
 
    animation: rotate-one 1s linear infinite; 
 
    border-bottom: 3px solid #EFEFFA; 
 
} 
 

 
.inner.two { 
 
    right: 0%; 
 
    top: 0%; 
 
    animation: rotate-two 1s linear infinite; 
 
    border-right: 3px solid #EFEFFA; 
 
} 
 

 
.inner.three { 
 
    right: 0%; 
 
    bottom: 0%; 
 
    animation: rotate-three 1s linear infinite; 
 
    border-top: 3px solid #EFEFFA; 
 
} 
 

 
@keyframes rotate-one { 
 
    0% { 
 
    transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg); 
 
    } 
 
    100% { 
 
    transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg); 
 
    } 
 
} 
 

 
@keyframes rotate-two { 
 
    0% { 
 
    transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg); 
 
    } 
 
    100% { 
 
    transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg); 
 
    } 
 
} 
 

 
@keyframes rotate-three { 
 
    0% { 
 
    transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg); 
 
    } 
 
    100% { 
 
    transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg); 
 
    } 
 
}
<div class="loader"> 
 
    <div class="inner one"></div> 
 
    <div class="inner two"></div> 
 
    <div class="inner three"></div> 
 
</div>

謝謝!

回答

1

試試這個:

html { 
 
    height: 100%; 
 
} 
 

 
body { 
 
    background-image: radial-gradient(circle farthest-corner at center, #3C4B57 0%, #1C262B 100%); 
 
} 
 

 
img { 
 
    position: relative; 
 
    left: 20px; 
 
    top: 20px; 
 
    z-index: -1; 
 
} 
 
.loader { 
 
    position: absolute; 
 
    top: calc(50% - 32px); 
 
    left: calc(50% - 32px); 
 
    width: 64px; 
 
    height: 64px; 
 
    border-radius: 50%; 
 
    perspective: 800px; 
 
} 
 

 
.inner { 
 
    position: absolute; 
 
    box-sizing: border-box; 
 
    width: 100%; 
 
    height: 100%; 
 
    border-radius: 50%; 
 
} 
 

 
.inner.one { 
 
    left: 0%; 
 
    top: 0%; 
 
    animation: rotate-one 1s linear infinite; 
 
    border-bottom: 3px solid #EFEFFA; 
 
} 
 

 
.inner.two { 
 
    right: 0%; 
 
    top: 0%; 
 
    animation: rotate-two 1s linear infinite; 
 
    border-right: 3px solid #EFEFFA; 
 
} 
 

 
.inner.three { 
 
    right: 0%; 
 
    bottom: 0%; 
 
    animation: rotate-three 1s linear infinite; 
 
    border-top: 3px solid #EFEFFA; 
 
} 
 

 
@keyframes rotate-one { 
 
    0% { 
 
    transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg); 
 
    } 
 
    100% { 
 
    transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg); 
 
    } 
 
} 
 

 
@keyframes rotate-two { 
 
    0% { 
 
    transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg); 
 
    } 
 
    100% { 
 
    transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg); 
 
    } 
 
} 
 

 
@keyframes rotate-three { 
 
    0% { 
 
    transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg); 
 
    } 
 
    100% { 
 
    transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg); 
 
    } 
 
}
<div class="loader"> 
 
    <div class="inner one"></div> 
 
    <div id="image"><img id="image" src="http://findicons.com/icon/167482/light_circle_blue?id=167564" /></div> 
 
    <div class="inner two"></div> 
 
    <div class="inner three"></div> 
 
</div>