常常逛掘金的朋友都能看到左側的圖標分享連接,當咱們把鼠標移上去,除了圖標有了正常的顏色,就沒有其餘的效果了,那麼,加上一點動畫是否是更有趣呢?html
很顯然,咱們能夠利用@keyframes
這一屬性,爲裏面的圖標(或是圖片)添加一個路徑動畫,同時設置外層的div屬性爲overflow: hidden;
。爲了用戶感知的方便,應該在外層div設置hover效果,如下爲代碼瀏覽器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo1</title>
<style>
aside{
margin: 120px auto 0 auto;
width: 78px;
}
.icon-area{
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
margin: 15px;
width: 48px;
height: 48px;
border-radius: 50%;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .5);
cursor: pointer;
}
.icon-img{
width: 30px;
height: 30px;
object-fit: cover;
filter: grayscale(100%);
}
.icon-area:hover .icon-img{
animation: change .8s forwards;
}
@keyframes change {
0%{
transform: translate(0,0);
}
40%{
transform: translate(-60px,0);
}
45%{
transform: translate(-60px,60px);
}
50%{
transform: translate(0,60px);
}
55%{
transform: translate(60px,60px);
}
60%{
filter: none;
transform: translate(60px,0);
}
100%{
filter: none;
transform: translate(0,0);
}
}
</style>
</head>
<body>
<aside>
<div class="icon-area">
<img src="img/weibo.png" alt="weibo" class="icon-img">
</div>
<div class="icon-area">
<img src="img/qq.png" alt="qq" class="icon-img">
</div>
<div class="icon-area">
<img src="img/wechat.png" alt="wechat" class="icon-img">
</div>
</aside>
</body>
</html>
複製代碼
這裏使用translate,而不是傳統的position,是爲了使得瀏覽器能開啓GPU加速,同時可以避免頁面的重繪,可以有效提升性能,如下爲具體效果bash
如今,讓咱們來實現另一個效果,當咱們把鼠標移到分享連接時,灰色的圖標往左移動並消失,同時右側進來一個正常的圖標,當咱們移開鼠標時,如下動畫反向。咱們能夠用兩張圖片來實現,第一張居中,第二張隱藏,鼠標移上去均左移,離開均歸位。如下爲代碼網絡
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo2</title>
<style>
aside{
margin: 120px auto 0 auto;
width: 78px;
}
.icon-area{
overflow: hidden;
display: flex;
align-items: center;
margin: 15px;
width: 48px;
height: 48px;
border-radius: 50%;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .5);
cursor: pointer;
}
.common-icon{
width: 30px;
height: 30px;
object-fit: cover;
}
.first-icon{
filter: grayscale(100%);
transform: translate(9px,0);
transition: all .4s;
}
.second-icon{
transform: translate(28px,0);
transition: all .4s;
}
.icon-area:hover .first-icon{
transform: translate(-40px,0);
}
.icon-area:hover .second-icon{
transform: translate(-21px,0);
}
</style>
</head>
<body>
<aside>
<div class="icon-area">
<img src="img/weibo.png" alt="weibo" class="common-icon first-icon">
<img src="img/weibo.png" alt="weibo" class="common-icon second-icon">
</div>
<div class="icon-area">
<img src="img/qq.png" alt="qq" class="common-icon first-icon">
<img src="img/qq.png" alt="qq" class="common-icon second-icon">
</div>
<div class="icon-area">
<img src="img/wechat.png" alt="wechat" class="common-icon first-icon">
<img src="img/wechat.png" alt="wechat" class="common-icon second-icon">
</div>
</aside>
</body>
</html>
複製代碼
在上面的代碼中,我設置了圖標區域爲flex佈局,但僅設置了上下居中,兩張圖片的定位和移動距離須要本身計算。如第一張圖片距離左邊9px,就是圖標區域的寬度減去圖片的寬度再除以2,即(48px-30px)/2,並且你應該發現,兩種圖片移動的距離是同樣的,即40+9=21+28,如下爲效果ide
事實上,如今的實際軟件開發中,爲了減小網絡請求,優化性能等因素,都是直接使用圖標CSS文件,咱們能夠在其外部使用一個div一樣可達到上面的效果。若是這篇文章對你有幫助,請給我點個贊吧!!!佈局