CSS常用樣式之自定義動畫(關鍵幀、動畫名稱、動畫時間、動畫過渡速度、動畫延遲時間、動畫執行次數、動畫的順序、動畫的狀態、動畫時間之外的狀態) ...
CSS常用樣式
10.自定義動畫
1)關鍵幀(keyframes)
被稱為關鍵幀,其類似於Flash中的關鍵幀。
在CSS3中其主要以“@keyframes”開頭,後面緊跟著是動畫名稱加上一對花括弧“{…}”,括弧中就是一些不同時間段樣式規則。
語法:@keyframes animationname {keyframes-selector {css-styles;}}
animationname:定義動畫的名稱。
keyframes-selector:以百分比來規定改變發生的時間,或者通過關鍵詞 "from" 和 "to",等價於 0% 和 100%。建議定義百分比選擇器。
css-styles:通過 @keyframes 規則,您能夠創建動畫,就是將一套 CSS 樣式逐漸變化為另一套樣式,並且能夠多次改變這套 CSS 樣式。
相容性:目前瀏覽器都不支持@keyframes規則,需要加上首碼"-moz-","-o-","-webkit-"。
例子:
@-webkit-keyframes FromLeftToRight{ /* Safari 和 Chrome */ 0% {left:0;} 100% {left:800px;} } @-moz-keyframes FromLeftToRight{ /* Firefox */ 0% {left:0;} 100% {left:800px;} } @-o-keyframes FromLeftToRight{ /* Opera */ 0% {left:0;} 100% {left:800px;} } @keyframes FromLeftToRight{ 0% {left:0;} 100% {left:800px;} }
2)動畫名稱(animation-name)
元素所應用的動畫名稱,必須與規則@keyframes配合使用,因為動畫名稱由@keyframes定義。
animation-name :none | <identifier>
<identifier>:定義一個或多個動畫名稱,如果是多個,用逗號分隔。
例子:
div{ -webkit-animation-name:FromLeftToRight; -moz-animation-name:FromLeftToRight; -o-animation-name:FromLeftToRight; animation-name:FromLeftToRight; } @-webkit-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:800px;} } @-moz-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:800px;} } @-o-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:800px;} } @keyframes FromLeftToRight{ 0% {left:0;} 100% {left:800px;} }
3)動畫時間(animation-duration)
指定對象動畫的持續時間
animation-duration:<time>
例子 源代碼:
/* CSS代碼 */ .duration{ width:100px; height:100px; background:#000; position:relative; -webkit-animation-name:FromLeftToRight; -webkit-animation-duration:3s; -moz-animation-name:FromLeftToRight; -moz-animation-duration:3s; animation-name:FromLeftToRight; animation-duration:3s; } @-webkit-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @-moz-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} }
<!-- HTML代碼 --> <body> <p>請按F5刷新動畫(矩形用3秒向右移動500px)</p> <div class="duration"></div> </body>
效果:
請按F5刷新動畫(矩形用3秒向右移動500px)
4)動畫的過渡速度(animation-timing-function)
animation-timing-function : ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(n,n,n,n)
①ease : 預設值,逐漸變慢(等於 cubic-bezier(0.25,0.1,0.25,1))
②linear : 勻速過渡效果(等於 cubic-bezier(0,0,1,1))
③ease-in : 加速的過渡效果(等於 cubic-bezier(0.42,0,1,1))
④ease-out : 減速的過渡效果(等於 cubic-bezier(0,0,0.58,1))
⑤ease-in-out : 加速然後減速(等於cubic-bezier (0.42, 0, 0.58, 1))
⑥cubic-bezier(n,n,n,n):在 cubic-bezier 函數中定義自己的值,可能的值是 0 至 1 之間的數值。
例子 源代碼:
/* CSS代碼 */ .function{ width:100px; height:100px; background:#ccc; position:relative; margin:5px; -webkit-animation-name:FromLeftToRight; -webkit-animation-duration:3s; -moz-animation-name:FromLeftToRight; -moz-animation-duration:3s; animation-name:FromLeftToRight; animation-duration:3s; } .ease-in{ -webkit-animation-timing-function:ease-in; -moz-animation-timing-function:ease-in; animation-timing-function:ease-in; } .ease-out{ -webkit-animation-timing-function:ease-out; -moz-animation-timing-function:ease-out; animation-timing-function:ease-out; } @-webkit-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @-moz-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} }
<!-- HTML代碼 --> <body> <p>請按F5刷新動畫(兩個矩形同樣在3秒用不同的速率向右移動500px)</p> <div class="function ease-in">ease-in</div> <div class="function ease-out">ease-out</div> </body>
效果:
請按F5刷新動畫(兩個矩形同樣在3秒用不同的速率向右移動500px)
ease-in ease-out
5)動畫延遲時間(animation-delay)
指定對象動畫延遲的時間
例子 源代碼:
/* CSS代碼 */ .delay{ width:100px; height:100px; background:#000; position:relative; -webkit-animation-name:FromLeftToRight; -webkit-animation-duration:3s; -webkit-animation-delay:2s; -moz-animation-name:FromLeftToRight; -moz-animation-duration:3s; -moz-animation-delay:2s; animation-name:FromLeftToRight; animation-duration:3s; animation-delay:2s; } @-webkit-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @-moz-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} }
<!-- HTML代碼 --> <body> <p>請按F5刷新動畫(刷新後請等待2秒啟動動畫)</p> <div class="delay"></div> </body>
效果:
請按F5刷新動畫(刷新後請等待2秒啟動動畫)
6)動畫執行次數(animation-iteration-count)
animation-iteration-count:infinite | <number>
infinite表示無限次數,number指定迴圈次數。
例子 源代碼:
/* CSS代碼 */ .infinite{ width:100px; height:100px; background:#000; position:relative; -webkit-animation-name:FromLeftToRight; -webkit-animation-duration:3s; -webkit-animation-iteration-count:infinite; -moz-animation-name:FromLeftToRight; -moz-animation-duration:3s; -moz-animation-iteration-count:infinite; animation-name:FromLeftToRight; animation-duration:3s; animation-iteration-count:infinite; } @-webkit-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @-moz-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} }
<!-- HTML代碼 --> <body> <p>動畫全自動無限迴圈播放</p> <div class="infinite"></div> </body>
效果:
動畫全自動無限迴圈播放
7)動畫的順序(animation-direction)
設置對象動畫在迴圈中是否反向運動
animation-direction : normal | reverse | alternate | alternate-reverse
normal:正常方向
reverse:反方向運行
alternate:動畫先正常運行再反方向運行,並持續交替運行
alternate-reverse:動畫先反運行再正方向運行,並持續交替運行
例子 源代碼:
/* CSS代碼 */ .box{ width:100px; height:50px; background:#ccc; margin:5px; position:relative; -webkit-animation-name:FormLeftToRight; -moz-animation-name:FormLeftToRight; animation-name:FormLeftToRight; -webkit-animation-duration:5s; -moz-animation-duration:5s; animation-duration:5s; -webkit-animation-iteration-count:infinite; -moz-animation-iteration-count:infinite; animation-iteration-count:infinite; } .reverse{ -webkit-animation-direction:reverse; -moz-animation-direction:reverse; animation-direction:reverse; } .alternate{ -webkit-animation-direction:alternate; -moz-animation-direction:alternate; animation-direction:alternate; } .alternate-reverse{ -webkit-animation-direction:alternate-reverse; -moz-animation-direction:alternate-reverse; animation-direction:alternate-reverse; } @-webkit-keyframes FormLeftToRight{ 0%{left:0;} 100%{left:500px;} } @-moz-keyframes FormLeftToRight{ 0%{left:0;} 100%{left:500px;} } @keyframes FormLeftToRight{ 0%{left:0;} 100%{left:500px;} }
<!-- HTML代碼 --> <body> <p>四種不同的順序</p> <div class="box">normal</div> <div class="box reverse">reverse</div> <div class="box alternate">alternate</div> <div class="box alternate-reverse">alternate-reverse</div> </body>
效果:
四種不同的順序
normal reverse alternate alternate-reverse
8)動畫的狀態(animation-play-state)
設置對象動畫的狀態
animation-play-state:running | paused
running:運動
paused:暫停
例子 源代碼:
/* CSS代碼 */ .state{ width:100px; height:100px; background:#000; position:relative; -webkit-animation-name:FromLeftToRight; -webkit-animation-duration:3s; -webkit-animation-iteration-count:infinite; -moz-animation-name:FromLeftToRight; -moz-animation-duration:3s; -moz-animation-iteration-count:infinite; animation-name:FromLeftToRight; animation-duration:3s; animation-iteration-count:infinite; } .state:hover{ -webkit-animation-play-state:paused; -moz-animation-play-state:paused; animation-play-state:paused; } @-webkit-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @-moz-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} }
<!-- HTML代碼 --> <body> <p>滑鼠移動到矩形上可以暫停動畫</p> <div class="state"></div> </body>
效果:
滑鼠移動到矩形上可以暫停動畫
9)動畫時間之外的狀態(animation-fill-mode)
設置對象動畫時間之外的狀態
animation-fill-mode : none | forwards | backwards | both
none:預設值。不設置對象動畫之外的狀態
forwards:設置對象狀態為動畫結束時的狀態
backwards:設置對象狀態為動畫開始時的狀態
both:設置對象狀態為動畫結束或開始的狀態
例子 源代碼:
/* CSS代碼 */ .mode{ width:100px; height:100px; background:#000; position:relative; -webkit-animation-name:FromLeftToRight; -webkit-animation-duration:3s; -webkit-animation-fill-mode:forwards; -moz-animation-name:FromLeftToRight; -moz-animation-duration:3s; -moz-animation-fill-mode:forwards; animation-name:FromLeftToRight; animation-duration:3s; animation-fill-mode:forwards; } @-webkit-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @-moz-keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} } @keyframes FromLeftToRight{ 0% {left:0;} 100% {left:500px;} }
<!-- HTML代碼 --> <body> <p>請按F5刷新動畫(動畫結束後停在結束位置)</p> <div class="mode"></div> </body>
效果:
請按F5刷新動畫(動畫結束後停在結束位置)
10)動畫複合屬性(animation)
通過 animation ,我們能夠創建自定義動畫,這可以在許多網頁中取代動畫圖片gif、Flash 動畫以及 JavaScript。
animation:<animation-name> || <animation-duration> || <animation-timing-function> || <animation-delay> || <animation-iteration-count> || <animation-direction> || <animation-fill-mode> || <animation-play-state> [ ,*]
利用學過的動畫樣式,製作一個下滑菜單欄
源代碼:
/* CSS代碼 */ .dropmenu{ width:100px; height:30px; line-height:30px; text-align:center; background:green; border-radius:10px; overflow:hidden; } .dropmenu a{ font-family:"微軟雅黑"; font-size:18px; color:#fff; text-decoration:none; } .dropmenu ul{ list-style-type:none; padding:0; margin:0; } .dropmenu ul li{ background:#808080; } .dropmenu:hover{ -webkit-animation-name:SlideDown; -moz-animation-name:SlideDown; animation-name:SlideDown; -webkit-animation-duration:1s; -moz-animation-duration:1s; animation-duration:1s; -webkit-animation-fill-mode:forwards; -moz-animation-fill-mode:forwards; animation-fill-mode:forwards; } @-webkit-keyframes SlideDown{ 0% {height:30px;} 100% {height:155px;} } @-moz-keyframes SlideDown{ 0% {height:30px;} 100% {height:155px;} } @keyframes SlideDown{ 0% {height:30px;} 100% {height:155px;} }
<!-- HTML代碼 --> <body> <div class="dropmenu"> <a href="###">菜單欄</a> <ul> <li><a href="###">AAA</a></li> <li><a href="###">AAA</a></li> <li><a href="###">AAA</a></li> <li><a href="###">AAA</a></li> </ul> </div> </body>
效果:
菜單欄