CSS3 Transitions, Transforms和Animation使用簡介與應用展示

來源:互聯網
上載者:User

標籤:style   blog   class   code   java   tar   

by zhangxinxu from http://www.zhangxinxu.com
本文地址:http://www.zhangxinxu.com/wordpress/?p=1268

一、前言兼目錄索引

《天龍八部》裡的虛竹小和尚之前可以說是和尚的先進人物與代表模範,各類清規戒律謹記與嚴守。但是,後來呢,花姑娘送到跟前,什麼戒律都成了浮雲,禁不住誘惑享樂去了。啊,我現在似乎有類似的感覺,本來不打算深究CSS3的一些屬性的,但是其效果以及實際應用價值之誘惑實在巨大,還是抵擋不住,折騰下了這篇文章。勞民傷財的工程越少越好,所以,這裡乾脆把CSS3 動畫相關的幾個屬性湊合到一起了,這樣,至少一年半載內不會再寫相關的文章了。

CSS3動畫相關的幾個屬性是:transition, transform, animation;我分別理解為過渡,變換,動畫。雖意義相近,但具體角色不一。就像是SHE組合,雖然都是三個女生,都唱同一首歌,但有負責高音,和擅長低音的,具體工作於角色還是有差異的。//zxx:貌似那個誰誰燒傷了,真是不幸~~

transition指過渡啦,就是從a點都b點,就像過江坐渡輪,是有時間的,是連續的,一般針對常規CSS屬性;transform指變換,就那幾個固定的屬性:旋轉啦,縮放啦,位移啦什麼的,與獨立於遠房親戚transition使用,但是,效果就是很乾澀機械的旋轉移動。要是配合transition屬性,旋轉啊什麼的,就會很平滑。animation最先安家於Safari瀏覽器,自成一家,與transition和transform有老死不相往來之感,但是要說單挑的話,animation要比transition厲害些。

目錄索引
1. 話說Transitions這廝
2. 話說Transforms這貨
3. 話說Animation這物
4. 更實際綜合的效果展示
5. 瀏覽器支援情況
6. 參考文章及延伸閱讀
7. 結語這東西

二、話說Transitions這廝

CSS3 transition屬性早在去年我的“CSS3 transition實現超酷圖片牆動畫效果”一文中就有過介紹。其作用是:平滑的改變CSS的值。無論是點擊事件,焦時間點事件,還是滑鼠hover,只要值改變了,就是平滑的,就是動畫。於是乎,只要一個整站通用的class,就可以很輕鬆的漸進增強地實現動畫效果,超有實用價值的說。

transition有下面些具體屬性:

transition-property :* //指定過渡的性質,比如transition-property:backgrond 就是指backgound參與這個過渡
transition-duration:*//指定這個過渡的期間
transition-delay:* //延遲過渡時間
transition-timing-function:*//指定過渡類型,有ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier

例如下面這個很簡單的例子:

.trans {    -webkit-transition-property: background-color;    -webkit-transition-duration: 0.3s;    -webkit-transition-timing-function: ease;}.trans:hover {    background-color: #486AAA;    color: #fff;}

結果在Safari或是Chrome瀏覽器下可以看到如下效果:

如果你正在使用或有webkit核心的瀏覽器,您可能狠狠地點擊這裡:webkit核心瀏覽器下背景色過渡demo

就跟CSS2的background屬性一樣,平時我們都不會像上面一樣,把transition的屬性一個一個攤開寫,而是合并。

還是上面的例子,我們將transition屬性合并,並擴充幾個瀏覽器,如下CSS代碼:

.trans {    ...    -webkit-transition: background-color 0.3s ease;    -moz-transition: background-color 0.3s ease;    -o-transition: background-color 0.3s ease;    transition: background-color 0.3s ease;}.trans:hover {    background-color: #486AAA;    color: #fff;}

如下HTML代碼:

<a href="/" class="trans">經過我~~</a>

結果如下(截自Opera 10.6瀏覽器):

transition中的transition-timing-function屬性讓人心存芥蒂,其一堆ease相關的值(linear | ease-in | ease-out | ease-in-out | cubic-bezier),不太容易讓人理解與記住。尤其其中cubic-bezier就是指貝茲路徑,與複雜的數學扯上的關係,不禁勾起了高中時數學的夢魘。

其實呢,理一理,也還好。首先cubic-bezier這個基本上就不用鳥了,99%的情況都用不到這個東西,所以,難得清閑,直接pass掉。linear很好記,線性嘛。至於ease-in | ease-out | ease-in-out,就是指緩動效果啦,說白了就是指開始時候慢慢動呢還是結束的時候慢慢動。那麼in和out那個先慢慢動呢?啊,我們可以聯想記憶,很好記的。我們都知道OOXX吧,ease-in中的in就表示進入,進入的時候顯然一開始都是慢的,等瞄準就緒後才能快速衝刺進入,於是ease-in表示先慢後快;ease-out其out表示出來,出來肯定是先快後慢的,因為出來時臨近洞口速度肯定要降下來,免得跑出來亂了節奏,於是ease-out表示先快後慢;最後,很好理解的,ease-in-out表示一進一出,也就是先慢後快再慢。

有些純潔的人可能不太明白上面邪惡的文字表示的含義,沒關係,我們可以看圖說話,下面截自不同運動曲線下同一時間的,從中可以看到哪個先快,哪個先慢(注意:最後都是同時到達):

要是你覺得上面的靜態表意不夠具體,您可以狠狠地點擊這裡:不同緩動類效果demo(Opera/Chrome/Safari)

您可以觀察方塊的運動規律,知道不同緩動名稱的效果是如何的。

以上就是transition的簡單介紹,要查看更詳細更權威的資訊,可以去官方頁面查看。

三、話說transform這貨

transform指變換,使用過photoshop的人應該知道裡面的Ctrl+T自由變換。transform就是指的這個東西,展開,壓縮,旋轉,位移。見下面範例程式碼:

.trans_skew { transform: skew(35deg); }.trans_scale { transform:scale(1, 0.5); }.trans_rotate { transform:rotate(45deg); }.trans_translate { transform:translate(10px, 20px); }

結果就有類似下面的些效果:

您可以狠狠地點擊這裡:transform些屬性效果demo

transform屬性要是加上transition的過渡特性,那可就是如虎添翼,櫻木花道配上流川楓啊,可以產生不少美妙的火花,例如下面這個例子,關鍵代碼如下:

.trans_effect {    -webkit-transition:all 2s ease-in-out;    -moz-transition:all 2s ease-in-out;    -o-transition:all 2s ease-in-out;    -ms-transition:all 2s ease-in-out;        transition:all 2s ease-in-out;}.trans_effect:hover {    -webkit-transform:rotate(720deg) scale(2,2);    -moz-transform:rotate(720deg) scale(2,2);    -o-transform:rotate(720deg) scale(2,2);    -ms-transform:rotate(720deg) scale(2,2);    transform:rotate(720deg) scale(2,2);        }

結果在Chrome預計Safari瀏覽器下就有了祖瑪裡面青蛙掛掉時的縮放旋轉效果了:

滑鼠經過時:

如果你手上有webkit核心的瀏覽器,可以狠狠地點擊這裡:酷酷的縮放旋轉動畫demo

transform還支援3D變換,怎一酷字了得。由於某些不可告人的原因,這裡就不展示了。故,transform部分到此結束。

四、話說animations這物

截止2010年11月份,animations這物似乎還是只在webkit核心的瀏覽器上起作用,所以本段落的一些demo效果,需在webkit核心瀏覽器下查看,不在重複贅述。

animations的介紹以執行個體驅動。先看簡單的縮放擴充動畫執行個體:
您可以狠狠地點擊這裡:animations水平彈性縮放變色動畫

效果大致如下,預設是個很規矩很安靜的矩形框:

滑鼠移上去後顯示慢慢的寬度增加,然後突然快速的寬度增加,同時背景色加深,下為動畫過程中的:

關鍵的CSS代碼如下:

@-webkit-keyframes resize {    0% {        padding: 0;    }    50% {        padding: 0 20px;        background-color:rgba(190, 206, 235, 0.2);            }    100% {        padding: 0 100px;        background-color:rgba(190, 206, 235, 0.9);    }}.anim_box:hover {    -webkit-animation-name: resize;    -webkit-animation-duration: 1.5s;    -webkit-animation-iteration-count: 4;    -webkit-animation-direction: alternate;    -webkit-animation-timing-function: ease-in-out;}

此例子中,滑鼠移至上方時動畫只執行4次。

animations不僅適用於CSS2中的屬性,CSS3也是支援的,例如box-shadow盒陰影製作效果,所以,我們可以實現外光暈效果的。使用過web qq的人應該有印象,當滑鼠移到聊天對象腦袋上的時候會有藍色外光暈的動畫,但是那是gif動畫圖片實現的(現在自動跳轉到web qq 2.0已看不到效果)。gif動畫實現的效果類似於下面(很相容):

 摸左邊張含韻

但是gif的重用性有限而且製作破費功夫,如果簡單幾行CSS代碼就可以實現高效能高擴充的效果豈不更加,現在animations就可以搞定這一些。

您可以狠狠地點擊這裡:animations下的外光暈動畫demo

光暈效果如下:

主要的CSS代碼如下:

@-webkit-keyframes glow {    0% {        -webkit-box-shadow: 0 0 12px rgba(72, 106, 170, 0.5);        border-color: rgba(160, 179, 214, 0.5);             }    100% {        -webkit-box-shadow: 0 0 12px rgba(72, 106, 170, 1.0), 0 0 18px rgba(0, 140, 255, 1.0);        border-color: rgba(160, 179, 214, 1.0);     }}.anim_image {    padding:3px;    border:1px solid #beceeb;    background-color:white;    -moz-box-shadow: 0 0 8px rgba(72, 106, 170, 0.5);    -webkit-box-shadow: 0 0 8px rgba(72, 106, 170, 0.5);    box-shadow: 0 0 8px rgba(72, 106, 170, 0.5);}.anim_image:hover {    background-color:#f0f3f9;    -webkit-animation-name: glow;    -webkit-animation-duration: 1s;    -webkit-animation-iteration-count: infinite;    -webkit-animation-direction: alternate;    -webkit-animation-timing-function: ease-in-out;    }

animation展示結束,的說~~

五、更實際綜合的效果展示

首先,滑鼠移至上方的淡入淡出效果。

您可以狠狠地點擊這裡:滑鼠移至上方的淡入淡出demo

目前,非webkit核心瀏覽器下面,滑鼠移至上方僅僅是透明與不透明,只有在webkit核心瀏覽器下面才有平滑的動畫效果,如:

相關主要CSS代碼如下:

.anim_fade_image {    position:absolute;    -webkit-transition: opacity 1s ease-in-out;    -moz-transition: opacity 1s ease-in-out;    -o-transition: opacity 1s ease-in-out;    transition: opacity 1s ease-in-out;}.anim_fade_image:hover, .anim_fade_image_hover {    opacity:0;    filter: alpha(opacity=0);}

當然,我們也可以輔助JavaScript,添加點擊圖片淡出淡出。JavaScript負責的只是終了的透明度值,中間的動畫直接交給CSS就可以了。

您可以狠狠地點擊這裡:點擊下的淡入淡出demo

效果類似,就不展示了,代碼類似,就不展示代碼了。

當然,我們還可以做些小動畫,讓圖片自動淡入淡出的播放,不停地播放。要不停播放只要將animation-iteration-count設為infinite(無限)就ok的啦。於是,我們修改下CSS代碼,如下:

@-webkit-keyframes fadeInOut {    0% {        opacity:1;     }    25% {        opacity:0;    }    50% {        opacity: 0;        }    75% {        opacity:1;    }}.anim_fade_image {    position:absolute;        -webkit-animation-name: fadeInOut;    -webkit-animation-timing-function: ease-in-out;    -webkit-animation-iteration-count: infinite;    -webkit-animation-duration: 12s;    -webkit-animation-direction: alternate;}

於是乎,圖片就稀裡糊塗的不停地淡入淡出了。您有興趣可以狠狠地點擊這裡:圖片無限自動fade效果demo

以上些效果都是與透明度打交道的。下面這個執行個體是與圖片位置,比例尺寸掛鈎的,聰明的你是不是想到了transform屬性呢。對的,transform+tranisition,雙劍合璧,天下無敵。下面這個效果是很酷很酷的,以前基本上只能在Flash中可以看到。噹噹噹噹,您可以狠狠地點擊這裡:圖片輪轉縮放顯示動畫demo(滑鼠經過圖片有驚喜的說,非webkit繞道,搜狗等瀏覽器可切換到高速模式亦可)。

效果如下,為動畫過程中:

相關的核心的CSS代碼如下:

.anim_image {    -webkit-transition: all 1s ease-in-out;    -moz-transition: all 1s ease-in-out;    -o-transition: all 1s ease-in-out;    transition: all 1s ease-in-out;    cursor:pointer;}.anim_image_top {    position: absolute;    -webkit-transform: scale(0, 0);    opacity: 0;    filter: Alpha(opacity=0);}.anim_box:hover .anim_image_top , .anim_box_hover .anim_image_top {    opacity: 1;    filter: Alpha(opacity=100);    -webkit-transform: scale(1, 1);    -webkit-transform-origin: top right;        }.anim_box:hover .anim_image_bottom, .anim_box_hover .anim_image_bottom {    -webkit-transform: scale(0, 0);    -webkit-transform-origin: bottom left;}

HTML代碼如下:

<div id="testBox" class="anim_box">    <img class="anim_image anim_image_top" src="http://image.zhangxinxu.com/image/study/p/s200/ps6.jpg" />    <img class="anim_image anim_image_bottom" src="http://image.zhangxinxu.com/image/study/p/s200/ps4.jpg" /></div>

當然,這裡應用transform的旋轉,水平垂直縮放效果也是很贊的,如所示:

您可以狠狠地點擊這裡:圖片旋轉切換動畫demo

CSS代碼與上面的例子大同小異,這裡就不展示了,您可以去demo頁面查看。

下面,展示的是更加實際更加靠譜的例子,選項卡切換
我們平時的選項卡切換基本上都是很生硬的,直接啪啪啪,切換過來了,沒有點過渡啊什麼的(畢竟寫JavaScript動畫成本較高),現在,有了transitions,實現過渡效果就是幾行CSS代碼的事情,不多說了,直接上執行個體。

您可以狠狠地點擊這裡:平滑選項卡切換demo

在demo中,點擊下面的幾個圖片文字按鈕狀的東西,就可以看到圖片水平滑過來,再滑過去,再滑過來,讓人愛不釋手啊。為:

CSS其作用的就是那個值以all開頭的transition屬性,如下:

.trans_image_box {    width: 2000px;    height: 300px;    -webkit-transition: all 1s ease-in-out;    -moz-transition: all 1s ease-in-out;    -o-transition: all 1s ease-in-out;    transition: all 1s ease-in-out;}

transitionCSS程式碼群組很吃得開的。

只要是CSS值變換的,只要是額外有transition屬性設定的,都是凹凸貼圖,都是動畫。所以,我們看看如何以動畫形式實現經典的手風琴轉場效果。

您可以狠狠地點擊這裡:手風琴效果demo(點擊水平標題有驚喜)

下為:

其中JavaScript扮演的角色只是變變高度值而已,動畫,都是CSS一人挑大樑完成的,很贊吧。下面的代碼就是動畫效果那段div上的CSS代碼:

.acco_content {    height:0;    padding:0 10px;    -webkit-transition: all 1s ease-in-out;    -moz-transition: all 1s ease-in-out;    -o-transition: all 1s ease-in-out;    transition: all 1s ease-in-out;    overflow:hidden;}

JavaScript的作用不過是變變高度而已:

$$(".acco_title").click(function() {    var rel = this.lang, cl = this.className, oOn = $$(".acco_title_on")[0], rel_on = oOn.lang;    if (!/on/.test(cl) && rel && rel_on) {        $$("#" + rel)[0].style.height = "140px";        $$("#" + rel_on)[0].style.height = "0";        this.className = "acco_title acco_title_on";        oOn.className = "acco_title";    }});
六、瀏覽器支援情況CSS Transitions

首次引入

  • Safari 3.2: 13/11/2008
  • Firefox 4.0: Late 2010
  • Chrome 1.0: 02/09/2008
  • Opera 10.5: 02/03/2010
CSS 2D Transformations

首次引入

  • Safari 3.2: 13/11/2008
  • Firefox 3.5: 30/06/2009
  • Chrome 1.0: 02/09/2008
  • Opera 10.5: 02/03/2010
  • Internet Explore 9: 09/2010
CSS Animations

首次引入

  • Safari 4.0: 11/06/2008
  • Chrome 1.0: 02/09/2008
CSS 3D Transformations

首次引入

  • Safari 4.0: 11/06/2008
  • Chrome: 28/08/2010
七、參考文章以及延伸閱讀
  • Understanding CSS3 Transitions
  • Using CSS3 Transitions, Transforms and Animation Intro
  • W3C: CSS Transitions Module Level 3
  • W3C: CSS 2D Transforms Module Level 3
  • W3C: CSS 3D Transforms Module Level 3
  • W3C: CSS Animations Module Level 3
  • Surfin’ Safari (check the archives)
  • CSS3 Transitions support in Opera Presto 2.3

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.