CSS3實現僞類hover離開時平滑過渡效果

因爲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貝塞爾曲線,能夠作到不少效果,你們能夠上這個網址去試一試貝塞爾曲線實現的動畫

相關文章
相關標籤/搜索