CSS实现倾斜按钮

作者: jie 分类: CSS 发布时间: 2024-02-03 14:08

有时候,在菜单里面会出现倾斜的按钮

可以使用背景图片的方式,也可以使用纯css的方式,从效率上来说css效率更高,这里使用css的方式来实现这个倾斜按钮

初始化基本的样式

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        button {
            width: 180px;
            height: 60px;
            border: none;
            background: #000;
            outline: none;
            color: #fff;
            font-size: 18px;
        }
</style>
</head>

<body style="text-align: center;">
    <button>
        <span>倾斜按钮</span>
    </button>
</body>

</html>

效果

步骤

1、设置圆角
圆角不能四个角都设置,设置左上和右下就可以了

button {
    /* 设置左上和右下 15px 右上和左下为0 */
    border-radius: 15px 0;
}

效果如下

2、设置左下和右上的两个角
首先设置两个方块,这两个方块肯定是绝对定位,所以要将按钮设置为相对定位,然后给这个按钮加上一个::before,其中一个方块就把它设置成绝对定位,然后设置宽高,设置背景颜色

button::before {
    content: '';
    position: absolute;
    width: 20px;
    height: 20px;
    background: #f40;
}

效果

目前这个方块在这个位置,需要把这个位置调整到左下角

button::before {
    bottom: 0;
    left: -20px;
}

调整后效果如下

调整之后需要改变一下背景,这个背景不是一个纯色背景,而是一个渐变背景;圆心点在中间,中间向四周扩散;蓝色从最开始扩散5px,然后再红色从5px扩散到结束

/* 镜像渐变背景 */
background: radial-gradient(
    circle at 50% 50%,
    blue 0 5px,
    red 5px
);

效果

这跟最终效果的关系是:可以去设置扩散的圆心,不让它在中心了,而是让它在左上角,设置为0 0,

可以看到这个蓝色就是以左上角为圆心,向四周扩散,然后生效的是红色。
然后将蓝色区域放大,放大到20px,然后把蓝色变成透明,红色变成黑色,这样左下角就出来了

background: radial-gradient(
    circle at 0 0,
    transparent 0 20px,
    #000 5px
);

用同样的方式可以实现右上角

button::after {
    content: '';
    position: absolute;
    width: 20px;
    height: 20px;
    /* 镜像渐变背景 */
    background: radial-gradient(
        circle at 0 0,
        transparent 0 20px,
        #000 5px
    );
    top: 0;
    right: -20px;
}

发现右上角的位置不对,就要改变它的扩散圆心点,把它从左上的扩散变成右下的扩散,改变圆心点即可

background: radial-gradient(
    circle at 100% 100%,
    transparent 0 20px,
    #000 5px
);

这样整个效果就差不多了,然后就把整个按钮倾斜。

倾斜按钮

将按钮倾斜-20deg

/* 倾斜 -20deg */
transform: skew(-20deg);

效果实现了,发现文字也倾斜了

扶正文字

只需要将文字扶正,反向倾斜20deg就可以了

button span {
    display: block;
    transform: skew(20deg);
}

这样最终效果就实现了

全部代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        button {
            position: relative;
            width: 180px;
            height: 60px;
            border: none;
            background: #000;
            outline: none;
            color: #fff;
            font-size: 18px;
            /* 设置左上和右下 15px 右上和左下为0 */
            border-radius: 15px 0;
            /* 倾斜 -20deg */
            transform: skew(-20deg);
        }

        button::before {
            content: '';
            position: absolute;
            width: 20px;
            height: 20px;
            /* 镜像渐变背景 */
            background: radial-gradient(circle at 0 0,
                    transparent 0 20px,
                    #000 5px);
            bottom: 0;
            left: -20px;
        }

        button::after {
            content: '';
            position: absolute;
            width: 20px;
            height: 20px;
            /* 镜像渐变背景 */
            background: radial-gradient(circle at 100% 100%,
                    transparent 0 20px,
                    #000 5px);
            top: 0;
            right: -20px;
        }

        button span {
            display: block;
            transform: skew(20deg);
        }
</style>
</head>

<body style="text-align: center;">
    <button>
        <span>倾斜按钮</span>
    </button>
</body>

</html>

发表回复