马黑黑 发表于 2025-7-29 12:52

clip-path裁剪动画演示

<style>
    .clip-box {
      position: relative;
      margin: 30px auto;
      width: 600px;
      height: 600px;
      filter: drop-shadow(2px 2px 12px rgba(0,0,0,.5));
    }
    .clip-box::before, .clip-box::after {
      position: absolute;
      content: '';
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      background: repeating-linear-gradient(90deg, beige, tan, beige 2%);
      transition: 2s;
    }
    .clip-box::before {
      clip-path: polygon(0 0,0 100%,100% 100%);
    }
    .clip-box::after {
      left: -1px;
      width: calc(100% + 1px);
      height: calc(100% + 1px);
      clip-path: polygon(0 0,100% 0,100% 100%);
    }
    .clip-box:hover::before {
      clip-path: polygon(0 0,50% 50%,100% 0);
    }
    .clip-box:hover::after {
      clip-path: polygon(50% 50%,0 100%,100% 100%);
    }
</style>

<div class="clip-box"></div>

马黑黑 发表于 2025-7-29 12:52

一楼代码

<style>
    .clip-box {
      position: relative;
      margin: 30px auto;
      width: 600px;
      height: 600px;
      filter: drop-shadow(2px 2px 12px rgba(0,0,0,.5));
    }
    .clip-box::before, .clip-box::after {
      position: absolute;
      content: '';
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      background: repeating-linear-gradient(90deg, beige, tan, beige 2%);
      transition: 2s;
    }
    .clip-box::before {
      clip-path: polygon(0 0,0 100%,100% 100%);
    }
    .clip-box::after {
      left: -1px;
      width: calc(100% + 1px);
      height: calc(100% + 1px);
      clip-path: polygon(0 0,100% 0,100% 100%);
    }
    .clip-box:hover::before {
      clip-path: polygon(0 0,50% 50%,100% 0);
    }
    .clip-box:hover::after {
      clip-path: polygon(50% 50%,0 100%,100% 100%);
    }
</style>

<div class="clip-box"></div>

马黑黑 发表于 2025-7-29 13:00

本帖最后由 马黑黑 于 2025-7-29 13:08 编辑

思路:

主元素带两个伪元素,伪元素都切成直角三角形并拼凑在一起构成正方形,刚好能完整覆盖主元素。:hover 交互时,将两个伪元素改切成两个等腰三角形。动画时长2s。

理论上,两个伪元素和主元素应是等宽等高。实操中发现三角形斜面衔接处会有一像素的裂缝,因此::after 多设一像素的宽高,并将left属性设为 -1px,暂且以此法去除裂缝。

还可以直接对主元素动手术:
<style>
    .clip-box {
      position: relative;
      margin: 30px auto;
      width: 600px;
      height: 600px;
      background: repeating-linear-gradient(90deg, beige, tan, beige 2%);
      filter: drop-shadow(2px 2px 12px rgba(0,0,0,.5));
    }
    .clip-box:hover {
      clip-path: polygon(0 0,100% 0,0 100%,100% 100%);
    }
</style>

红影 发表于 2025-7-29 13:07

这个有意思,两个伪元素实际已经是两个对角线上的三角形拼成的正方形了,鼠标触碰后,变成上下对接的三角了。很有意思的变化{:4_199:}

马黑黑 发表于 2025-7-29 13:07

本帖最后由 马黑黑 于 2025-7-29 13:10 编辑

直接切主元素方法也不错,但是,元素被 clip-path 操作后,阴影不再存在,变化过程细节也没有那么丰富

红影 发表于 2025-7-29 13:08

after 里使用了left: -1px;,宽高也各加了1 ,这个没明白,是因为两个三角对不齐么?

红影 发表于 2025-7-29 13:09

background: repeating-linear-gradient(90deg, beige, tan, beige 2%);

这个底图纹路设计也和漂亮{:4_199:}

马黑黑 发表于 2025-7-29 13:11

红影 发表于 2025-7-29 13:09
background: repeating-linear-gradient(90deg, beige, tan, beige 2%);

这个底图纹路设计也和漂亮{:4_1 ...

重复性线性渐变的最偷懒的设计方法{:4_170:}

马黑黑 发表于 2025-7-29 13:12

红影 发表于 2025-7-29 13:08
after 里使用了left: -1px;,宽高也各加了1 ,这个没明白,是因为两个三角对不齐么?

三楼有解释

马黑黑 发表于 2025-7-29 13:12

红影 发表于 2025-7-29 13:07
这个有意思,两个伪元素实际已经是两个对角线上的三角形拼成的正方形了,鼠标触碰后,变成上下对接的三角了 ...

这是幼儿园小盆友玩积木{:4_170:}

红影 发表于 2025-7-29 13:47

马黑黑 发表于 2025-7-29 13:11
重复性线性渐变的最偷懒的设计方法

这个好啊,最容易理解呢{:4_187:}

红影 发表于 2025-7-29 13:47

马黑黑 发表于 2025-7-29 13:12
三楼有解释

嗯嗯,看到了。前面回复时还没有{:4_173:}

马黑黑 发表于 2025-7-29 13:48

红影 发表于 2025-7-29 13:47
嗯嗯,看到了。前面回复时还没有

后补的

马黑黑 发表于 2025-7-29 13:48

红影 发表于 2025-7-29 13:47
这个好啊,最容易理解呢

它简单哈

红影 发表于 2025-7-29 13:48

马黑黑 发表于 2025-7-29 13:12
这是幼儿园小盆友玩积木

非常有趣味,很吸引人{:4_187:}

杨帆 发表于 2025-7-29 14:43

clip-path裁剪不易理解,谢谢马老师经典讲授、演示与分享{:4_190:}

马黑黑 发表于 2025-7-29 18:35

杨帆 发表于 2025-7-29 14:43
clip-path裁剪不易理解,谢谢马老师经典讲授、演示与分享

可以去简单教程那里了解一下。

clip-path,顾名思义,就是根据路径对目标对象进行裁剪,可以剪成圆形、椭圆形、矩形、多边形。以圆形为例,我们对一个四四方方的 div 进行裁剪,clip-path: circle(100px);,这样,矩形就以中心点为圆心(可以定义)、以 100px为半径画一个圆,园内保留,院外切掉。不同的切法有不同的细节规定。

马黑黑 发表于 2025-7-29 18:36

红影 发表于 2025-7-29 13:48
非常有趣味,很吸引人

注意防沉迷{:4_170:}

杨帆 发表于 2025-7-29 19:10

马黑黑 发表于 2025-7-29 18:35
可以去简单教程那里了解一下。

clip-path,顾名思义,就是根据路径对目标对象进行裁剪,可以剪成圆形 ...

好的,谢谢老师{:4_190:}

红影 发表于 2025-7-29 20:25

马黑黑 发表于 2025-7-29 13:48
后补的

这个补得很及时{:4_187:}
页: [1] 2 3 4 5 6 7 8
查看完整版本: clip-path裁剪动画演示