1. 程式人生 > 其它 >CSS(18)CSS3 過渡與動畫

CSS(18)CSS3 過渡與動畫

一、CSS3 過渡:transition

CSS3中,我們為了新增某種效果可以從一種樣式轉變到另一個的時候,無需使用Flash動畫或JavaScript。

IE10及以上瀏覽器支援。

1、它是如何工作?

CSS3 過渡是元素從一種樣式逐漸改變為另一種的效果。

要實現這一點,必須規定兩項內容:

  • 指定要新增效果的CSS屬性
  • 指定效果的持續時間。

應用於寬度屬性的過渡效果,時長為 2 秒:

    div
    {
        transition: width 2s;
        -webkit-transition: width 2s; /* Safari */
    }

注意: 如果未指定的期限,transition將沒有任何效果,因為預設值是0。

指定的CSS屬性的值更改時效果會發生變化。一個典型CSS屬性的變化是使用者滑鼠放在一個元素上時:

規定當滑鼠指標懸浮(:hover)於

元素上時:

    div:hover
    {
        width:300px;
    }

嘗試一下 »

注意: 當滑鼠游標移動到該元素時,它逐漸改變它原有樣式

2、多項改變

要新增多個樣式的變換效果,新增的屬性由逗號分隔:

添加了寬度,高度和轉換效果:

    div
    {
        transition: width 2s, height 2s, transform 2s;
        -webkit-transition: width 2s, height 2s, -webkit-transform 2s;
    }

嘗試一下 »

3、過渡屬性

下表列出了所有的過渡屬性:

下面的兩個例子設定所有過渡屬性:

在一個例子中使用所有過渡屬性:

    div
    {
        transition-property: width;
        transition-duration: 1s;
        transition-timing-function: linear;
        transition-delay: 2s;
        /* Safari */
        -webkit-transition-property:width;
        -webkit-transition-duration:1s;
        -webkit-transition-timing-function:linear;
        -webkit-transition-delay:2s;
    }

嘗試一下 »

與上面的例子相同的過渡效果,但是使用了簡寫的 transition 屬性:

    div
    {
        transition: width 1s linear 2s;
        /* Safari */
        -webkit-transition:width 1s linear 2s;
    }

嘗試一下 »

二、CSS3 動畫:animation

CSS3 可以建立動畫,它可以取代許多網頁動畫影象、Flash 動畫和 JavaScript 實現的效果。

1、CSS3 @keyframes 建立動畫

要建立 CSS3 動畫,你需要了解 @keyframes 規則。

@keyframes 規則是建立動畫。

@keyframes 規則內指定一個 CSS 樣式和動畫將逐步從目前的樣式更改為新的樣式。

IE10及以上瀏覽器支援。

    @keyframes myfirst
    {
        from {background: red;}
        to {background: yellow;}
    }
     
    @-webkit-keyframes myfirst /* Safari 與 Chrome */
    {
        from {background: red;}
        to {background: yellow;}
    }

2、CSS3 動畫繫結到選擇器

當在 @keyframes 建立動畫,把它繫結到一個選擇器,否則動畫不會有任何效果。

指定至少這兩個CSS3的動畫屬性綁定向一個選擇器:

  • 規定動畫的名稱
  • 規定動畫的時長

把 "myfirst" 動畫捆綁到 div 元素,時長:5 秒:

    div
    {
        animation: myfirst 5s;
        -webkit-animation: myfirst 5s; /* Safari 與 Chrome */
    }

嘗試一下 »

注意: 您必須定義動畫的名稱和動畫的持續時間。如果省略的持續時間,動畫將無法執行,因為預設值是0。

3、CSS3動畫是什麼?

動畫是使元素從一種樣式逐漸變化為另一種樣式的效果。

您可以改變任意多的樣式任意多的次數。

請用百分比來規定變化發生的時間,或用關鍵詞 "from" 和 "to",等同於 0% 和 100%。

0% 是動畫的開始,100% 是動畫的完成。

為了得到最佳的瀏覽器支援,您應該始終定義 0% 和 100% 選擇器。

當動畫為 25% 及 50% 時改變背景色,然後當動畫 100% 完成時再次改變:

    @keyframes myfirst
    {
        0%   {background: red;}
        25%  {background: yellow;}
        50%  {background: blue;}
        100% {background: green;}
    }
     
    @-webkit-keyframes myfirst /* Safari 與 Chrome */
    {
        0%   {background: red;}
        25%  {background: yellow;}
        50%  {background: blue;}
        100% {background: green;}
    }

嘗試一下 »

改變背景色和位置:

    @keyframes myfirst
    {
        0%   {background: red; left:0px; top:0px;}
        25%  {background: yellow; left:200px; top:0px;}
        50%  {background: blue; left:200px; top:200px;}
        75%  {background: green; left:0px; top:200px;}
        100% {background: red; left:0px; top:0px;}
    }
     
    @-webkit-keyframes myfirst /* Safari 與 Chrome */
    {
        0%   {background: red; left:0px; top:0px;}
        25%  {background: yellow; left:200px; top:0px;}
        50%  {background: blue; left:200px; top:200px;}
        75%  {background: green; left:0px; top:200px;}
        100% {background: red; left:0px; top:0px;}
    }

嘗試一下 »

4、CSS3的動畫屬性

下面的表格列出了 @keyframes 規則和所有動畫屬性:

下面兩個例子設定所有動畫屬性:

執行myfirst動畫,設定所有的屬性:

    div
    {
        animation-name: myfirst;
        animation-duration: 5s;
        animation-timing-function: linear;
        animation-delay: 2s;
        animation-iteration-count: infinite;
        animation-direction: alternate;
        animation-play-state: running;
        /* Safari 與 Chrome: */
        -webkit-animation-name: myfirst;
        -webkit-animation-duration: 5s;
        -webkit-animation-timing-function: linear;
        -webkit-animation-delay: 2s;
        -webkit-animation-iteration-count: infinite;
        -webkit-animation-direction: alternate;
        -webkit-animation-play-state: running;
    }

嘗試一下 »

與上面的動畫相同,但是使用了簡寫的動畫 animation 屬性:

    div
    {
        animation: myfirst 5s linear 2s infinite alternate;
        /* Safari 與 Chrome: */
        -webkit-animation: myfirst 5s linear 2s infinite alternate;
    }

嘗試一下 »