轉場特效 CSS3 Transition
以往 HTML 元素外觀的轉換只能從一種外觀直接跳到另一種外觀,使用者無法感受到中間平滑的轉換。
而 Transition 屬性幫我們補足中間的過場動畫。
屬性 | 說明 |
---|---|
transition | 縮寫可分別放入 transition 的四個屬性,預設是 all |
transition-property | 指定 transition 效果要控制的屬性 - CSS animated properties |
transition-duration | 指定多少時間完成 transition 效果 |
transition-timing-function | 制定 transition 的速度效果 |
transition-delay | 指定 transition 延遲多久開始 |
若針對不同屬性同時做 transition 可使用,將屬性分隔開來。
.test {
transition: height 1s, width 2s;
}
Transition 限制
開始和結束都必須是具體數值,以下就是無法被計算
- height: auto 至 height: 100px;
- display: none 至 display: block;
- background: url(xxx.png) 至 background: url(yyy.png)
.test {
height: auto;
}
.test:hover {
height: 200px;
transition: height 1s;
}
最後 transition 需要事情來觸發動作,所以沒辦法一進頁面自動產生效果。以不透過 JavaScript 事情為前提下,只能配合與事件有關的 Pseudo Classe (偽類別,:hover、:focus 等) 來呈現。
實務練習 - 價錢下方的醒目提示
image source: IBUYPOWER
Animation
transition 簡單易用,但也是有諸多限制,所以才有了這個 animation 屬性來彌補不足。
屬性 | 說明 |
---|---|
animation | 跟 transition 屬性一樣都是簡寫。以下屬性代表總和 |
animation-name | 動畫名稱 |
animation-duration | 播放一次動畫需要的時間 |
animation-timing-function | 動畫的加速度曲線 |
animation-delay | 延遲多久開始動畫 |
animation-iteration-count | 播放次數 |
animation-direction | 動畫播放方向 |
animation-fill-mode | 指定動畫撥放前後的狀態 |
animation-play-state | 指定動畫播放或暫停 |
div:hover {
animation: 1s resize;
}
p: hover {
animation: 2s small;
}
@keyframes resize {
0% { width: 100px; }
50% { width: 200px; }
100% { width: 300px; }
}
@keyframes small {
from { width: 300px; }
to { width: 50px; }
}
animation-iteration-count 指定撥放次數或是使用 infinite
關鍵字無限次播放
animation-direction 播放方向
- normal: 0% 至 100%
- reverse: 100% 至 0%
- alternate: 播放兩次以上,會從 0% 至 100% 再從 100% 至 0% 以此類推
- alternate-reverse: 與 alternate 相反
animation-fill-mode 動畫播放前後的狀態
- none: 回到未撥放動畫效果前的狀態
- forwards: 停在動畫的最後一個狀態上
- backwards: 停在動畫的第一個狀態 (實測無法)
- both: 根據 animation-direction 決定停在哪個狀態
animation-play-state 指定動畫播放或暫停 (此屬性必續獨立定義,無法在 animation 中被設定。)
- running: 執行 (預設)
- paused: 暫停
實務練習 - 循環跳動的購物車數字
image source: IBUYPOWER
Animate.css
此 CSS framework 提供了許多定義動畫效果的 css class,可以直接套在 HTML 元素上或是使用 JQuery 來操作 class 產生動畫效果。