先來看看靜態效果圖:css
要作的效果是鼠標移到圖片上時,圖片旋轉360度並放大1.2倍html
鼠標移動到下方框時,四周有四條線分別沿着四條框進入,同時箭頭向左移動動畫
主要使用的CSS3屬性是transition,transformurl
transition用於定義過渡動畫,好比:transition:all 1s; transition:width 1s;意思是全部css屬性改變的過渡時間爲1s。這個屬性定義在須要進行動畫發生的那個元素的選擇器上面spa
transform用於變換,包括縮放scale(倍數,好比1.0、1.2),平移translate(x座標,y座標),旋轉rotate(XXdeg),語法:transform:ratate() translate() scale();code
參考代碼以下:orm
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>幽靈按鈕</title> <style type="text/css"> /*清除默認邊距和內填充*/ *{ margin:0; padding:0; } body{ background: black; } #wrap{ width: 900px; height: 300px; margin: 100px auto;/*元素居中*/ } .box{ height: 300px; width: 30%; float: left; } .box span{ display: block; width: 100%; height: 200px; text-align: center;/*圖片元素會被視爲文本內容,水平居中能夠使用text-align,可是畢竟不是文本,因此垂直不能夠使用line-height*/ padding-top: 50px; transition: all 1s; } .box span:hover{ transform: rotate(360deg) scale(1.2);/*不能夠在第二行另寫transform:scale(1.2)這樣只會覆蓋上一句,因此兩個效果必須一塊兒寫,用空格隔開*/ } .box a{ border-radius: 5px; margin: auto; width: 80%; height: 50px; line-height: 55px;/*這裏須要算上border的寬度*/ padding: 5px; position: relative;/*用於四條動畫邊的定位*/ color: white; text-decoration: none; display: block; border: 2px green solid; background: url(img/allow.png) no-repeat 90%; transition: all 0.5s; } p{ background: green; position: absolute; transition: all 0.5s; } .top{ width: 0%; height: 2px; top: -2px; left: -50%; } .right{ width: 2px; height: 0%; top: -100%; right: -2px; } .bottom{ width: 0%; height: 2px; top: calc(100%+2px); left: 150%; } .left{ width: 2px; height: 0%; top: 200%; left: -2px; } .box a:hover{ background: url(img/allow.png) no-repeat 95%; } .box a:hover .top{ width: 100%; left: -2px; } .box a:hover .right{ height: 100%; top: -2px; } .box a:hover .bottom{ width: 100%; left:-2px; } .box a:hover .left{ height: 100%; top: -2px; } </style> </head> <body> <div id="wrap"> <div class="box"> <span> <img src="img/mission.png" alt="mission" /> </span> <a href="#"> mission <p class="top"></p> <p class="right"></p> <p class="bottom"></p> <p class="left"></p> </a> </div> <div class="box"> <span> <img src="img/mission.png" alt="mission" /> </span> <a href="#"> mission <p class="top"></p> <p class="right"></p> <p class="bottom"></p> <p class="left"></p> </a> </div> <div class="box"> <span> <img src="img/mission.png" alt="mission" /> </span> <a href="#"> mission <p class="top"></p> <p class="right"></p> <p class="bottom"></p> <p class="left"></p> </a> </div> </div> </body> </html>
這裏說一下四條邊製做的思路,拿左邊第一條爲例。父元素設置爲relative,所以,子元素會相對於父元素定位,假如第一條邊爲top:0,left:0.則只會在父元素的邊框下面,而不會與邊框重疊,所以top須要設置爲負的父元素的邊框長度,這樣就會使得兩邊重合。而後經過定義left:-100%,將邊設置到左邊寬度爲父元素寬度的地方,而後把width設置會0%,height爲邊框高度,而後設置僞類選擇器,當鼠標移動到邊框範圍,就觸發動畫,在0.5s內將邊的width變爲100%,而且改變left爲:-2px;就能夠作到同時邊大小改變且向父元素邊框靠近重合的效果htm
素材以下:blog
箭頭:圖片
三張圖片(由於白色因此看不見):、
、