CSS3動畫技術應用基礎分享打賞

隨著網絡的發展,瀏覽器具有更強的渲染更高級代碼的能力,我們正逐步實現跨越所有平臺和瀏覽器的目標。我們不但可以要花費更少的時間來確保我們的盒模型在IE6中看起來正常,而且形成了鼓勵創新、避免hack、重前端腳本的氛圍。

網絡是一個非常好的環境,也是一個有豐富的知識來分享的協作社區。我們想要有圓角 ,我們就實現了它;我們想要 多背景圖片,我們實現了它;我們想要 邊框圖片,我們也讓它實現了。所以需求從來不是問題,否則,我們可能還都仍然在使用table來布局頁面而且使用過多的代碼呢。我們都知道,網絡無所不能。

為網絡而生

CSS 3的屬性比如border-radius、box-shadow和 text-shadow 在webkit(Safari、Chrome等)和Gecko(Firefox)等先進的瀏覽器中的使用開始出現增長的勢頭。它們(這些CSS屬性)已經為用戶創建更輕量的頁面和更豐富的體驗,而且它們可以優雅的降級。然而,這些只是CSS 3能為我們做的眾多事情中的一小部分。

在本文中,我們將走的更遠,看一看變形(transformation)、轉換(transition)和動畫(animation) 等更高級的CSS3技術。我們將涉及代碼本身、瀏覽器支持以及一些可以正確地展示這些新屬性是如何即提升你的設計又增強整體用戶體驗的例子。

CSS 變形(Transformation)

CSS transformation是W3C的一個草案。但當我第一次坐下來閱讀 它的 全部特性 以了解一些東西的時候,它并沒有讓我感到開竅。你可以想象的到,這個文檔是用技術術語的撰寫的,而且它更關注變形的圖形(比如繪圖)元素和矩陣。大一學習微積分之后就沒有碰過矩陣了,我必須為本章節做很多好的舊瀏覽器測試以及猜測和檢驗。

在看完我能找到的每一個教程和大量的瀏覽器測試之后,我總結出一些大家都能從中獲益的有用的關于CSS變形的信息。

transform

transform屬性實現了一些可用SVG實現的同樣的功能。它可用于內聯(inline)元素和塊級(block)元素。它允許我們旋轉、縮放和移動元素——只需要一行CSS代碼。

一些前衛設計的最大詬病就是文字不可選(必須要使用切圖的方法實現)。當你熟練使用transform屬性來控制文字的時候,這就不再是問題了,因為這是個純CSS方法,所以元素內的文字會保持可選。這是CSS相對于使用圖片(或背景圖片)的一個巨大優勢。

一些有趣而有用的變形功能:

rotate
Rotate(旋轉)允許你通過傳遞一個度數值來轉動一個對象。
scale
Scale是一個縮放功能,可以讓任一元素變的更大。它使用正數和負數以及小數作為參數。
translate
Translate就是基于X和Y 坐標重新定位元素
skew
顧名思義,skew就是要將對象傾斜,參數是度數
matrix
transform支持矩陣變換,就是基于X和Y 坐標重新定位元素

下面讓我們更深入的了解每一個功能吧。

Rotate

transform屬性有很多用法,其中一個就是translate(旋轉)。translate就是基于角度轉動一個對象并可用于內聯元素和塊級元素,它可以實現 很酷的效果 。

#nav{

-webkit-transform: rotate(-90deg);

-moz-transform: rotate(-90deg);

filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);

}

請注意在IE8中(非標準模式)它需要你寫成“-ms-filter”而不是“filter”。

瀏覽器支持

瀏覽器對translate的支持令人驚奇的廣泛。在上面的CSS片段中,我們直接加上-webkit-和-moz-前綴然后將#nav元素旋轉-90度。

相當簡單吧?唯一的問題是對于一個相當重要的設計元素,如果IE不支持,很多設計師就會不情愿使用它。

幸運的是,IE有這方面的濾鏡:圖形旋轉濾鏡。它可以有4個旋轉值:0, 1, 2,和3。你將不會獲得和Webkit和Gecko一樣的精密控制,但是至少在一定程度上保持統一(甚至IE6)。雖然這個濾鏡只支持4個值,顯得有些雞肋,但是對于IE來說,聊勝于無吧。

scale

scale并不像你想象的那樣工作:簡單的縮小和放大一個元素。縮放功能同時采用寬和高兩個值,這些值可以是正數、負數和小數。

正數值放大一個元素,正如你期望的那樣,基于指定的寬度和高度。

負數值并不會縮小元素,而是翻轉它(比如,文字被反轉)然后相應的縮放它。然而,你可以使用小于1的小數(例如.5)來收縮或者縮小一個元素。

#nav {

/* nav元素的寬和高都會被放大雙倍 */

-webkit-transform: scale(2);

-moz-transform: scale(2); }

#nav {

/* nav元素的寬會是雙倍,而高度保持不變 */

-webkit-transform: scale(2, 1);

-moz-transform: scale(2, 1);

}

#nav {

/* nav的寬度將是雙倍,并且水平翻轉,但是高度保持不變 */

-webkit-transform: scale(-2, 1);

-moz-transform: scale(-2, 1);

}

瀏覽器支持

scale屬性目前只有Firefox, Safari 和Chrome支持,到目前為止沒有一個IE版本支持。縮放一個對象是相當有意義的設計選擇。它可以通過漸進增強來使用:hover,這可以在你的導航上添加一個小小的趣味。

#nav li a:hover{

/* 這可以讓你的導航鏈接在鼠標經過的時候輕微的放大 */

-webkit-transform: scale(1.1); -moz-transform: scale(1.1);

}

translate

這個名稱“translate(轉化)”有點容易誤解。它事實上是一種使用X和Y坐標值定位元素的方法。

#nav{

/* 這會將nav元素向左移動10像素并向下移動20像素 */

-moz-transform: translate(10px, 20px);

-webkit-transform: translate(10px, 20px);

}

瀏覽器支持

translate屬性目前只被Firefox, Safari 和Chrome支持,而且還要使用瀏覽器的私有前綴-moz- 和-webkit-。

Skew

Skew也是一個很有用的transform功能,它可以將一個對象圍繞著x和y軸按照一定的角度傾斜。這和rotate的旋轉不一樣,rotate只是旋轉,而不會讓元素的形狀改變。skew會讓一個元素的形狀改變。skew有兩個參數,分別代表x和y軸的傾斜度數。

#nav{

/* 這會將nav元素向左移動10像素并向下移動20像素 */

-moz-transform: skew(30deg, -10deg);

-webkit-transform: skew(30deg, -10deg);

}

瀏覽器支持

Skew屬性目前只被Firefox, Safari 和Chrome支持,而且還要使用瀏覽器的私有前綴-moz- 和-webkit-。

Matrix

沒錯,Matrix就是矩陣,矩陣是高等數學中非常基礎的一個東東,而在CSS 3中確實一個相當高級的功能,CSS 3引入matrix函數,可以非常靈活的實現上述的各種效果。它有6個參數(a,b,c,d,e,f),它事實上是一個3*3矩陣,經過該矩陣將舊的參數轉換成新值:

| a b e |

| c d f |

| 0 0 1 |

如果你有興趣深入研究,可以看一下這里http://www.w3.org/TR/SVG/coords.html#TransformMatrixDefined,這是SVG的一個文檔,但是對于matrix變換的原理是通用的。

讓我們來看一個例子吧:

#nav{

/* nav元素將會像右上角傾斜 */

-moz-transform: matrix(1, -0.2, 0, 1, 0, 0);

-webkit-transform: matrix(1, -0.2, 0, 1, 0, 0);

}

瀏覽器支持

可喜的是,IE支持matrix濾鏡,雖然它不支持大部分CSS3變形功能,但是使用它的這個濾鏡,基本也可以實現相同的效果,不過,你要先搞明白矩陣運算再說。webkit和Firefox(3.5+)都支持該功能。

鏈式變形

變形常常是單獨的,但是如果你想同時用到多種變形,代碼也是可以快速整合的,特別是使用私有擴展。幸運的是,我們有一些內置的縮寫:

#nav{
-moz-transform:?translate(10,?25);
-webkit-transform:?translate(10,?25);
-moz-transform:?rotate(90deg);
-webkit-transform:?rotate(90deg);
-moz-transform:?scale(2,?1);
-webkit-transform:?scale(2,?1);
}

這些變形可以被鏈到一起,從而讓你的代碼更高效:

nav{
-moz-transform:?translate(10,?25)?rotate(90deg)?scale(2,?1);
-webkit-transform:?translate(10,?25)?rotate(90deg)?scale(2,?1);
}

 

這些屬性的真正的威力是合并到一起。你可以移動、旋轉、縮放并控制任何內聯元素和塊級元素而不使用JavaScript。一旦這些屬性的支持變的更加廣泛,我們就可以創建更豐富和更輕量的界面和應用。

transform-origin

transform-origin不是transform的一個子功能,但是和transform關系非常密切。它可以用來指定transform的起點,比如,rotate變形的默認起點是其中間,你可以將起點設置在左上角,或者左下角,這樣rotate變形的結果就可能大不相同了。

transform-origin接受兩個參數,它們可以是百分比,em,px等具體的值,也可以是left,center,right,或者 top,middle,bottom等描述性參數。幾個例子:

.class1{-moz-transform-origin:?0?0;
-webkit-transform-origin:?0?0;
...
}
.class2{-moz-transform-origin:100%?100%;
-webkit-transform-origin:100%?100%;
...}
.class3{-moz-transform-origin:top?left;
-webkit-transform-origin:top?left;
...}

瀏覽器兼容性

該屬性目前也只有webkit和firefox支持,而且需要添加各自的私有前綴。

transition(轉換)

一個涉及到CSS屬性的基本的轉換就是定義和移動一個元素從它的靜止狀態(比如,深藍色背景)到它的hover或者激活狀態(比如,淺藍色背景)。

轉換可以和變形同時使用(以及引發諸如:hover 或:focus事件)以創建一些動畫。淡出背景色彩,滑動一個元素以及讓一個對象旋轉都可以通過CSS轉換實現。

?#nav?a{?background-color:red;?}
#nav?a:hover,?#nav?a:focus{
background-color:blue;
/*?告訴轉換去應用到background-color?屬性(看起來像一個CSS?參數,不是嗎??#foreshadowing)*/
-webkit-transition-property:background-color;
/*?讓它持續兩秒鐘*/
-webkit-transition-duration:2s;
}

 

轉換的一些參數

  • transition-property
    指定轉換的CSS屬性名稱,比如,上面的例子中,將轉換應用于background-color屬性。
  • transition-duration
    定義轉換花費的時間(從舊屬性換到新屬性花費的時間)
  • transition-timing-function
    可以理解為過度效果。指定轉換過程中的中間值。可以用cubic-bezier指定。當然有幾個常用的內置值:ease | linear | ease-in | ease-out | ease-in-out
  • transition-delay
    這個比較容易理解,就是轉換延遲的時間。時間可以為正整數、負整數和零,非零的時候必須設置單位是s(秒)或者ms(毫秒),為負數的時候,轉換的動作會從該時間點開始顯示,之前的動作被截斷。

:參數部分為翻譯時添加,原文中沒有。

瀏覽器支持

像transform屬性一樣酷,但是目前只有WebKit瀏覽器支持。-moz-transition已經在最近的nightly-build版本的Firefox 3.7中可用。你也可以添加-moz-transition到你的CSS中以實現將來的增強。甚至可以添加一個不用私有前綴的屬性,以防萬一。

Animation

動畫是CSS 3最有用的地方。你可以將我們在上面討論的所有的元素與動畫屬性比如animation-duration、animation-name 和animation-timing-function整合以創建像Flash動畫一樣的效果——純CSS。

#rotate?{
margin:?0?auto;
width:?600px;
height:?400px;
/*?確保我們是在一個?3-D?空間?*/
-webkit-transform-style:?preserve-3d;
/*讓整個行使用x-軸旋轉、7秒中的動畫、無限次播放以及線性?*/
-webkit-animation-name:?x-spin;
-webkit-animation-duration:?7s;
-webkit-animation-iteration-count:?infinite;
-webkit-animation-timing-function:?linear;
}
/*?定義要調用的動畫?*/
@-webkit-keyframes?x-spin?{
0%?{?-webkit-transform:?rotateX(0deg);?}
50%?{?-webkit-transform:?rotateX(180deg);?}
100%?{?-webkit-transform:?rotateX(360deg);?}
}

 

這個夢幻的CSS動畫代碼和在線演示可以在?webkit?網站看到。該演示可以在任何網站看到,但是動畫效果卻只能在Mac os(雪豹)的?WebKit的nightly build版本?可見。它看起來就像上面的視頻中的一樣,如果你是在用mac os (雪豹版本),我認為安裝一個webkit以親眼看看這個效果是很值得的(它真的很酷)。Windows系統用戶暫時無法欣賞這個效果。

animation的一些參數

  • animation的參數和translate有些像,所以如果你理解了translate的參數,這里就不難理解了。
  • animation-name
    動畫的名稱。
  • animation-duration
    定義動畫播放一次需要的時間。默認為0;
  • animation-timing-function
    定義動畫播放的方式,參數設置類似transition-timing-function
  • animation-delay
    定義動畫開始的時間
  • animation-iteration-count
    定義循環的次數,infinite即為無限次。默認是1。
  • -webkit-animation-direction
    動畫播放的方向,兩個值,默認為normal,這個時候動畫的每次循環都向前播放。另一個值是alternate,則第偶數次向前播放,第奇數次向反方向播放。

瀏覽器支持

不幸的是,目前,只有少數瀏覽器支持CSS動畫。2D CSS animations 可以在Safari 4 (Leopard)、Chrome?3、Safari Mobile、Shira 以及其它Webkit 瀏覽器中工作。Safari 4 (Snow Leopard)支持3D動畫。

總結

現在,JavaScript可以在CSS 3完善之前彌補這個差距。遺憾的是,讓所有瀏覽器支持這些很棒的屬性可能需要一個很長的過程。不用等待那一天的到來,我們可以先使用一些嚴謹的漸進增強以及以來Javascript來增強我們的網站和應用。這不是件壞事,至少現在看起來是。

占絕對市場份額的IE瀏覽器,在IE9中也加入了對CSS3的支持。

web的前景是光明的,特別是因為這些類似動畫的高度實驗性的屬性。盡管很多屬性對客戶或高級產品工作還不可用,至少他們很有趣!我們都期待著有一天,我們可以支持所有平臺,以建立一些真的很棒的輕量級應用。

轉載自網絡

CSS3動畫技術應用基礎分享
文章《CSS3動畫技術應用基礎分享》二維碼
  • 微信打賞
  • 支付寶打賞

已有7條評論

  1. 小勝

    確實很強大啊,這個評論框也很強大,這就是css3的產物了吧?呵呵

    2012-07-12 05:40 回復
  2. 小勝

    確實很強大啊,這個評論框也很強大,這就是css3的產物了吧?呵呵

    2012-07-12 05:40 回復
  3. 金貓博客

    互聯網技術的發展真是太快了。。。

    2012-07-02 17:58 回復
    • 窮小子

      快。前所未有的快啊。現在都是邊學邊落伍了。。

      2012-07-02 23:09 回復
  4. 游客 128

    呵呵,不錯,我來也

    2012-06-24 01:38 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖