寫在前面
之前碰到一個(gè)小練習(xí),就是用純CSS3來寫餅狀的loading效果,之前著實(shí)沒有寫過這玩意兒,小花完全沒頭緒,然后參考了張鑫旭老師的CSS3實(shí)現(xiàn)雞蛋餅餅狀圖loading等待轉(zhuǎn)轉(zhuǎn)轉(zhuǎn),還有些別的東西,用一種看起來有一點(diǎn)類似但是好像又不一樣的方式完成了同樣的效果,題目要求的大概就是這個(gè)樣子:
開始
琢磨了一下,睡一覺起來畫了個(gè)圖,理順了一下,不過感覺此圖有點(diǎn)難意會啊啊啊啊啊,沒關(guān)系,小花會在后文一點(diǎn)一點(diǎn)解釋噠~(紅跟粉代表顏色,斜杠后面是z-index的值)
原理
這個(gè)東西分為兩部分:外圈和內(nèi)圓。顏色這東西都自定義啦,不過我畫的的圈圈好像有點(diǎn)太大,然后動畫時(shí)間是隨便設(shè)的,反正轉(zhuǎn)起來看著感覺有點(diǎn)怪怪的額
先上html結(jié)構(gòu)
<div class="con-wrap"> <!--外圈--> <div class="out-round"></div> <!--內(nèi)圓,里面有半圓四個(gè)--> <div class="in-round"> <div class="lt-round"></div> <div class="lt-mask"></div> <div class="rt-round"></div> <div class="rt-mask"></div> </div> </div>
外圈和內(nèi)圓是通過position定位重合在一起,實(shí)質(zhì)上外圈轉(zhuǎn)完2圈,內(nèi)圓的紅色和粉色才各轉(zhuǎn)完1圈(內(nèi)圓的全程包括紅色從1到0、粉色從1到0),所以內(nèi)圓的動畫時(shí)間應(yīng)該是外圈的兩倍!??!
1、外圈
外圈很簡單,設(shè)置border-radius:50%即可畫出一個(gè)圓,然后設(shè)置三條邊框?yàn)榧t色,另外一條為透明,即畫出了四分之三個(gè)圓邊框(即外圓)。
.out-round { width: 100px; height: 100px; border-radius: 50%; margin: 150px auto; border: 3px solid #FF298C; border-left: 3px solid transparent; animation: outRound 1s linear infinite running; }
接下來是外圈的動畫,為其設(shè)置的動畫就是旋轉(zhuǎn)一圈,infinite表示無限次
@keyframes outRound { 0% { transform: rotate(120deg) } 100% { transform: rotate(-240deg) } }
其中rotate(120deg)
為旋轉(zhuǎn)起始位置,可根據(jù)實(shí)際情況調(diào)整。
至此外圈就完成了,比較麻煩的是下面的內(nèi)圓,不過根據(jù)圖示應(yīng)該是可以想象的。
2.內(nèi)圓
此處有四個(gè)半圓,左邊兩個(gè),右邊兩個(gè)(round為紅色,mask為粉色),動畫主要通過改變兩個(gè)紅色半圓的z-index
值來控制各個(gè)半圓顯示的優(yōu)先順序。內(nèi)圓的css實(shí)現(xiàn)部分為:
/*左邊兩個(gè)半圓*/ .lt-round, .lt-mask { position: absolute; width: 35px; height: 70px; border-radius: 35px 0 0 35px; transform-origin: right center; } /*右邊兩個(gè)半圓*/ .rt-round, .rt-mask { position: absolute; left: 50%; width: 35px; height: 70px; border-radius: 0 35px 35px 0; }
下面過程描述內(nèi)圓的動畫全程(其中右邊的粉色全程不需要?jiǎng)樱疫吋t色部分只需要改變z-index
的值來改變顯示的優(yōu)先級,從而實(shí)現(xiàn)顯示和隱藏的效果來配合補(bǔ)充左半邊的圓。):
1、初始設(shè)置:
紅左 z-index:3 粉1 z-index:2 紅右 z-index:1 粉2 z-index:0
模型圖:
視覺效果圖(忽略中間的白線):
2.左邊紅色旋轉(zhuǎn)完180度時(shí)(逆時(shí)針旋轉(zhuǎn)所以是360→180→0)
模型圖:
視覺效果圖:
3.左邊紅色轉(zhuǎn)完到0度時(shí)(此時(shí)左右兩邊的紅色半圓被粉色覆蓋)
模型圖:
視覺效果圖:
4.粉色半圓重復(fù)之前紅色半圓的動畫(即左邊粉色360→180→0)
模型圖:
視覺效果圖:
5.當(dāng)左邊粉色旋轉(zhuǎn)到0度時(shí),全部半圓回到了最初始的狀態(tài),整個(gè)動畫即完成(在相同時(shí)間下外圈完成了2次的動畫)。
模型圖:
視覺效果圖:
動畫代碼部分