纯css写的鼠标悬停效果

先看一下效果
在这里插入图片描述
废话不多说,直接上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>鼠标悬停</title>
    <style>
        :root{
            --primary: #25abd9;
        }
        *{
            box-sizing: border-box;
            margin: 0;
            padding: 0;
            background-color: #dcf5ff;
        }
        .container{
            display: flex;
            align-items: center;
            height: 100vh;
            justify-content: center;
        }
        /* 卡片样式 */
        .card{
            display: flex;
            align-items: center;
            justify-content: space-between;
            border-radius: 20px;
            background-color: white;
            box-shadow: 3px 3px 2px 2px #efefef;
            flex-wrap: wrap;
            height: 350px;
            width: 500px;
            padding: 40px;

        }
        /* 给所有按钮设置统一样式 */
        .button{
            background-color: none;
            border: solid 2px var(--primary);
            box-shadow: 0 5px 15px -5px #bbb;
            color: var(--primary);
            cursor: pointer;
            font-family: roboto;
            font-size: 14px;
            height: 50px;
            width: 150px;
            overflow: hidden;
            padding: 5px;
            position: relative;
            /* 
                transform: perspective(px);这个属性也是必须设置的 
                其实对于perspective属性,我们可以简单的理解为视距,用来设置用户和元素3D空间Z平面之间的距离。
                而其效应由他的值来决定,值越小,用户与3D空间Z平面距离越近,视觉效果更令人印象深刻;
                反之,值越大,用户与3D空间Z平面距离越远,视觉效果就很小。

            */
            transform: perspective(1px);
             /* 作用于字体颜色的动画效果,这个可以自己改一下 */
            transition: color 0.2s ease-out;
        }

        /* 
            content属性:该属性用于定义元素之前或之后放置的生成内容,你可以试试content: "123456";
            没有这个属性,::before设置的样式都不会呈现
         */
        .button::before{
            content: "";
            position: absolute;
            z-index: -1;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            background: var(--primary);
            /* 作用于transform的动画效果,这个可以自己改一下 */
            transition: transform 0.3s ease-in;
        }

        /* 
            设置初始缩放为0
         */
        .button--one::before{
            transform-origin: 0 0;
            transform: scaleX(0);
        }
        .button--two::before{
            transform-origin: 0 0;
            transform: scaleY(0);
        }
        .button--three::before{
            transform: scaleY(0);
        }
        .button--four::before{
            transform: scaleX(0);
        }

        /* 
            这个样式想必都能看得懂吧,因为之前设置了绝对定位
         */
        .button--five::before{
            left: 50%;
            top: 50%;
            /* 
                translate与left,top一起是为了保持居中点不变,这个能懂吧
                translate:x与y坐标移动-50% 
                rotate:旋转135度
                scaleY:y轴缩放0
            */
            transform: translate(-50%,-50%) rotate(135deg) scaleY(0);
            width: 100%;
        }


        .button:hover{
            color: white;
        }
        .button:hover::before{
            transform: scaleX(1);
        }
        .button--five:hover::before {
            transform: translate(-50%, -50%) rotate(135deg) scaleY(4);
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="card">
            <button class="button button--one">Left to Right</button>
            <button class="button button--two">Top to Bottom</button>
            <button class="button button--three">Centre Vertical</button>
            <button class="button button--four">Centre Horizontal</button>
            <button class="button button--five">Diagonal</button>
        </div>
    </div>
</body>
</html>
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页