css特效:clip-path

直到上一个特效发布后我才注意到这个功能强大的一个clip-path属性,但是在这里我就不多介绍了,感兴趣可以自行搜索其他博主关于clip-path的文章。

这次更新内容主要在于耳朵效果和全新的波纹效果,这些新的效果全是使用clip-path属性制作的

最新版本资源

https://download.csdn.net/download/src_chao1/87663520

视频

clip

新增的类选择器

pulseClip:所有使用clip-path制作小耳朵的新样式使用的类,不使用其他选择器默认直边心形
clipStar:五角星
clipSixStar:六角星
clipDownArrow:下箭头
clipUpArrow:上箭头
clipHeart:圆滑一点心形
clipHeartBig:特别圆滑的心形
wave:波形,所有默认不移动波形的基础类
waveMove:波形,所有默认移动波形的基础类
wave_1_violent1:波涛汹涌半波长为1的水波,还有半波长为2,3,4,5,7,10的波
wave_1_calm1:平静半波长为1的水波,还有半波长为2,3,4,5,7,10的波
wave_1_big1:很大的波型半波长为1的水波,还有半波长为2,3,4,5,7,10的波

新增的自定义变量

--pulse_cat_weight:耳朵的宽度
--pulse_cat_height:耳朵的高度
--pulse_clip:耳朵的裁剪形状
--wave_clip1:水波的裁剪形状
--wave_light_color:水波颜色
--wave_speed:水波样式

效果

小耳朵

五角星

代码

<button class="button  inverted  pulseClip clipStar " style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipStar determine">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipStar cancel">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted pulseClip clipStar error">
        <button-span>BUTTON</button-span>
    </button>

效果

简单心形

代码

<button class="button  inverted pulseClip " style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted pulseClip determine">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip cancel">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip error">
        <button-span>BUTTON</button-span>
    </button>

 效果

 六角星

代码

<button class="button  inverted  pulseClip clipSixStar " style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipSixStar determine">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipSixStar cancel">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted pulseClip clipSixStar error">
        <button-span>BUTTON</button-span>
    </button>

效果

下箭头

 

<button class="button  inverted  pulseClip clipDownArrow " style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipDownArrow determine">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipDownArrow cancel">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted pulseClip clipDownArrow error">
        <button-span>BUTTON</button-span>
    </button>

效果

上箭头

 代码

<button class="button  inverted  pulseClip clipUpArrow " style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipUpArrow determine">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipUpArrow cancel">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted pulseClip clipUpArrow error">
        <button-span>BUTTON</button-span>
    </button>

效果

 心形

代码

<button class="button  inverted  pulseClip clipHeart " style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipHeart determine">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted  pulseClip clipHeart cancel">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button  inverted pulseClip clipHeart error">
        <button-span>BUTTON</button-span>
    </button>

效果

 波形

js生成

关于波形,我在wave.css中放了几个波形的剪切坐标,由于波形也是使用了剪贴坐标,所以坐标点实在太多,文件很大,因此把我制作剪切坐标的js代码介绍一下,不想要使用js生成剪切坐标的同学可以跳过这一段了~

function create(st = 'violentRand', style = 'water' || 'cloud', start = 65, end = 25, fre = 2) {
        let init = start;
        const canvas = document.createElement('canvas');
        canvas.width = 500;
        canvas.height = 100;
        document.body.appendChild(canvas)
        let context = canvas.getContext('2d');
        let fun = BezierCurve(2, 100, 0, 0);
        context.beginPath();
        for (let i = 0; i < 20; i++) {
            context.moveTo(i * 25, 0)
            context.lineTo(i * 25, 100);
        }
        context.stroke();
        context.beginPath();
        for (let i = 0; i < 10; i++) {
            context.moveTo(0, i * 10)
            context.lineTo(500, i * 10);
        }
        context.stroke();
        context.beginPath();
        let rand = {
            'water': {
                'violentRand': [[45, 55], [70, 90], [45, 55], [10, 30]],
                'calmRand': [[45, 55], [60, 70], [45, 55], [30, 40]],
                'bigRand': [[45, 55], [80, 100], [45, 55], [0, 20]]
            },
            'cloud': {
                'violentRand': [[70, 90], [10, 30], [70, 90], [10, 30]],
                'calmRand': [[60, 70], [30, 40], [60, 70], [30, 40]],
                'bigRand': [[80, 100], [0, 20], [80, 100], [0, 20]]
            }
        }
        let str = "";
        let len = 100 / fre % 4 === 0 ? 100 / fre : Math.floor(100 / fre / 4) * 4;
        let compensate = 100 / len;
        for (let i = 0; i < len; i++) {
            fun = BezierCurve(2, start, style === 'water' ? i % 4 <= 1 ? Math.min(start * 2, end * 2) : Math.max(start * 2, end * 2) : Math.min(start * 2, end * 2), end);
            start = end;
            end = random(rand[style][st][i % 4][0], rand[style][st][i % 4][1], true);
            if (i === len - 2) end = init;
            for (let j = 0; j <= 100; j++) {
                str += `${j / len + i * compensate}% ${fun(j / 100)}% ,`;
                context.lineTo(j / (len / 5) + i * compensate * 5, fun(j / 100));
            }
        }
        context.stroke();
        console.log('--wave_clip1: polygon(' + str + '100% 0%,100% 100%,0 100%)');
    }
    create('violentRand','cloud');

首先要说的是,如果直接运行这段代码(包括文件中那个html代码)都是会失败的,因为这里面有我两个自定义函数没有发布出来,分别是BezierCurve和random,用于生成平滑曲线坐标和随机数

BezierCurve:

const BezierCurve = function () {
    return (type = 2, ...args) => {
        if (args.length >= type + 1)
            return (t) => {
                let res = 0;
                for (let i = 0; i <= type; i++) {
                    res += Math.pow(t, i) * Math.pow((1 - t), type - i) * args[i];
                }
                return res;
            }
        else return console.warn(`Insufficient parameters There should be ${type + 1} parameters`);
    }

}()

random:

const random = function (start = 0, end = 1, integer = false) {
        let number = Math.random() * (start - end) + end;
        if (integer) return Math.floor(number);
        return number;
    }

这三段代码中,BezierCurve和random我就不介绍了,感兴趣可以了解贝塞尔曲线

重点在于如何使用create函数

参数:

st:["violentRand"|"calmRand"|"bigRand"],用于生成不同高度差的波纹,calm最稳定,big最剧烈,violent介于两者之间
style:["water"|"cloud"],用于生成不同样式波纹,水波纹和云波纹
start:第一段曲线开始点高度位置
end:第一段曲线结束点坐标高度位置
fre:波长,数值越小波的个数越多

 返回值:该函数无返回值,但是会在控制台中输出适配本css样式的字符串,之间复制粘贴到本地css类选择中就可以了,同时也会在您的页面中生成一个canvas标签,用于展示生成的波形

当然您也可也选择在代码中最后直接为一个元素的style赋值,这样就不需要繁杂的复制粘贴了

不过这个函数生成的曲线只会保证每段曲线是连续的,无法保证曲线和曲线直接是连续的,为了避免这个问题,您可以更改高度差设置或者多次生成波形,总会有连续的时候不是嘛~~

css样式效果

默认不移动波形

代码

 <button class="button inverted wave " style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted wave wave_1_violent1" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted wave wave_1_violent5" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted wave wave_1_calm1" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted wave wave_1_calm5" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted wave wave_1_big1" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted wave wave_1_big5" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted wave wave_1_violent5 determine">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted wave wave_1_violent5 cancel">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted wave wave_1_violent5 error">
        <button-span>BUTTON</button-span>
    </button>

 效果

 

默认移动的波形

代码:

<button class="button inverted waveMove " style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted waveMove wave_1_violent1" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted waveMove wave_1_violent5" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted waveMove wave_1_calm1" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted waveMove wave_1_calm5" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted waveMove wave_1_big1" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted waveMove wave_1_big5" style="--width: 550px;">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted waveMove wave_1_violent5 determine">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted waveMove wave_1_violent5 cancel">
        <button-span>BUTTON</button-span>
    </button>
    <button class="button inverted waveMove wave_1_violent5 error">
        <button-span>BUTTON</button-span>
    </button>

效果(其实图片看不出什么区别~~) 

 

 

 

 好了,那么这次更新的耳朵和波形也全都结束了,如果我有更多的灵感会继续发布更多内容

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值