CSS3動畫特效


交錯動畫

 

 

有時候,我們需要給多個元素添加同一個動畫,播放后,不難發現它們會一起運動,一起結束,這樣就會顯得很平淡無奇。

那么如何將動畫變得稍微有趣一點呢?很簡單,既然它們都是同一時刻開始運動的,那么讓它們不在同一時刻運動不就可以了嗎。如何讓它們不在同一時刻運動呢?注意到CSS動畫有延遲(delay)這一屬性。舉個栗子,比如有十個元素播放十個動畫,將第二個元素的動畫播放時間設定為比第一個元素晚0.5秒(也就是將延遲設為0.5秒),其他元素以此類推,這樣它們就會錯開來,形成一種獨特的視覺效果。

 

 

這就是所謂的交錯動畫:通過設置不同的延遲時間,達到動畫交錯播放的效果。

本demo地址:Staggered Wave Loading

用JS分割文本

還有一種經常用到的玩法:用JS將句子或單詞分割成字母,並給每個字母加上不同延時的動畫,同樣也很華麗

 

 

本demo地址:Staggered LandIn Text

一般我們都是從第一個元素開始交錯的。但如果要從中間元素開始交錯的話,就要給當前元素的延時各加上一個值,這個值就是中間元素的下標到當前元素的下標的距離(也就是下標之差的絕對值)與步長的乘積,即:delay + Math.abs(i - middle) * step,其中中間元素的下標middle = letters.filter(e => e !== "").length / 2

 

 

本demo地址:Reveal Text

所有有交錯特性的動畫都在這兒

隨機粒子動畫

說到隨機性,我們可以實現一種更瘋狂的效果:給幾百個粒子添加交錯動畫,並且交錯時間隨機,位置大小也都是隨機。如此一來我們就能用純CSS模擬出下雪的效果。

又到了白色相簿的季節呢~為什么你寫CSS這么熟練啊?

 

 

本demo地址:Snow (Pure CSS)

偽類和偽元素

偽類

 

 

HTML元素的狀態是可以動態變化的。舉個栗子,當你的鼠標懸浮到一個按鈕上時,按鈕就會變成“懸浮”狀態,這時我們就可以利用偽類:hover來選中這一狀態的按鈕,並對其樣式進行改變。

:hover是筆者最最常用的一個偽類。還有一個很常用的偽類是:nth-child,用於選中元素的某一個子元素。其他的類似:focus:focus-within等也有一定的使用。

本demo地址:Button Hover Border Stroke With Float Text

所有:hover的動畫都在這兒

絕對定位實現多重邊框

誰規定按鈕只能有一套邊框的?利用絕對定位和padding,我們可以給按鈕做出3套大小不一的邊框來,這樣效果更炫了有木有!

 

 

本demo地址:Button Hover Multiple Border Stroke

偽元素

 

 

簡而言之,偽元素就是在原先的元素基礎上插入一個額外的元素,而且這個元素不充當HTML的標簽,這樣就能保持HTML結構的整潔。

什么情況下用偽元素呢?比如實現一根條子划過文本的動畫,在這個動畫中每個文本都有屬於自己的一根條子,那么我們就可以用偽元素為每個文本生成一個條子,而無需特地在HTML標簽中加入條子的div(當然,如果條子數量超過了2個,還是用div吧)

本demo地址:Header With Slide Bar

overflow障眼法

之前有做過閃光按鈕的效果:鼠標懸浮按鈕上時一道光從左到右划過去。

筆者就用漸變來模擬那道光,通過transform: translateX()將其平移至右邊

 

 

但這樣明顯不對啊,這光為啥能被看見呢?不應該把它給“擋”起來嗎?

於是乎,給按鈕加上overflow: hidden,光在按鈕外的位置時就被隱藏起來了

 

 

這就是障眼法的力量:)

本demo地址:Button Hover Shining

更多障眼法可以看看這個作品,一次性看個夠XD

兄弟選擇符定制表單元素

提示:這里最好將input作為label的子元素,這樣用戶點擊label時就能傳到input

默認的input太丑怎么辦?那就把它先抹掉,用appearance: noneopacity: 0都可以

然后,利用兄弟選擇符~來定制和input相鄰的所有元素(+號也行,只不過只能選中最近的元素),例如可以用偽元素生成一個新的方框代替原先的input,利用偽類:checked和動畫來表示它被勾選后的狀態,本質上還是障眼法哦~

 

 

本demo地址:Todo List

CSS特性

善用某些CSS特性,也可以為你的作品增色不少哦

transform

PS里的自由變換,各種CSS動畫都離不開它。它也可以進行3D變換。

例子就不舉了,因為幾乎我所有的動畫都用到了它

border-radius

為盒子添加圓角,經常用來美化按鈕等組件

如果設定為50%則是圓形,也很常用

不規則的曲邊形狀

調整多個頂點的border-radius可以做出不規則的曲邊形狀

 

 

本demo地址:Nav Tab

box-shadow

為盒子添加陰影,增加盒子的立體感,如果多層疊加的話會使陰影更加絲滑

 

 

本demo地址:Pagination

遮罩

如果給box-shadow的擴張半徑設定足夠大的值,可以用它來遮住背景,而無需額外的div元素

 

 

本demo地址:Burger Menu

內發光

注意到box-shadow還有個inset,用於盒子內部發光

利用這個特性我們可以在盒子內部的某個范圍內設定顏色,做出一個新月形

 

 

再加點動畫和濾鏡效果,“猩紅之月”閃亮登場!

 

 

本demo地址:Crimson Crescent Loading

text-shadow

文本陰影,本質上和box-shadow相同,只不過是相對於文本而言,常用於文本發光,也可通過多層疊加來制作霓虹文本和偽3D文本等效果

發光文本

 

 

本demo地址:Staggered GlowIn Text

霓虹文本

 

 

本demo地址:Neon Text

偽3D文本

 

 

本demo地址:Staggered Bouncing 3D Loading

background-clip:text

能將背景裁剪成文字的前景色,常用來和color: transparent配合生成漸變文本

 

 

本demo地址:Menu Hover Fill Text

gradient

漸變可以作為背景圖片的一種,具有很強的色彩效果,甚至可以用來模擬光

linear-gradient

線性漸變是筆者最常用的漸變

 

 

這個作品用到了HTML的dialog標簽,漸變背景,動畫以及overflow障眼法,細心的你看出來了嗎:)

本demo地址:Confirm Modal

radial-gradient

徑向漸變筆者沒怎么用過,上面例子中Snow的背景就是一個徑向漸變

conic-gradient

圓錐漸變可以用於制作扇形,因此配合CSS變量筆者制作了一個度量計,也用到了偽元素障眼法

 

 

本demo地址:Gauge (No SVG)

filter

PS里的濾鏡,玩過的都懂,blur最常用

backdrop-filter

對背景應用濾鏡,產生毛玻璃的效果

 

 

本demo地址:Frosted Glass

mix-blend-mode

PS里的混合模式,常用於文本在背景下的特殊效果

以下利用濾色模式(screen)實現文本視頻蒙版效果

 

 

本demo地址:Video Mask Text

clip-path

PS里的裁切,可以制作各種不規則形狀。如果和動畫結合也會相當有意思

 

 

本demo地址:Name Card Hover Expand

-webkit-box-reflect

投影效果,不怎么常用,適合立體感強的作品

 

 

本demo地址:Card Flip Reflection

web animations

雖然這並不是一個CSS特性,但是它經常用於完成那些CSS所做不到的事情

那么何時用它呢?當CSS動畫中有屬性無法從CSS中獲取時,自然就會使用到它了

跟蹤鼠標的位置

目前CSS還尚未有獲取鼠標位置的API,因此考慮用JS來進行

通過查閱相關的DOM API,發現在監聽鼠標事件的API中,可通過e.clientXe.clientY來獲得鼠標當前的位置

既然能夠獲取鼠標的位置,那么跟蹤鼠標的位置也就不是什么難事了:通過監聽mouseentermouseleave事件,來獲取鼠標出入一個元素時的位置,並用此坐標來當作鼠標的位移距離,監聽mousemove事件,來獲取鼠標在元素上移動時的位置,同樣地用此坐標來當作鼠標的位移距離,這樣一個跟蹤鼠標的效果就實現了

 

 

本demo地址:Menu Hover Image

彩蛋

 

 

將交錯動畫和偽類偽元素結合起來寫出來的慎重勇者風格的菜單

本demo地址:Shinchou Menu


作者:alphardex
鏈接:https://juejin.im/post/5e070cd9f265da33f8653f00
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM