css3動畫怎麼實現旋轉效果

2021-01-07 華清遠見成都中心

華清遠見成都中心

高端IT就業培訓專家

伴隨HTML5而來的CSS3讓前端小夥伴們可以用簡單的CSS樣式即可寫出動畫效果來,而在這之前,一提到動畫我們可能會想到JavaScript,Flash,等。如果是用JavaScript那倒也不是很糟糕的事啦,但如果寫出來的效果非要強迫客戶端安裝第三方插件才能顯示,畢竟不是很理想。這也就是為什麼谷歌會不遺餘力地推廣他所主導的開源項目WebRTC (Web Real-Time Communication),把實時通訊的功能都做進瀏覽器,像視頻通話這樣的高級應用直接在JavaScript裡調用幾個瀏覽器API即可實現!這在以前想都不敢想。

再加上HTML5將很多之前需要依賴外部程序或者需要程式設計師們寫大量JS來實現的東西標準化了,一個目的就是豐富Web設計,徹底丟棄第三方插件,讓瀏覽器乾乾淨淨。說了這麼多,讓我開始談談CSS3的動畫。

定義動畫

在CSS3中定義動畫是件很方便的事情。原理有點像使用Adobe公司的Flash軟體來製作動畫。

比如定義好一個物體的開始位置及狀態,0秒的時候一個紅色50X50的矩形處於畫面中央,再將畫面定位於時間軸上3秒處,將矩形設為100X100黃色。再右鍵添加補間動畫。這樣一個簡單的動畫便完成了。像關於位移,顏色漸變,甚至旋轉,3D效果等的動畫,現在都可以用CSS來做了。

CSS中的@符號

首先我們來看一下CSS中的@符號。

當我首先看到這個東西的時候,完全搞不懂是什麼意思。於是開始嘗試去一探究竟。

請考慮這樣一種情形,你想在Web頁面使用設計師使用的一種字體,因為設計是那幫不懂Coding的平面設計師搞出來的,老闆看了覺得還不錯,剩下實現的問題就交給你了。因為這種字體不是很通用,所以用戶電腦上有很大可能是沒有裝這一字體的,那就意味首頁面在用戶電腦上的呈現會不一致,頁面找不到指定的字體會調用系統默認的字體。

比如下面我們在頁面使用Adelle_Reg.otf字體。

通過打開查看可以得到Font name,然後基本我們會通過一句簡單的CSS來搞定:

但由於我系統裡並沒有'Adelle Rg' 這樣的字體,所以頁面會是這樣的

所以我們考慮把字體文件包含到CSS裡去,換句話說把字體文件發送到客戶端。於是實現要改,這時使用@font-face 來指定字體文件的路徑,這個時候我們初次看到引入了一個@符號

所以改過之後的代碼如上圖。

· 先通過@font-face定義了一個取名叫'customFont'的font face,會在後面使用到

· 然後再通過給需要的頁面元素指定font-family 為剛才定義的customFont'

字體已經應用上且我們能夠在Resource裡面發現字體文件已經發送到了客戶端瀏覽器。

從上面我們大致可以這樣理解此種情況下的@符號,雖然不太正確(比如@import, @media),通過它定義了一個特殊場合下的變量,這裡是定義字體,在動畫裡是定義動畫關鍵幀,然後我們會在CSS代碼的其他地方使用這個定義好的變量。

關鍵幀

什麼是關鍵幀。一如上面對Flash原理的描述一樣,我們知道動畫其實由許多靜態畫面組成,第一個這樣的靜態畫面可以表述為一幀。其中關鍵幀是在動畫過程中體現了物理明顯變化的那些幀。

比如之前的例子中,元素div由50X50紅色的大小變化到狀態100X100 黃色的過程中,這一頭一尾的兩個狀態起到了對動畫定義的關鍵作用。所以這兩個狀態就是整個動畫的關鍵幀。

@keyframes 定義動畫關鍵幀

通過之前的胡說現在我們看到@keyframes就不會覺得這個@符號有多彆扭了。我們使用它來定義動畫的關鍵幀。

CSS代碼中定義關鍵幀重要的兩點是名稱和時間點。

其中狀態部分指定元素的樣式,因此可以是各種你想要的CSS代碼,顏色尺寸透明度旋轉等。'from'指定了動畫過程的開始狀態,'to'指定了動畫結束時元素的狀態。所以整個動畫也就是從from指定的開始狀態變化到to指定的狀態的過程。

假使我們已經創建好了一個HTML文檔,其結構很簡單只有一個用於呈現動畫的div。

所以對於上面的例子,動畫的定義大概是下面這個樣子的:

· 定義的動畫取名'example'

· 在'from'也就是動畫開始時指定元素長50px寬50px,背景色為紅色

· 在'to'也就是動畫結束時指定元素長100px寬100px,背景色為黃色

· 對於使用webkit內核的瀏覽器比如Chrome,Safari需要使用-webkit-前綴,所以需要寫兩套代碼,以保證在Chrome或Safari裡能工作

當然對於狀態的定義不局限於開始和結束兩個時間點,我們可以指定一個動畫過程中任何時間點元素的狀態。下面是定義關鍵幀的另一種寫法。

上面定義了整個動畫過程中0%,50%,100%三個時間點元素的狀態。比如我們定義了一個時長為10秒的動畫,那麼0%就是動畫開始時0秒的時候,0%後面的代碼指定元素在動畫開始時是怎樣的,然後50%也就是動畫進行到5秒的時候,元素又是什麼樣子。最後100% 對於動畫進行到10秒也就是動畫結束時元素的狀態。

因此用這種寫法我們可以指定的元素狀態數量沒有限制,可以更精確地控制整個動畫。

CSS3 animation屬性

當我們使用@keyframes定義好了一個動畫,它並不會執行產生任何效果,直到我們通過animation屬性將動畫應用到相應元素上。

對於 CSS3 animation 屬性其完整的語法如下:

animation: name duration timing-function delay iteration-count direction;

· name是使用@keyframes定義好的關鍵幀名稱

· duration從字面意思可知是指定動畫持續時間

· timing-function 指定動畫以何種方式播放,具體指的是從元素的一個狀態過渡到另一個狀態所使用的方式,可用的值有linear,ease, ease-in, ease-out, ease-in-out, cubic-bezier(n,n,n,n)。每種方式的討論超出了原計劃,這裡只是列出

· delay指定一個延時讓動畫不立即播放

· iteration-count 指定動畫重複次數,可以指定一個數字,也可以使用'infinite'表示一直播放

· direction指定動畫是否反向播放或者交替著播放,可用的值有normal, reverse, alternate, alternate-reverse

其中name和duration 是必需的,如果不指定duration默認為0,也就是動畫持續0秒,所以就無法看到動畫效果。

在前面已經定義好了關鍵幀了,現在我們使用animation將其應用到相應元素上。

現在打開頁面就會看到最上面那個動畫效果了。

使用百分比指定關鍵幀的版本

上面介紹過通過百分比的形象我們可以指定動畫過程中任何時間點時元素的狀態,將上面的版本變為百分比版本是非常容易的事情。

我們只需把關鍵幀的定義由from to 改為想要的時間百分比即可。

比如開始的狀態不改變,增加一個動畫進行到50%時顏色為黃色大小為75X75,最後為綠色大小為100X100。

往復的動畫

如果我們指定了direction為alternate的話,當動畫播放到結尾時,它會以相反的方向回到動畫開始的狀態,然後一直這樣交替播放。

有了上面的基本了解,我們可以寫一些簡單的動畫了。但真正驚讚的CSS3動畫是需要花一些功夫的,這裡就不繼續了。各位小夥伴們,你們是否看懂了呢?

相關焦點

  • 前端工程師必備的css3動畫技巧
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫本文是筆者之前文章用css3實現驚豔面試官的背景即背景動畫(高級附源碼)的續篇也是介紹css3技巧的文章,因為css這塊知識難點不是很多,更多的在於去熟悉css3的新特性和基礎理論知識。
  • 前端—— CSS3動畫
    雖說IE9以及更早版本的IE瀏覽器都不支持css3動畫,但是IE6-8瀏覽器已是江河日下,使用谷歌瀏覽器、火狐瀏覽器、IE10+瀏覽器以及移動端瀏覽器等這些支持css3動畫的瀏覽器的人數越來越多,所以如果很簡單的就能讓一部分人獲得更好的用戶體驗,那何樂而不為呢。
  • 因為CSS3,動畫將一切皆有可能
    熱火朝天的css3無疑吸引了很多前端開發者的眼球,然而在css3中的動畫屬性則是新功能中的主打招牌,說到css3的動畫屬性不得不讓人想起這三個屬性:Transform﹑Transition﹑Animation。
  • 推薦9款使用CSS3實現的超酷動畫效果
    本周極客社區推薦9款使用CSS3實現的超酷前端動畫效果。希望對大家有所幫助!在今天這篇小文章中,我們將介紹一個小巧的CSS腳本工具 - CSS Shake,它能夠幫助你快速高效的生成一個「晃動」效果,你可以通過它來添加一個晃動效果到你的頁面元素中。CSS實現的電路板效果金屬質感強烈,規則順序的電路板排序應該是可以非常之廣泛使用的,它看起來更像是分子結構。點擊下方連接,可以查看到原始碼。
  • css實現元素旋轉效果
    下圖可以看出圓圈是有一個旋轉的效果在實際的開發過程中,這種效果也是經常出現的所以如何實現這種效果呢?1.定義animate 樣式/*rot : 定義的動畫名稱1s : 動畫時間linear : 動畫以何種運行軌跡完成一個周期infinite :規定動畫應該無限次播放
  • 用css3實現背景即背景動畫(高級附源碼)
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫我們傳統的前端更多的是用javascript實現各種複雜動畫,自從有了Css3 transition和animation以來,前端開發在動畫這一塊有了更高的自由度和格局,對動畫的開發也越來越容易。
  • 《前端5分鐘》之使用CSS3實現酷炫的3D旋轉透視
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫你將學到CSS3 3D 轉換的常用API介紹CSS3 3D 應用場景CSS3 3D 實現一個立方體
  • 輕鬆使用純css3打造有點意思的故障藝術(附React加強組件版)
    正文接下來筆者將帶大家使用純Css3來實現"故障動畫", 並將這一特效封裝成React/vue組件, 供大家學習和使用. 先來看看實現的效果:當然在下面的文章中筆者還會介紹其他風格的"故障動畫".所以在文章開頭的動畫實現就變得很簡單了,我們只需要設置一個畫布背景,然後用內容混合讓文字疊加, 最後設計文字和故障線的動畫即可. 接下來我們看看具體的實現步驟.實現方案我們先來實現文字的混合效果, 故障線和畫布背景, css代碼如下:.blink {// ...
  • PPT如何製作出落葉紛飛旋轉的動畫效果?
    我們在使用ppt的動畫效果時,經常會製作一種落葉紛飛的動畫效果,下面來看看如何製作吧!1.首先我們準備一張綠葉的素材。2.然後給綠葉添加一個飛入的動畫效果。3.再通過——添加動畫選項,再次添加旋轉和陀螺旋的效果動畫。4.打開動畫窗格,將三個動畫效果的時間都設置為三秒。5.點擊下方的兩個動畫效果,右鍵點擊從上一項開始。(未完待續...)
  • SVG動畫、CSS3動畫常用知識點全解析
    3.animateMotion之前所有動畫功能在css裡都可以用animation實現,但<animateMotion>可以讓父元素沿著指定的路徑運動。也可以使用path指定複雜的路徑,或者可以指定<mpath>元素作為自己的路徑。效果如下:
  • H5和CSS3裡面3D動畫的運用
    現在的H5真是越來越強大 , 2D已經滿足不了網絡的需求 ,越來越多的網站為了享受視覺體驗都開始使用3D效果來做網頁了那麼CSS3給我們提供了哪些3D的屬性效果呢 ?像圖片上的效果應該怎麼來實現呢?4.3D旋轉 rotate3d 3d旋轉指可以讓元素在3維平面內沿著 x軸,y軸,z軸或者自定義軸進行旋轉 對於元素旋轉的方向的判斷知道旋轉方向才能清楚的布局出想要的盒子,下面我們看看不同軸應的旋轉方式:
  • 3分鐘學會在小程序開發紙飛機動畫
    >>>>>  css3動畫動畫的實現方式有很多種,大部分人想到jq的amination,css3的amination和transition1、position vs transform
  • 《前端5分鐘》之使用純css實現網站換膚和焦點圖切換動畫
    你將收穫網站換膚設計方案介紹:target偽類介紹和用法以及如何使用css實現網站換膚transition動畫以及如何用純css實現焦點圖動畫效果展示1.網站換膚2.焦點圖動畫了解這個偽類之後,我們的網站換膚就很容易實現了,比如說我們要實現網站背景色的換膚,我們可以預先準備幾個背景色的容器, 然後用a標籤的href錨點分別對應相應的背景元素id,然後當點擊背景色的時候調整背景容器的層級,這樣就可以實現換膚了,實際效果可以看文章開頭的效果展示.
  • 12款超強CSS3應用集錦下載
    今天我們要分享一款利用CSS3實現的提示框Tooltip動畫。當滑鼠移到圖標按鈕上時,就會在按鈕正上方彈出一個Tooltip提示框,並且伴有淡入淡出的效果。今天分享的這款CSS3按鈕外觀非常特別,它看上去酷似晶瑩剔透的牛奶,而且在點擊按鈕時出現3D效果的動畫,按鈕按下時,按鈕會輕輕的彈動一下,非常逼真。
  • 如何用純css打造類materialUI的按鈕點擊動畫並封裝成react組件
    但隨著對用戶體驗的越來越重視,對交互體驗要求的提高以及css3等新標準的出現,使得web更加大放異彩, 各種動效的實現都變得非常容易.筆者在研究materialUI框架時對於它的交互及其讚嘆.所以為了自己能實現一個類似materialUI的按鈕點擊動畫,並封裝到自己的UI庫中,筆者特地總結了一些思路,希望可以和廣大的前端工程師們一起探討.
  • 過渡動畫和關鍵幀動畫
    一、CSS3 過渡transitioncss3的transition允許css的屬性值在一定的時間區間內平滑地過渡。這種效果可以在滑鼠單擊、獲得焦點、被點擊或對元素任何改變中觸發,並圓滑地以動畫效果改變CSS的屬性值transition-property:檢索或設置對象中的參與過渡的屬性transition-duration:檢索或設置對象過渡的持續時間transition-delay:檢索或設置對象延遲過渡的時間
  • Web前端:CSS3——3種隱藏元素方法的區別
    一方面分成若干較小的模塊較利於規範及時更新和發布,及時調整模塊的內容,這些模塊獨立實現和發布,也為日後CSS的擴展奠定了基礎。另外一方面,由於受支持設備和瀏覽器廠商的限制,沒備或者廠商可以有選擇的支持一部分模塊,支持css3的一個子集,這樣有利於CSS3的推廣。
  • H5中CSS3動畫屬性詳解
    經過昨天對3D轉換效果的說明 , 我們知道一個好的工程師 ,就必須注重用戶體驗和交互 ,那麼怎麼讓用戶有更好的體驗呢?那就是通過動畫將我們的靜態頁面,變成具有靈動性,為我們的界面添加個性.css動畫效果下面讓我們來說一說動畫的實現動畫(animation)是CSS3中具有顛覆性的特徵之一,可通過設置多個節點來精確控制一個或一組動畫
  • css3動畫的實例講解
    動畫是使元素從一種樣式逐漸變化為另一種樣式的效果。可通過設置多個節點來精確控制一個或一組動畫,常用來實現複雜的動畫效果。0% 是動畫的開始,100% 是動畫的完成。1、定義動畫軌跡@keyframes 動畫名稱{from{動畫初始狀態}to{動畫結束狀態}}//---兼容寫法@-moz-keyframes@-webkit-keyframes@-o-keyframes
  • 了解CSS3中那些顛覆性的變化之2D轉換
    那麼今天我們就來說說CSS3中具有顛覆性的特徵 , 它就是2D , 3D , 動畫等功能 , 在沒有JS的情況下就能做出動態的頁面.那下面我們來了解一下CSS3中的2D 轉換的使用1.CSS3中的2D 轉換轉換(transform)是CSS3中具有顛覆性的特徵之一,可以實現元素的位移、旋轉、縮放等效果轉換(transform)你可以簡單理解為變形