通常loading動畫都是使用圖片,其實簡單的loading動畫用css就可以完全做到。
先上程式碼
html
<div class="loading">
<div class="left"></div>
<div class="right"></div>
</div>
複製程式碼
css
.loading {
width: 100px;
height: 100px;
position: fixed;
display: flex;
border-radius: 50%;
overflow: hidden;
-webkit-mask: radial-gradient(transparent 55%, #000 55%);
animation: rotate 1s linear infinite;
}
.left {
width: 50%;
height: 100%;
background: linear-gradient(rgb(2, 211, 248), rgba(2, 211, 248, .5))
}
.right {
width: 50%;
height: 100%;
background: linear-gradient(rgba(0, 0, 0, 0), rgba(2, 211, 248, .5));
}
@keyframes rotate {
0% {
transform: rotateZ(0);
}
100% {
transform: rotateZ(360deg);
}
}
複製程式碼
最終效果
這裡使用的mask屬性瀏覽器支援較差,只有webkit核心的瀏覽器和firefox支援,不過移動端是完全沒有問題的。原理也很簡單,就是利用css3漸變和mask遮罩,來製作這個效果。
首先使用線性漸變linear-gradient,左邊半塊從上到下,透明度1漸變到0.5,右邊半塊從上到下,透明度0漸變到0.5,大致是下面這個樣子
然後在父元素把它切割成圓形,並使用mask遮罩遮蓋住中間的位置,使其成為圓環形,也許你認為不用mask而使用一個塊元素遮住中間也行,但是塊元素是不透明的,同時也遮住了背景,而mask卻可以使元素透明。利用這個原理,我們可以製作更多有趣的loading動畫。
稍微改變一下,就會有各種效果
// .left
background: linear-gradient(rgb(255, 255, 255), rgb(0, 0, 0));
// .right
background: linear-gradient(rgb(255, 255, 255), rgb(0, 0, 0));
複製程式碼
// .left
background: linear-gradient(rgb(255, 0, 0), rgb(0, 255, 0) 33%, rgb(0, 255, 255) 66%, rgb(0, 0, 255) 100%);
// .right
background: linear-gradient(rgb(255, 0, 0), rgb(255, 0, 255) 50%, rgb(0, 0, 255), 100%);
複製程式碼
更多有趣的效果,需要自己去探索。