因爲hover僞類添加的動畫效果,僅當鼠標放在元素上時會被觸發,而當鼠標離開時,效果會中斷,會顯得很生硬。
大多數人的想法都是使用js的onmouseover和onmouseleave事件來實現動畫效果。其實沒必要這麼麻煩,CSS3即可以幫你解決這些問題。css
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>離開時效果生硬</title> <style type="text/css"> div{ width: 100px; height: 100px; border:1px solid; margin:0px auto; margin-top: 200px; } div:hover{ transform: scale(2); transition: all 1s linear; } </style> </head> <body> <div></div> </body> </html>
因爲div元素只有在:hover僞類觸發的時候,效果才能加到div元素上。html
當鼠標離開div元素的時候,:hover僞類將再也不生效,瞬間丟掉hover裏寫的動畫效果。動畫
此時,咱們應當在本來元素上再寫一個如出一轍的transition效果,將離開斷掉的動畫效果續接上。ui
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>簡單解決</title> <style type="text/css"> div{ width: 100px; height: 100px; border:1px solid; margin:0px auto; margin-top: 200px; /* 在本來元素上再加一個transition */ transition: all 1s linear; } div:hover{ transform: scale(2); transition: all 1s linear; } </style> </head> <body> <div></div> </body> </html>
此時,無論鼠標在何時離開元素,都會原樣返回。code
但此時會有一個問題,鼠標放上去,立馬離開,或者鼠標從上邊勻速劃過,div回到原樣的時間,依舊是1s。orm
其實,咱們在hover裏寫的transition:all 1s linear徹底是多餘的。htm
transition有一個特性,只要是帶有數值類型的屬性(例如:% , rgba() , rgb() , hsla() , 數字等),在其發生變化的時候,均會被觸發動畫效果。seo
所以,無論:hover僞類何時丟掉個人動畫,也無論我:hover時,元素動畫走到了什麼地步。只要元素自己帶有transitioin,該動畫便會從當前動畫執行到的地方,以相同的時間返回原樣。事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>簡單解決</title> <style type="text/css"> div{ width: 100px; height: 100px; border:1px solid; margin:0px auto; margin-top: 200px; /* 在此處留一個transition就夠了 */ transition: all 1s linear; } div:hover{ transform: scale(2); /* 去掉這個tansition */ /* transition: all 1s linear; */ } </style> </head> <body> <div></div> </body> </html>
這只是最簡單的動畫實現,但對於目前大部分需求來講,配合配合貝塞爾曲線,已經足夠用了。get
你僅僅須要作到,hover中的最終樣式,保證爲數值樣式變OK了。
像display:block變爲display:none就很差使了,此時咱們能夠用visibilty:1變爲visibilty:0,一樣也能夠簡單實現顯示到隱藏的效果。
另外加一句,不太清楚transition屬性的能夠自行去百度去,transition-timing-function屬性定義的速度曲線,使用cubic-bezier貝塞爾曲線,能夠作到不少效果,你們能夠上這個網址去試一試貝塞爾曲線實現的動畫。