ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CSS 赛博朋克 “故障风”按钮制作方法

2022-04-30 14:04:43  阅读:210  来源: 互联网

标签:clip 朋克 赛博 transform -- var path translate CSS


想在个人博客上名字处添加一个鼠标经过的动画特效,看到这种“故障风格”感觉自己的中二值拉满,随后进行学习如何制作。

参考原文:https://juejin.cn/post/6908565208596217863

代码展示:

 

<!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>
</head>
<style scoped>
    @keyframes glitch {
        0% {
            clip-path: var(--slice-1);
            transform: translate(-20px, -10px);
        }

        10% {
            clip-path: var(--slice-3);
            transform: translate(10px, 10px);
        }

        20% {
            clip-path: var(--slice-1);
            transform: translate(-10px, 10px);
        }

        30% {
            clip-path: var(--slice-3);
            transform: translate(0px, 5px);
        }

        40% {
            clip-path: var(--slice-2);
            transform: translate(-5px, 0px);
        }

        50% {
            clip-path: var(--slice-3);
            transform: translate(5px, 0px);
        }

        60% {
            clip-path: var(--slice-4);
            transform: translate(5px, 10px);
        }

        70% {
            clip-path: var(--slice-2);
            transform: translate(-10px, 10px);
        }

        80% {
            clip-path: var(--slice-5);
            transform: translate(20px, -10px);
        }

        90% {
            clip-path: var(--slice-1);
            transform: translate(-10px, 0px);
        }

        100% {
            clip-path: var(--slice-1);
            transform: translate(0);
        }
    }

    body {
        display: flex;
        justify-content: center;
        align-items: center;
        min-height: 100vh;
        background-color: #f8f005;
    }

    button,
    button::after {
        position: relative;
        width: 380px;
        height: 86px;
        line-height: 86px;
        font-size: 36px;
        /* cursive 为通用字体族名——草书 */
        font-family: "Bebas Neue", cursive;
        background: linear-gradient(45deg, transparent 5%, #ff013c 5%);
        border: 0;
        color: #fff;
        letter-spacing: 3px;

        outline: transparent;
    }

    button::after {
        --slice-0: inset(50% 50% 50% 50%);
        --slice-1: inset(80% -6px 0 0);
        --slice-2: inset(50% -6px 30% 0);
        --slice-3: inset(10% -6px 85% 0);
        --slice-4: inset(40% -6px 43% 0);
        --slice-5: inset(80% -6px 5% 0);

        content: "AVAILABLE NOW";
        display: block;
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
        background: linear-gradient(45deg,
                transparent 3%,
                #00e6f6 3%,
                #00e6f6 5%,
                #ff013c 5%);
        box-shadow: 6px 0 0 #00e6f6;
        text-shadow: -3px -3px 0px #f8f005, 3px 3px 0px #00e6f6;
        clip-path: var(--slice-0);
    }

    button:hover::after {
        animation: glitch 1s;
        animation-timing-function: steps(2, end);
    }
</style>

<body>
    <button>AVAILABLE NOW</button>
</body>

</html>

 

知识点:

  1. linear-gradient:用于背景颜色的渐变。
 background:linear-gradient(to left , red,#fff);

第一个参数用于控制渐变的角度,分别为0deg与90deg。

 

 

 第二个参数与第三个分别控制终点颜色与起始颜色。

 而原文作者使用的想法为用于制作左下角的斜角,将斜角出设置为透明并过渡到红色。

但如果直接设置为background:linear-gradient(45deg, transparent,red); 则会导致一个从透明缓慢过渡到红色的样式。无法突显左下角缺一块的感觉。

 

 

 

 而通过设置颜色开始部分相同,位置相交中间过渡区域被遮挡剔除。也就形成了想要的结果。

background:linear-gradient(45deg, transparent 5%,red 5%);

 

 

 

 

 

 

 

    2.实现变色层:通过对按钮设置伪类选择器::after 并设置相同样式,悬浮在按钮上,设置文字阴影效果。

 

 

 

    3.图形切割达到颜色分割效果:clip-path:由于第一次接触clip-path 所以需要从头了解。

    clip-path 属性使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。可以指定一些特定形状。

    而inset()里面的设定值有 4 个,分别代表上右下左,即是要向内缩小多少。

    在通过动画设定%的进度看做帧数,每一帧显示的区域不同,可以达到一种“信号不稳定,导致的卡顿画面切割的效果”。关于属性的具体使用,可以参考https://blog.csdn.net/weixin_44614518/article/details/121946472 写的十分详细。

 

    

 

     通过自定义多个属性并在动画使用var()函数来调用属性。以达到显示不同区域的感觉,但指显示不同区域无法做到拉扯撕裂的感觉,所以还需要在每一帧添加小幅度位移来进行体现。

    在::after 内进行多个自定义属性。来设定可显示区域,区域划分只要划分出上下层次即可,左右通过位移实现即可。

        --division-0:inset(50% 50% 50% 50%);
        --division-1:inset(80% -6px 0 2px);
        --division-2:inset(70% -6px 30% 2px);
        --division-3:inset(80% -6px 0 2px);
        --division-4:inset(10% -6px 70% 2px);
        --division-5:inset(0% -6px 90% 2px);
        --division-6:inset(30% -6px 50% 2px);
        clip-path: var(--division-0);

    动画代码

    @keyframes glitch {
        0% {
            clip-path: var(--division-0);
            transform: translate(-20px, -10px);
        }

        10% {
            clip-path: var(--division-3);
            transform: translate(10px, 10px);
        }

        20% {
            clip-path: var(--division-1);
            transform: translate(-10px, 10px);
        }

        30% {
            clip-path: var(--division-3);
            transform: translate(0px, 5px);
        }

        40% {
            clip-path: var(--division-6);
            transform: translate(-5px, 0px);
        }

        50% {
            clip-path: var(--division-5);
            transform: translate(5px, 0px);
        }

        60% {
            clip-path: var(--division-4);
            transform: translate(5px, 10px);
        }

        70% {
            clip-path: var(--division-2);
            transform: translate(-10px, 10px);
        }

        80% {
            clip-path: var(--division-5);
            transform: translate(20px, -10px);
        }

        90% {
            clip-path: var(--division-1);
            transform: translate(-10px, 0px);
        }

        100% {
            clip-path: var(--division-6);
            transform: translate(0);
        }
    }

 

标签:clip,朋克,赛博,transform,--,var,path,translate,CSS
来源: https://www.cnblogs.com/WangEDblog/p/16210002.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有