W3C標(biāo)準(zhǔn)中對(duì)CSS3的transition這是樣描述的:“CSS的transition允許CSS的屬性值在一定的時(shí)間區(qū)間內(nèi)平滑地過(guò)渡。這種效果可以在鼠標(biāo)單擊、獲得焦點(diǎn)、被點(diǎn)擊或?qū)υ厝魏胃淖冎杏|發(fā),并圓滑地以動(dòng)畫效果改變CSS的屬性值。”
下面我們從最簡(jiǎn)單的語(yǔ)法和屬性值開(kāi)始一步一步來(lái)學(xué)習(xí)transition的具體使用:
語(yǔ)法:
1
2
3
|
transition : [<'transition-property'> || <'transition-duration'> ||
<'transition-timing-function'> || <'transition-delay'> [, [<'transition-property'> ||
<'transition-duration'> || <'transition-timing-function'> || <'transition-delay'>]]*
|
transition主要包含四個(gè)屬性值:執(zhí)行變換的屬性:transition-property;變換延續(xù)的時(shí)間:transition- duration;在延續(xù)時(shí)間段,變換的速率變化transition-timing-function;變換延遲時(shí)間transition- delay。下面分別來(lái)看這四個(gè)屬性值:
一、transition-property:
語(yǔ)法:
1
|
transition-property : none | all | [ <IDENT> ] [ ',' <IDENT> ]*
|
transition-property是用來(lái)指定當(dāng)元素其中一個(gè)屬性改變時(shí)執(zhí)行transition效果,其主要有以下幾個(gè)值:none(沒(méi)有屬 性改 變);all(所有屬性改變)這個(gè)也是其默認(rèn)值;indent(元素屬性名);當(dāng)其值為none時(shí),transition馬上停止執(zhí)行,當(dāng)指定為all 時(shí),則元素產(chǎn)生任何屬性值變化時(shí)都將執(zhí)行transition效果,ident是可以指定元素的某一個(gè)屬性值。其對(duì)應(yīng)的類型如下:
1、color: 通過(guò)紅、綠、藍(lán)和透明度組件變換(每個(gè)數(shù)值單獨(dú)處理),如:background-color,border-color,color,outline-color等CSS屬性;
2、length:真實(shí)的數(shù)字,如:word-spacing,width,vertical- align,top,right,bottom,left,padding,outline-width,margin,min-width,min- height,max-width,max-height,line-height,height,border-width,border- spacing,background-position等屬性;
3、percentage:真實(shí)的數(shù)字,如:word-spacing,width,vertical- align,top,right,bottom,left,min-width,min- height,max-width,max-height,line-height,height,background-position等屬性;
4、integer離散步驟(整個(gè)數(shù)字),在真實(shí)的數(shù)字空間,以及使用floor()轉(zhuǎn)換為整數(shù)時(shí)發(fā)生,如:outline-offset,z-index等屬性;
5、number真實(shí)的(浮點(diǎn)型)數(shù)值,如:zoom,opacity,font-weight等屬性;
6、transform list:詳情請(qǐng)參閱:《CSS3 Transform》。
7、rectangle:通過(guò)x、 y、 width和height(轉(zhuǎn)為數(shù)值)變換,如:crop;
8、visibility:離散步驟,在0到1數(shù)字范圍之內(nèi),0表示“隱藏”,1表示完全“顯示”,如:visibility;
9、shadow:作用于color、x、y、和blur(模糊)屬性,如:text-shadow;
10、gradient:通過(guò)每次停止時(shí)的位置和顏色進(jìn)行變化。它們必須有相同的類型(放射狀的或是線性的)和相同的停止數(shù)值以便執(zhí)行動(dòng)畫,如:background-image;
11、paint server (SVG):只支持下面的情況:從gradient到gradient以及color到color,然后工作與上面類似;
12、space-separated list of above:如果列表有相同的項(xiàng)目數(shù)值,則列表每一項(xiàng)按照上面的規(guī)則進(jìn)行變化,否則無(wú)變化;
13、a shorthand property:如果縮寫的所有部分都可以實(shí)現(xiàn)動(dòng)畫,則會(huì)像所有單個(gè)屬性變化一樣變化。
具體什么CSS屬性可以實(shí)現(xiàn)transition效果,在W3C官網(wǎng)中列出了所有可以實(shí)現(xiàn)transition效果的CSS屬性值以及值的類型,大家可以點(diǎn)這里了解詳情。這里需要提醒一點(diǎn)是,并不是什么屬性改變都為觸發(fā)transition動(dòng)作效果,比如頁(yè)面的自適應(yīng)寬度,當(dāng)瀏覽器改變寬度時(shí),并不會(huì)觸發(fā)transition的效果。但上述表格所示的屬性類型改變都會(huì)觸發(fā)一個(gè)transition動(dòng)作效果。
二、transition-duration:
語(yǔ)法:
1
|
transition-duration : <time> [, <time>]*
|
transition-duration是用來(lái)指定元素 轉(zhuǎn)換過(guò)程的持續(xù)時(shí)間,取值:<time>為數(shù)值,單位為s(秒),可以作用于所有元素,包括:before和:after偽元素。其默認(rèn)值是0,也就是變換時(shí)是即時(shí)的。
三、transition-timing-function:
語(yǔ)法:
1
2
3
|
transition-timing-function : ease | linear | ease-in | ease-out | ease-in-out |
cubic-bezier(<number>, <number>, <number>, <number>) [, ease | linear | ease-in |
ease-out | ease-in-out | cubic-bezier(<number>, <number>, <number>, <number>)]*
|
取值:
transition-timing-function的值允許你根據(jù)時(shí)間的推進(jìn)去改變屬性值的變換速率,transition-timing-function有6個(gè)可能值:
1、ease:(逐漸變慢)默認(rèn)值,ease函數(shù)等同于貝塞爾曲線(0.25, 0.1, 0.25, 1.0);
2、linear:(勻速),linear 函數(shù)等同于貝塞爾曲線(0.0, 0.0, 1.0, 1.0);
3、ease-in:(加速),ease-in 函數(shù)等同于貝塞爾曲線(0.42, 0, 1.0, 1.0);
4、ease-out:(減速),ease-out 函數(shù)等同于貝塞爾曲線(0, 0, 0.58, 1.0);
5、ease-in-out:(加速然后減速),ease-in-out 函數(shù)等同于貝塞爾曲線(0.42, 0, 0.58, 1.0);
6、cubic-bezier:(該值允許你去自定義一個(gè)時(shí)間曲線), 特定的cubic-bezier曲線。 (x1, y1, x2, y2)四個(gè)值特定于曲線上點(diǎn)P1和點(diǎn)P2。所有值需在[0, 1]區(qū)域內(nèi),否則無(wú)效。
其是cubic-bezier為通過(guò)貝賽爾曲線來(lái)計(jì)算“轉(zhuǎn)換”過(guò)程中的屬性值,如下曲線所示,通過(guò)改變P1(x1, y1)和P2(x2, y2)的坐標(biāo)可以改變整個(gè)過(guò)程的Output Percentage。初始默認(rèn)值為default。
其他幾個(gè)屬性的示意圖:
四、transition-delay:
語(yǔ)法:
1
|
transition-duration : <time> [, <time>]*transition-delay : <time> [, <time>]*
|
transition-delay是用來(lái)指定一個(gè)動(dòng)畫開(kāi)始執(zhí)行的時(shí)間,也就是說(shuō)當(dāng)改變?cè)貙傩灾岛蠖嚅L(zhǎng)時(shí)間開(kāi)始執(zhí)行transition效果,取 值:<time>為數(shù)值,單位為s(秒),它的使用和transition-duration極其相似,也可以作用于所有元素,包 括:before和:after偽元素。 默認(rèn)大小是”0″,也就是變換立即執(zhí)行,沒(méi)有延遲。
有時(shí)我們不只改變一個(gè)CSS效果的屬性,而是想改變兩個(gè)或者多個(gè)CSS屬性的transition效果,那么我們只要把幾個(gè)transition的 聲明串 在一起,用逗號(hào)(“,”)隔開(kāi),然后各自可以有各自不同的延續(xù)時(shí)間和其時(shí)間的速率變換方式。但需要值得注意的一點(diǎn):transition-delay與 transition-duration的值都是時(shí)間,所以要區(qū)分它們?cè)谶B寫中的位置,一般瀏覽器會(huì)根據(jù)先后順序決定,第一個(gè)可以解析為時(shí)間的怭值為 transition-duration第二個(gè)為transition-delay。如:
1
2
3
4
5
6
|
a {
-moz-transition: background 0.5s ease-in,color 0.3s ease-out;
-webkit-transition: background 0.5s ease-in,color 0.3s ease-out;
-o-transition: background 0.5s ease-in,color 0.3s ease-out;
transition: background 0.5s ease-in,color 0.3s ease-out; }
}
|
如果你想給元素執(zhí)行所有transition效果的屬性,那么我們還可以利用all屬性值來(lái)操作,此時(shí)他們共享同樣的延續(xù)時(shí)間以及速率變換方式,如:
1
2
3
4
5
6
|
a {
-moz-transition: all 0.5s ease-in;
-webkit-transition: all 0.5s ease-in;
-o-transition: all 0.5s ease-in;
transition: all 0.5s ease-in;
}
|
綜合上述我們可以給transition一個(gè)速記法:transition: <property> <duration> <animation type> <delay>如下圖所示:
相對(duì)應(yīng)的一個(gè)示例代碼:
1
2
3
4
5
6
|
p {
-webkit-transition: all .5s ease-in-out 1s;
-o-transition: all .5s ease-in-out 1s;
-moz-transition: all .5s ease-in-out 1s;
transition: all .5s ease-in-out 1s;
}
|