CSS3動畫之transition與animation詳解

因爲在項目中經常使用到transition,而且在學習vue過程也有transition過渡,因此在這裏着重瞭解一下:

W3C的官方文檔中是這樣闡述transition的:CSS的transition允許css的屬性值在一定的時間區間內平滑地過渡。這種效果可以在鼠標單擊、獲得焦點、被點擊或對元素任何改變中觸發,並圓滑地以動畫效果改變CSS的屬性值。

transition主要包含四個屬性值:執行變換的屬性:transition-property,變換延續的時間:transition-duration,在延續時間段,變換的速率變化transition-timing-function,變換延遲時間transition-delay。下面分別來看這四個屬性值

一、語法

transition: property duration timing-function delay 

transition屬性是個複合屬性,它包括以下幾個子屬性:

  • transition-property :規定設置過渡效果的css屬性名稱
  • transition-duration :規定完成過渡效果需要多少秒或毫秒
  • transition-timing-function :指定過渡函數,規定速度效果的速度曲線
  • transition-delay :指定開始出現的延遲時間

默認值分別爲:all 0 ease 0 

注:transition-duration 時長爲0,不會產生過渡效果

一、transition-property:

    transition-property: none |all |property;

    值爲none時,沒有屬性會獲得過渡效果,值爲all時,所有屬性都將獲得過渡效果,值爲指定的css屬性應用過渡效果,多個屬性      用逗號隔開。

二,transition-duration

transition-duration:time;

該屬性主要用來設置一個屬性過渡到另一個屬性所需的時間,也就是從舊屬性過渡到新屬性花費的時間長度,俗稱持續時間

三,transition-timing-function

transition-timing-function:linear| ease| ease-in| ease-out| ease-in-out| cubic-bezier(n,n,n,n)

取值:

transition-timing-function的值允許你根據時間的推進去改變屬性值的變換速率,transition-timing-function有6個可能值:

1、ease:(逐漸變慢)默認值,ease函數等同於貝塞爾曲線(0.25, 0.1, 0.25, 1.0).

2、linear:(勻速),linear 函數等同於貝塞爾曲線(0.0, 0.0, 1.0, 1.0).

3、ease-in:(加速),ease-in 函數等同於貝塞爾曲線(0.42, 0, 1.0, 1.0).

4、ease-out:(減速),ease-out 函數等同於貝塞爾曲線(0, 0, 0.58, 1.0).

5、ease-in-out:(加速然後減速),ease-in-out 函數等同於貝塞爾曲線(0.42, 0, 0.58, 1.0)

6、cubic-bezier:(該值允許你去自定義一個時間曲線), 特定的cubic-bezier曲線。 (x1, y1, x2, y2)四個值特定於曲線                    上點P1和點P2。所有值需在[0, 1]區域內,否則無效。

其是cubic-bezier爲通過貝賽爾曲線來計算“轉換”過程中的屬性值,如下曲線所示,通過改變P1(x1, y1)和P2(x2, y2)的坐                  標可以改變整個過程的Output Percentage。初始默認值爲default.

注意:值cubic-bezier(n,n,n,n)可以中定義自己的值,如 cubic-bezier(0.42,0,0.58,1)

四,transition-delay

        這個屬性沒什麼說的了,就是過渡效果開始前的延遲時間,單位秒或者毫秒

下面展示一個利用transition和transform結合實現一個3d導航欄的例子

<body>
    <ul class = "nav">
        <li>
            <span>電子工程學院</span>
            <span>西安電子科技大學</span>
        </li>
        <li>
            <span>通信工程學院</span>
            <span>西安電子科技大學</span>
        </li>
        <li>
            <span>微電子學院</span>
            <span>西安電子科技大學</span>
        </li>
        <li>
            <span>人文學院</span>
            <span>西安電子科技大學</span>
        </li>
        <li>
            <span>經濟管理學院</span>
            <span>西安電子科技大學</span> 
        </li>
        <li>
            <span>計算機學院</span>
            <span>西安電子科技大學</span>
        </li>
    </ul>
</body>
body{
    margin:0;
    padding:0;
    font-family:'微軟雅黑';
    background:#F7F7F7;
}
.nav{
    height:40px;
    margin-top:50px;
    text-align:center;
    list-style:none;
}
li{
    width:140px;
    height:40px;
    float:left;
    text-align:center;
    line-height:40px;
    position:relative;
    margin-right:10px;
    transition:all 1s;
    transform-style:preserve-3d /*只有子盒子全部使用了transform是纔能有用 */
}
li span{
    position:absolute;
    top:0;
    left:0;
    display:block;
    width:100%;
    height:100%;
}
li span:last-child{
    background:yellow;
    transform:translateZ(20px)
}
li span:first-child{
    background:blueviolet;
    transform:rotateX(90deg) translateZ(20px)
}

li:hover{
    transform:rotateX(-90deg)
}

效果如圖:

 

 

語法:

animation: name duration timing-function delay iteration-count direction fill-mode play-state;
例:animation: myanimation 2s linear 1s infinite forwards;

animation 屬性是一個簡寫屬性,用於設置動畫屬性:

  • animation-name
  • animation-duration
  • animation-timing-function
  • animation-delay
  • animation-iteration-count
  • animation-direction
  • animation-fill-mode
  • animation-play-state

 

  • animation-name    動畫名稱
  • animation-duration   動畫指定需要多少秒或毫秒完成
    值:time      默認值爲 0,意味着沒有動畫效果
  • animation-timing-function   設置動畫如何完成一個週期
    值:linear  勻速
           ease   先慢後快,結束前變慢     默認
           ease-in    低速開始
           ease-out  低速結束
           ease-in-out   低速開始和結束
           cubic-bezier(n,n,n,n)    在 cubic-bezier 函數中自己的值。可能的值是從 0 到 1 的數值
  • animation-delay   動畫在啓動前的延遲間隔
    值:time   默認值爲 0
  • animation-iteration-count    動畫的播放次數
    值:n   一個數字,定義播放多少次動畫     默認值1
           infinite    動畫無限次播放
  • animation-direction    是否輪流反向播放動畫
    值:normal         正常
           reverse        反向播放
           alternate      在奇數次(1、3、5...)正向播放,在偶數次(2、4、6...)反向播放
           alternate-reverse   在奇數次(1、3、5...)反向播放,在偶數次(2、4、6...)正向播放
  • animation-fill-mode    當動畫不播放時(當動畫完成時,或當動畫有一個延遲未開始播放時),要處於什麼狀態
    值:none   默認,播放完動畫後,畫面停在起始位置
          forwards     播放完動畫,停在animation定義的最後一幀(保持最後一個屬性值)
           backwards   如果設置了animation-delay,在開始到delay這段時間,畫面停在第一幀。如果沒有設置delay,畫面是元素設置的初始值
           both   設置動畫狀態爲動畫結束或開始的狀態(例如設置奇數播放爲forwards狀態,偶數播放爲backwards狀態)
  • animation-play-state    動畫是否正在運行或已暫停
    值:paused   指定暫停動畫
           running   指定正在運行的動畫,默認
  • initial    設置屬性爲其默認值
  • inherit   從父元素繼承屬性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章