深入CSS3 動(dòng)畫效果的總結(jié)詳解

CSS3添加了幾個(gè)動(dòng)畫效果的屬性,通過設(shè)置這些屬性,可以做出一些簡單的動(dòng)畫效果而不需要再去借助JavaScript。CSS3動(dòng)畫的屬性主要分為三類:transform、transition以及animation。
rotate
設(shè)置元素順時(shí)針旋轉(zhuǎn)的角度,用法是:
transform: rotate(x);
參數(shù)x必須是以deg結(jié)尾的角度數(shù)或0,可為負(fù)數(shù)表示反向。
scale
設(shè)置元素放大或縮小的倍數(shù),用法包括:
transform: scale(a); 元素x和y方向均縮放a倍
transform: scale(a, b); 元素x方向縮放a倍,y方向縮放b倍
transform: scaleX(a); 元素x方向縮放a倍,y方向不變
transform: scaleY(b); 元素y方向縮放b倍,x方向不變
translate
設(shè)置元素的位移,用法為:
transform: translate(a, b); 元素x方向位移a,y方向位移b
transform: translateX(a); 元素x方向位移a,y方向不變
transform: translateY(b); 元素y方向位移b,x方向不變
skew
設(shè)置元素傾斜的角度,用法包括:
transform: skew(a, b); 元素x方向逆時(shí)針傾斜角度a,y方向順時(shí)針傾斜角度b
transform: skewX(a); 元素x方向逆時(shí)針傾斜角度a,y方向不變
transform: skewY(b); 元素y方向順時(shí)針傾斜角度b,想方向不變
以上的參數(shù)均必須是以deg結(jié)尾的角度數(shù)或0,可為負(fù)數(shù)表示反向。
matrix
設(shè)置元素的變形矩陣,因?yàn)榫仃囎冃芜^于復(fù)雜,暫略。
origin
設(shè)置元素的懸掛點(diǎn),用法包括:
transform-origin: a b; 元素的懸掛點(diǎn)為(a, b)
元素的懸掛點(diǎn)即為它旋轉(zhuǎn)和傾斜時(shí)的中心點(diǎn)。取值中的a、b可以是長度值、以%結(jié)尾的百分比或者left、top、right、bottom四個(gè)值。
transition-property
指定transition效果作用的CSS屬性,其值是CSS屬性名。
transition-duration
動(dòng)畫效果持續(xù)的時(shí)間,其值為以s結(jié)尾的秒數(shù)。
transition-timing-function
指定元素狀態(tài)的變化速率函數(shù),其取值基于貝賽爾曲線函數(shù),詳情如下所示:
transition-delay
動(dòng)畫效果推遲開始執(zhí)行的時(shí)間,其值為以s結(jié)尾的秒數(shù)。
CSS3動(dòng)畫的生命周期如下圖所示,從中可以清楚的看出duration和delay之間的關(guān)系:
CSS3中真正的動(dòng)畫屬性是animation,而前面的transform和transition都只是對(duì)DOM元素的變形或者是狀態(tài)的過渡。實(shí)際上,CSS3所支持的動(dòng)畫效果只是填充動(dòng)畫,也就是說先設(shè)定整個(gè)動(dòng)畫生命周期中的幾個(gè)關(guān)鍵狀態(tài)(key frame,關(guān)鍵幀),然后動(dòng)畫將自行計(jì)算并模擬關(guān)鍵幀之間的過渡。那么在設(shè)置animation的屬性之前就必須先設(shè)定好關(guān)鍵幀了。
關(guān)鍵幀@keyframes的語法結(jié)構(gòu)如下:
@keyframesNAME {
a% {
/*CSS屬性*/
}
b% {
/*CSS屬性*/
}
...
}
NAME表示動(dòng)畫的名字;a%、b%表示以百分號(hào)結(jié)尾的百分?jǐn)?shù),用于設(shè)定該關(guān)鍵幀在動(dòng)畫生命周期中的位置;百分?jǐn)?shù)后面的{ } 中則需要寫成該關(guān)鍵幀狀態(tài)下CSS屬性的值。另外,如果同一個(gè)百分?jǐn)?shù)值在@keyframes中出現(xiàn)多次,那么后出現(xiàn)的將覆蓋先出現(xiàn)的;并且關(guān)鍵幀在@keyframes中時(shí)無序的。
設(shè)置完關(guān)鍵幀后就可以繼續(xù)設(shè)定animation了。
animation-name
指定選用的動(dòng)畫的名字,即keyframes中的NAME。
animation-duration
同transition-duration。
animation-timing-function
同transition-timing-function。
animation-delay
同transition-delay。
animation-iteration-count
設(shè)定動(dòng)畫執(zhí)行的次數(shù),其值可以是數(shù)字也可以是infinite(循環(huán)執(zhí)行)。
animation-direction
設(shè)定動(dòng)畫執(zhí)行的方向,其值可以是normal(正常順序播放)或alternate(反向播放)。
因?yàn)镃SS3還沒有正式發(fā)布,所以各種瀏覽器對(duì)它的支持也不盡相同。所以在設(shè)置CSS3屬性(包括@開頭的新屬性)的時(shí)候通常需要對(duì)其添加瀏覽器標(biāo)識(shí)的前綴,如-webkit- 表示W(wǎng)ebkit內(nèi)核的瀏覽器Chrome和Safari,-moz- 表示Fire Fox,-o- 表示Opera。無視IE吧,在IE上的實(shí)現(xiàn)通常還是要用到濾鏡,而不是CSS3。
實(shí)例下面的代碼模擬了上述大部分的CSS3動(dòng)畫屬性,由于只使用了–webkit- 前綴,所以只能在Chrome或Safari下正常運(yùn)行。
HTML代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CSS3動(dòng)畫</title>
<link type="text/css" rel="stylesheet" href="animation.css" />
</head></p> <p><body>
<div class="rotate">rotate</div>
<div class="scale">scale</div>
<div class="translate">translate</div>
<div class="skew">skew</div>
<div class="origin">origin</div>
<div class="single">single property</div>
<div class="whole">whole property</div>
<div class="resume">change & resume</div>
<div class="animation">animation</div>
</body>
</html>
CSS代碼:
animation.css
div {
width: 80px;
height: 30px;
line-height: 30px;
text-align: center;
background: #06F;
color: #fff;
font-family: Arial, Helvetica, sans-serif;
-webkit-border-radius: 10px;
margin: 5px;
}</p> <p>.rotate {
-webkit-transform: rotate(0deg);
}</p> <p>.rotate:hover {
-webkit-transform: rotate(90deg);
}</p> <p>.scale {
-webkit-transform: scale(1);
}</p> <p>.scale:hover {
-webkit-transform: scale(1.5);
}</p> <p>.translate {
-webkit-transform: translate(0px, 0px);
}</p> <p>.translate:hover {
-webkit-transform: translate(50px, 50px);
}</p> <p>.skew {
-webkit-transform: skew(0);
}</p> <p>.skew:hover {
-webkit-transform: skewY(20deg);
}</p> <p>.origin {
-webkit-transform-origin: top left;
-webkit-transform: rotate(0);
}</p> <p>.origin:hover {
-webkit-transform: rotate(45deg);
}</p> <p>.single {
width: 150px;
}</p> <p>.single:hover {
background: #f00;
width: 200px;
height: 100px;
line-height: 100px;
-webkit-transition-property: background;
-webkit-transition-duration: 2s;
}</p> <p>.whole {
width: 150px;
}</p> <p>.whole:hover {
width: 200px;
height: 100px;
line-height: 100px;
background: #f00;
-webkit-transition-duration: 2s;
}</p> <p>.resume {
width: 150px;
-webkit-transition-duration: 2s;
}</p> <p>.resume:hover {
width: 200px;
height: 100px;
line-height: 100px;
background: #f00;
-webkit-transition-duration: 2s;
}</p> <p>.animation:hover {
-webkit-animation-name: anim;
-webkit-animation-duration: 2s;
-webkit-animation-timing-function: linear;
-webkit-animation-direction: alternate;
-webkit-animation-iteration-count: infinite;
}</p> <p>@-webkit-keyframes anim {
0% {
width: 80px;
height: 30px;
line-height: 30px;
background: #06F;
}
50% {
width: 140px;
height: 65px;
line-height: 65px;
background: #360;
}
100% {
width: 200px;
height: 100px;
line-height: 100px;
background: #f00;
}
}
相關(guān)文章
簡要總結(jié)CSS編程中的響應(yīng)式設(shè)計(jì)
這篇文章主要介紹了CSS編程中的響應(yīng)式設(shè)計(jì),是CSS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-03- 這篇文章主要介紹了CSS的一些編程規(guī)范總結(jié),文中所列基本上得到多數(shù)開發(fā)者的共識(shí),樹立統(tǒng)一規(guī)范有助于debug等工作的進(jìn)行,因而強(qiáng)烈推薦此文!需要的朋友可以參考下2015-07-09
- 這篇文章主要介紹了10個(gè)必備的CSS技巧總結(jié),隨看隨記,敬請(qǐng)收藏~需要的朋友可以參考下2015-06-29
- 在阿里云首頁看到很多div都有加上:before和:after的屬性.但是大都只是做了類似的如下處理,請(qǐng)問這樣的意義是什么呢?研究了一番,原來是清除浮動(dòng)用的,下面來總結(jié)下清除浮動(dòng)2014-06-17
css 調(diào)試方法與經(jīng)驗(yàn)總結(jié)
主要記錄本人調(diào)試過程中所終結(jié)的經(jīng)驗(yàn)與方法,css關(guān)系到界面的美觀,有時(shí)候功能實(shí)現(xiàn)了。界面確丑到?jīng)]人用,終歸還是一件失敗的產(chǎn)品2014-06-15CSS多瀏覽器兼容總結(jié)(個(gè)人經(jīng)驗(yàn))
多瀏覽器兼容一直都是前端開發(fā)者需要考慮的重要問題之一,由于一直困擾著大家,因此本文整理了一些個(gè)人的實(shí)戰(zhàn)經(jīng)驗(yàn)與大家分享下,看過之后感覺不錯(cuò)的可以收藏哦2013-10-30CSS樣式的基礎(chǔ)學(xué)習(xí)總結(jié)
進(jìn)行css布局的同時(shí),沒有足夠的基礎(chǔ)知識(shí)是不可能的,本文為初學(xué)者整理了一些,經(jīng)常使用的css屬性,感興趣的朋友可以參考下,或許有所幫助2013-10-05- 本文整理了ie中div的垂直居中問題、margin加倍的問題、ie6下頁面min-width/height與max-width/height問題、ie6 3px bug及ie6捉迷藏的問題等等,感興趣的朋友可以參考下哈2013-04-01
CSS(Cascading Style Sheet)級(jí)聯(lián)樣式表常用術(shù)語總結(jié)
CSS(Cascading Style Sheet )級(jí)聯(lián)樣式表總結(jié),如果使用CSS不要忘記寫DOCTYPE等文檔類型定義,接下來詳細(xì)為您介紹,需要了解的朋友可以參考下2013-01-03- 本文是小編日常整理了關(guān)于css學(xué)習(xí)和總結(jié)相關(guān)知識(shí),本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2022-09-29