CSS3幽灵

先来看看静态效果图:

要做的效果是鼠标移到图片上时,图片旋转360度并放大1.2倍

鼠标移动到下方框时,四周有四条线分别沿着四条框进入,同时箭头向左移动

主要使用的CSS3属性是transition,transform

transition用于定义过渡动画,比如:transition:all 1s; transition:width 1s;意思是所有css属性改变的过渡时间为1s。这个属性定义在需要进行动画发生的那个元素的选择器上面

transform用于变换,包括缩放scale(倍数,比如1.0、1.2),平移translate(x坐标,y坐标),旋转rotate(XXdeg),语法:transform:ratate() translate() scale();

参考代码如下:

<!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;就可以做到同时边大小改变且向父元素边框靠近重合的效果

素材如下:

箭头:

三张图片(因为白色所以看不见):

posted @ 2018-09-10 19:39  某个润滑君  阅读(198)  评论(0编辑  收藏  举报