久違的 CSS。
簡述
有些時候可能會需要用到這個酷炫的效果:
原本我以為這很難搞,不過學完後發現其實沒那麼複雜,所以就順便記錄一下吧!
範例
在寫 CSS 前要先解釋一下 HTML 結構。不用想得太負責,其實就跟現實中的卡片一樣,一張卡片會有正面跟反面,所以 HTML 也會分成兩塊,一塊是「正面的內容」,一塊是「反面的內容」:
1 | <div class="card"> |
我們先加上一些卡片的預設樣式:
1 | body { |
加完後,畫面應該會長這樣:
接下來,在卡片還沒有被翻面前,我只希望他顯示「Back」的部分,所以我們可以把 .front
部分改成這樣:
1 | .card .front { |
結果就會變這樣:
我一開始很疑惑,為什麼這樣正面就消失了?
這是因為 absoulte
跟 rotateY
的設定。順道一提,一直到寫這篇筆記後我才知道 rotate
原來是可以指定 Y 軸跟 X 軸的值的。
首先 absoulte
是為了讓 .front
脫離「排版流」,藉此讓 .back
來遞補 .front
讓出來的空間。
也就是說這個時候的 .front 其實是疊在 .back 身上的,只是因為又加了 rotateY(90deg)
才消失的。
怎麼做到的?來看下面這張圖應該就理解了:
用三維空間的角度來思考 X 軸跟 Y 軸應該就能理解了。
總之做到這邊後,其實就差不多完成了。剩下的只是加上一下 transition 的效果而已:
1 | .card .front { |
這邊會看不太懂的地方應該是 delay
的部分。簡單來說,這樣寫的用意是希望在 hover 的時候:
.front
等 0.2s 後再秀出來.back
等 0s 後就藏起來
總而言之延遲的目的是讓動畫看起來沒有衝突,這就是 delay
的用意。
如果還是不太懂的話,建議先去重溫一下 delay
是怎麼運作的,之後再回來看應該就懂了。
想實際玩玩看的話可以到 這邊 參考。