# 認識CSS#11 Transition ###### tags: `CSS` ## transition 為了改變兩個外觀間轉換的屬性,轉換過程看起來會很生硬,只要加上 transition 就可以讓轉換的過程中補上動畫,像是寫 hover 時會需要外觀上的轉換給予回饋,不管是顏色、形狀、大小等等,加上了 transition 形成補間動畫,看起來會更生動。 ### transition 屬性 | 屬性名稱 | 效果 | | -------- | -------- | | transition-property | 指定要轉換的CSS屬性 ex: background 等等 | | transition-duration | 轉換需要的時間,預設0,單位為 s 或 ms | | transition-delay | 延遲多久轉換,預設0,單位為 s 或 ms | | transition-timing-function | 轉換時的速度曲線,預設ease | #### transition-timing-function 屬性 | 屬性名稱 | 效果 | | -------- | -------- | | ease | 緩入中間快緩出,預設值 | | linear | 均速 | | ease-in | 緩入 | | ease-out | 緩出 | | ease-in-out | 緩入緩出 | ### 我們可以將這些 transition 屬性寫在同一行 ```=css transition: transition-property | transition-duration | transition-timing-function | transition-delay; ``` ### [hover 顏色轉換 + transition](https://codepen.io/binlandz123/pen/bGLydLY?editors=1100) ### 單一屬性,多個屬性做 transition 我們可以在 transition 一次為單個或多個屬性新增動畫 #### 單個屬性寫法 ( 改變背景顏色動畫 ) ```=css background-color: yellow; transition: background-color 0.3s ease-in; ``` #### 多個屬性寫法( 改變寬度及背景顏色動畫 ) ```=css width:400px; background-color:blue; transition: background-color 0.3s ease-in , width 2s ease ; ``` ### 雙向動畫 如果我們在 hover 來觸發 transition ,在滑鼠移開該元素,會出現很生硬的切換回原本屬性,如果我們想要在滑鼠移開的時候切回原本屬性也有動畫的話,那我們也在原本屬性上加上 transition 並把想要變回去的屬性值寫進去就好了 #### [雙向連結](https://codepen.io/binlandz123/pen/gOvJarv?editors=1100) ### [transition 支援屬性](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties) ## transition 沒有效果的情況 ### 1. transition 必須要是確切數值來做轉換 transition轉換的開始和結束屬性值都必須是確切數值,否則將無法進行計算 1. width:auto(不確定的值)轉換成 width:100px(確切值) 2. display:none 轉換成 display:block,none 和 block 都不是數值 ### 2. transition 需要事件觸發 transition 沒辦法一進頁面自動產生效果,需要透過 JS 或是 hover 、 focus 等偽元素來呈現效果 ## 參考 [CSS動畫-Transition](https://ithelp.ithome.com.tw/articles/10200365) [CSS3 動畫 Transition, Animation, Transform 基礎](https://hoohoo.top/blog/css3-animation-notes/) [Animatable CSS properties](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up