探究CSS3動畫:transform/transition/animation

轉(zhuǎn)換(transform)

如大家了解的一樣,轉(zhuǎn)換分為2D轉(zhuǎn)換和3D轉(zhuǎn)換。利用CSS3的轉(zhuǎn)換功我們能夠?qū)υ剡M(jìn)行移動、縮放、轉(zhuǎn)動、拉長或拉伸,并且能結(jié)合動畫可以實現(xiàn)許多酷炫的效果。

使用轉(zhuǎn)換功能需要使用:

{
    -webkit-transform:;//Chrome Safari
       -moz-transform:;//Firefox
        -ms-transform:;//for IE9
         -o-transform:;//Opera
            transform:;
}

值得注意的是,這里設(shè)置之后,其尺寸改變不會影響到別的元素,像是脫離了文檔流一樣設(shè)置了relative,然而在元素上設(shè)置margin等屬性仍然會在其本來的盒子上影響到文檔流別的元素。一言以蔽之,設(shè)置transform后未脫離文檔流。

2D轉(zhuǎn)換

  • translate()——移動
  • rotate()——旋轉(zhuǎn)
  • scale()——縮放
  • skew()——翻轉(zhuǎn),根據(jù)給定的水平線和垂直線參數(shù)翻轉(zhuǎn)角度
  • matrix()
  • transform-origin()

translate()

元素根據(jù)給定的坐標(biāo)(x,y)位置參數(shù)從其位置移動。

注意,其實使用本方法就像設(shè)置relative一樣,相對于原來位置偏移,且原位置仍然占據(jù)空間。

rotate()

元素順時針旋轉(zhuǎn)給定角度(正值),逆時針則設(shè)置負(fù)值。eg:rotate(40deg)

旋轉(zhuǎn)的元素,占據(jù)的空間仍然未變,像設(shè)置了定位relatvie一樣,在此基礎(chǔ)上旋轉(zhuǎn),未脫離文檔流。

scale()

元素的尺寸會根據(jù)設(shè)置得scale()方法增加或減少。改變后他可能會覆蓋在其他元素上。

如果只寬度或者高度尺寸變化,則可使用scaleX()或者scaleY()。

div
{
    -webkit-transform: scale(2,4);  /* Safari 和 Chrome */
    -moz-transform: scale(2,4); /* Firefox */
    -ms-transform: scale(2,4);  /* IE 9 */
    -o-transform: scale(2,4);   /* Opera */
    transform: scale(2,4);
}

skew()
skew(x-angle,y-angle),沿X,Y偏轉(zhuǎn)角度;
如果只給定一個值,即skew(angle),則會只向X軸偏轉(zhuǎn),但是我試了這樣的寫法skew(,angle),結(jié)果整個元素都不見了。求大家指教。
如果想只沿一個軸偏轉(zhuǎn),可以使用skewX()或者skewY()。

matrix()
matrix() 方法把所有 2D 轉(zhuǎn)換方法組合在一起。
matrix() 方法需要六個參數(shù),包含數(shù)學(xué)函數(shù),允許您:旋轉(zhuǎn)、縮放、移動以及傾斜元素。

transform-origin()

transform-origin屬性允許您改變被轉(zhuǎn)換元素的位置。2D 轉(zhuǎn)換元素能夠改變元素 x 和 y軸。3D 轉(zhuǎn)換元素還能改變其 Z 軸。

語法
transform-origin: x-axis y-axis z-axis;

3D轉(zhuǎn)換

  • rotateX()
  • rotateY()

需要注意的是:opera不支持3D轉(zhuǎn)換

transition(過渡)

兼容性(不支持IE9及之前版本)

{
    -webkit-transition: width 2s;   /* Safari 和 Chrome */
    -moz-transition: width 2s;  /* Firefox 4 */
    -o-transition: width 2s;    /* Opera */
    transition: width 2s;
}

過渡屬性

  • transtion
  • transtion-property
  • transtion-durtion
  • transtion-timing-function
  • transtion-delay

如何工作?
SS3 過渡是元素從一種樣式逐漸改變?yōu)榱硪环N的效果。
要實現(xiàn)這一點,必須規(guī)定兩項內(nèi)容:

  • 希望添加效果的CSS屬性
  • 效果時長
    通常,該屬性會結(jié)束JS和偽類使用
    eg:
div
{
width:100px;
height:100px;
background:yellow;
transition:width 2s;
-moz-transition:width 2s; /* Firefox 4 */
-webkit-transition:width 2s; /* Safari and Chrome */
-o-transition:width 2s; /* Opera */
}

div:hover
{
width:300px;
}

動畫(animation)

CSS3動畫屬性

  • @keyframes——規(guī)定動畫
  • animation——所有動畫簡寫屬性,除animation-play-state
  • animation-name——規(guī)定@keyframes動畫名稱
  • animation-durtion——規(guī)定一個動畫花費的時間(ms或s),默認(rèn)0
  • animation-timing-function——規(guī)定動畫的速度曲線,默認(rèn)“ease”
  • animation-delay——規(guī)定動畫何時開始,默認(rèn)0
  • animation-iteration-count——規(guī)定動畫播放次數(shù),默認(rèn)1
  • animation-direction——規(guī)定動畫是否在下一周期逆向播放,默認(rèn)normal
  • animation-play-state——規(guī)定動畫是否正在運行或暫定默認(rèn)“running”
  • animation-fill-mode——規(guī)定對象時間之外的狀態(tài)

兼容(IE9及之前版本不支持)

    -webkit-animation:動畫名;
       -moz-animation:動畫名;
         -o-animation:動畫名;
            animation:動畫名;
    
    
    相應(yīng)的動畫幀:
    @keyframes 動畫名
    {

    }

   @-moz-keyframes 動畫名 /* Firefox */
    {

    }

  @-webkit-keyframes 動畫名 /* Safari 和 Chrome */
   {

   }

  @-o-keyframes 動畫名 /* Opera */
  {

  }
    

眾所周知,需在 CSS3 中創(chuàng)建動畫,就得學(xué)習(xí)@keyframes 規(guī)則。@keyframes 規(guī)則用于創(chuàng)建動畫。在 @keyframes 中規(guī)定某項 CSS 樣式,就能創(chuàng)建由當(dāng)前樣式逐漸改為新樣式的動畫效果。
那么什么是動畫呢?

動畫是使元素從一種樣式逐漸變化為另一種樣式的效果。我們可以改變?nèi)我舛嗟臉邮饺我舛嗟拇螖?shù)。最好用百分比來規(guī)定變化發(fā)生的時間,或用關(guān)鍵詞 "from" 和 "to",等同于 0% 和 100%。0% 是動畫的開始,100% 是動畫的完成。始終定義 0% 和 100% 選擇器。能得到最佳的瀏覽器支持。

animation-timing-function

  • linear:勻速
  • ease:低速開始,加快,結(jié)束前變慢
  • ease-in:低速開始
  • ease-out:低速結(jié)束
  • ease-in-out:低速開始和結(jié)束
  • cubic-bezier(n,n,n):未知

animation-direction

  • normal:默認(rèn)(正向)
  • alternate:反向

animation-iteration-count

  • n:播放次數(shù)
  • infinite:無限播放

animation-play-state()

  • paused
  • running

animation-fill-mode

  • none:不改變默認(rèn)行為
  • forwards:動畫完成后,保持最后一個屬性值(最后一個關(guān)鍵幀定義)
  • backwards:在 animation-delay 所指定的一段時間內(nèi),在動畫顯示之前,應(yīng)用開始屬性值(在第一個關(guān)鍵幀中定義)。
  • both:向前和向后填充模式都被應(yīng)用。

動畫實例

一個簡單的天氣預(yù)報模型,也是我在微博上看到的,就下載源碼研究了一下。供大家學(xué)習(xí)參考。
HTML結(jié)構(gòu):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>aimation</title>
    <link rel="stylesheet"  href="weather.css" />
</head>
<body>
    <div class="container">
        <div class="sunny"></div>
        <div class="cloudy"></div>
        <div class="rainy"></div>
        <div class="rainbow"></div>
        <div class="starry"></div>
        <div class="stormy"></div>
        <div class="snowy"></div>
    </div>
</body>
</html>

具體可以前去純CSS天氣預(yù)報看看效果和源碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,435評論 0 11
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,117評論 0 2
  • 作者:blue(又名一書and一世界) 我的github**用途: **當(dāng)作字典來查 some websites ...
    一書and一世界閱讀 1,254評論 2 19
  • 1.CSS3 邊框 border-radius CSS屬性用來設(shè)置邊框圓角。當(dāng)使用一個半徑時確定一個圓形;當(dāng)使用兩...
    garble閱讀 779評論 0 0
  • animation簡介? animation無疑是CSS3里最牛的功能??梢圆捎幂^少的代碼制作超炫的動畫。? an...
    柒月柒日晴7閱讀 515評論 0 2

友情鏈接更多精彩內(nèi)容