深入理解CSS3的clip-path

一. 简述

clip-path CSS 属性可以创建一个只有元素的部分区域可以显示的剪切区域(不改变这个裁剪区域在整张图中的位置),区域内的部分显示,区域外的隐藏。clip-path属性代替了现在已经弃用的剪切 clip属性。clip-path的属性值可以是以下几种:

  • clip-path属性值为inset;
    inset是将元素剪切为一个矩形,如clip-path:inset(10px),括号内的值类似于margin、padding值的写法,可以写一个值,也可以写多个值。
  • clip-path属性值为circle;
    circle是将元素剪切为一个圆形,如clip-path: circle(100px at 50% 50%),100px表示圆的直径,50% 50%表示圆心。
  • clip-path属性值为ellipse;
    circle是将元素剪切为一个椭形,如ellipse(150px 100px at 50% 50%),150px 表示椭圆的水平半径,100px表示椭圆的垂直半径,50% 50%表示圆心。

clip-path还可以有多种,如polygon、path、svg等。更多参考:clip-path

二. 例子

例如: 绘制三角形

.main {
			width: 60px;
			height: 60px;
			background: red;
			clip-path: polygon(50% 0,0 100%, 100% 100%);
		}

当然,我们还可以借助clip-path生成器来获取更多更好玩的裁剪图形,如下图:
在这里插入图片描述

三. clip-path过渡动画

clip-path 另外一个强大之处在于可以进行 CSS transtion 与 CSS animation配合使用

例:多边形图形动画

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
            <title>
                clip-path动画-多边形
            </title>
            <style>
                .polygon-animate {
				    position: absolute;
				    width: 200px;
				    height: 200px;
				    top: 50%;
				    left: 50%;
				    transform: translate(-50%, -50%);
				    background-color: crimson;
				    animation: polygon-ani 5s linear infinite;
				}
				@keyframes polygon-ani {
					0% {
						clip-path: polygon(
				        50% 0%,
				        0% 100%,
				        100% 100%,
				        100% 100%,
				        100% 100%,
				        100% 100%,
				        100% 100%,
				        100% 100%,
				        100% 100%
				    );
					}
				    20% {
				        background-color: darkorange;
				        clip-path: polygon(
				            50% 0%,
				            100% 50%,
				            50% 100%,
				            0% 50%,
				            0% 50%,
				            0% 50%,
				            0% 50%,
				            0% 50%,
				            0% 50%
				        );
				    }
				    40% {
				        clip-path: polygon(
				            50% 0%,
				            100% 38%,
				            82% 100%,
				            18% 100%,
				            0% 38%,
				            0% 38%,
				            0% 38%,
				            0% 38%,
				            0% 38%
				        );
				    }
				    60% {
				        background-color: lemonchiffon;
				        clip-path: polygon(
				            50% 0%,
				            100% 25%,
				            100% 75%,
				            50% 100%,
				            0% 75%,
				            0% 25%,
				            0% 25%,
				            0% 25%,
				            0% 25%
				        );
				    }
				    80%,100% {
				        clip-path: polygon(
				            50% 0%,
				            90% 20%,
				            100% 60%,
				            75% 100%,
				            25% 100%,
				            0% 60%,
				            10% 20%,
				            10% 20%,
				            10% 20%
				        );
				    }
				}
            </style>
        </meta>
    </head>
    <body>
        <div class="polygon-animate">
        </div>
    </body>
</html>

在这里插入图片描述

例如:图形变换动画

发布了398 篇原创文章 · 获赞 182 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/yexudengzhidao/article/details/105554810
今日推荐