如何在不旋转图像的情况下旋转剪辑路径?
How to Rotate Clip Path without rotating image?
我有一张带有 CSS 属性 剪辑路径的图像。我添加了动画来旋转剪辑路径。我只想旋转剪辑路径,而不是图像。从下面的代码中,您可以了解我想要实现的目标。我这样做是为了让您了解我想要实现的目标。我的代码的问题是在每个关键帧上手动设置剪辑路径点需要花费大量时间。那么是否有任何简短的方法可以在不手动更改关键帧上的点的情况下实现以下代码结果?
我希望它是平滑的,这很难通过手动设置点来设置。
(请记住,我不需要最后一个使图像不可见的动画,我无法弄清楚为什么会这样。
#profile-img {
width: 15%;
margin: 5%;
-webkit-clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
animation: clipRotateAnim 2s linear infinite;
}
@keyframes clipRotateAnim {
0% {
-webkit-clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
}
25% {
-webkit-clip-path: polygon(100% 23%, 80% 0, 47% 34%, 16% 0, 0 19%, 26% 53%, 0 78%, 19% 100%, 51% 71%, 76% 100%, 100% 81%, 68% 51%);
clip-path: polygon(100% 23%, 80% 0, 47% 34%, 16% 0, 0 19%, 26% 53%, 0 78%, 19% 100%, 51% 71%, 76% 100%, 100% 81%, 68% 51%);
}
50% {
-webkit-clip-path: polygon(84% 100%, 100% 75%, 64% 56%, 100% 13%, 81% 0, 49% 28%, 22% 0, 0 29%, 28% 57%, 0 83%, 21% 100%, 42% 74%);
clip-path: polygon(84% 100%, 100% 75%, 64% 56%, 100% 13%, 81% 0, 49% 28%, 22% 0, 0 29%, 28% 57%, 0 83%, 21% 100%, 42% 74%);
}
100% {
-webkit-clip-path: polygon(27% 0, 0 19%, 29% 49%, 0 79%, 19% 100%, 45% 76%, 84% 100%, 100% 80%, 69% 56%, 100% 18%, 80% 0, 47% 33%);
clip-path: polygon(27% 0, 0 19%, 29% 49%, 0 79%, 19% 100%, 45% 76%, 84% 100%, 100% 80%, 69% 56%, 100% 18%, 80% 0, 47% 33%);
}
}
<img id="profile-img" src="https://images.pexels.com/photos/1025804/pexels-photo-1025804.jpeg?auto=compress&cs=tinysrgb&h=350">
将图片作为伪元素的背景,反方向旋转:
.image {
width: 200px;
height: 200px;
margin: 20px;
clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
animation: clipRotateAnim 2s linear infinite;
position: relative;
overflow: hidden;
}
.image:before {
content: "";
position: absolute;
top: -10%;
bottom: -10%;
left: -10%;
right: -10%;
background: var(--i) center/cover;
animation: inherit ;
animation-direction:reverse;
}
@keyframes clipRotateAnim {
to {
transform: rotate(360deg)
}
}
<div class="image" style="--i:url(https://images.pexels.com/photos/1025804/pexels-photo-1025804.jpeg?auto=compress&cs=tinysrgb&h=350)">
</div>
另一种提高性能的方法是使用背景在您旋转的图像上方创建另一个图层。
.image {
width:200px;
height:200px;
margin: 20px;
position:relative;
background:var(--i) center/cover;
overflow:hidden;
}
.image:before {
content:"";
position:absolute;
top:5px;
bottom:5px;
left:5px;
right:5px;
box-shadow:0 0 0 200px #fff;
background:
linear-gradient(#fff,#fff) top left,
linear-gradient(#fff,#fff) top right,
linear-gradient(#fff,#fff) bottom left,
linear-gradient(#fff,#fff) bottom right;
background-size:calc(50% - 30px) calc(50% - 30px);
background-repeat:no-repeat;
animation: clipRotateAnim 2s linear infinite;
}
@keyframes clipRotateAnim{
to{transform:rotate(360deg)}
}
<div class="image" style="--i:url(https://images.pexels.com/photos/1025804/pexels-photo-1025804.jpeg?auto=compress&cs=tinysrgb&h=350)">
</div>
我有一张带有 CSS 属性 剪辑路径的图像。我添加了动画来旋转剪辑路径。我只想旋转剪辑路径,而不是图像。从下面的代码中,您可以了解我想要实现的目标。我这样做是为了让您了解我想要实现的目标。我的代码的问题是在每个关键帧上手动设置剪辑路径点需要花费大量时间。那么是否有任何简短的方法可以在不手动更改关键帧上的点的情况下实现以下代码结果? 我希望它是平滑的,这很难通过手动设置点来设置。 (请记住,我不需要最后一个使图像不可见的动画,我无法弄清楚为什么会这样。
#profile-img {
width: 15%;
margin: 5%;
-webkit-clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
animation: clipRotateAnim 2s linear infinite;
}
@keyframes clipRotateAnim {
0% {
-webkit-clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
}
25% {
-webkit-clip-path: polygon(100% 23%, 80% 0, 47% 34%, 16% 0, 0 19%, 26% 53%, 0 78%, 19% 100%, 51% 71%, 76% 100%, 100% 81%, 68% 51%);
clip-path: polygon(100% 23%, 80% 0, 47% 34%, 16% 0, 0 19%, 26% 53%, 0 78%, 19% 100%, 51% 71%, 76% 100%, 100% 81%, 68% 51%);
}
50% {
-webkit-clip-path: polygon(84% 100%, 100% 75%, 64% 56%, 100% 13%, 81% 0, 49% 28%, 22% 0, 0 29%, 28% 57%, 0 83%, 21% 100%, 42% 74%);
clip-path: polygon(84% 100%, 100% 75%, 64% 56%, 100% 13%, 81% 0, 49% 28%, 22% 0, 0 29%, 28% 57%, 0 83%, 21% 100%, 42% 74%);
}
100% {
-webkit-clip-path: polygon(27% 0, 0 19%, 29% 49%, 0 79%, 19% 100%, 45% 76%, 84% 100%, 100% 80%, 69% 56%, 100% 18%, 80% 0, 47% 33%);
clip-path: polygon(27% 0, 0 19%, 29% 49%, 0 79%, 19% 100%, 45% 76%, 84% 100%, 100% 80%, 69% 56%, 100% 18%, 80% 0, 47% 33%);
}
}
<img id="profile-img" src="https://images.pexels.com/photos/1025804/pexels-photo-1025804.jpeg?auto=compress&cs=tinysrgb&h=350">
将图片作为伪元素的背景,反方向旋转:
.image {
width: 200px;
height: 200px;
margin: 20px;
clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
animation: clipRotateAnim 2s linear infinite;
position: relative;
overflow: hidden;
}
.image:before {
content: "";
position: absolute;
top: -10%;
bottom: -10%;
left: -10%;
right: -10%;
background: var(--i) center/cover;
animation: inherit ;
animation-direction:reverse;
}
@keyframes clipRotateAnim {
to {
transform: rotate(360deg)
}
}
<div class="image" style="--i:url(https://images.pexels.com/photos/1025804/pexels-photo-1025804.jpeg?auto=compress&cs=tinysrgb&h=350)">
</div>
另一种提高性能的方法是使用背景在您旋转的图像上方创建另一个图层。
.image {
width:200px;
height:200px;
margin: 20px;
position:relative;
background:var(--i) center/cover;
overflow:hidden;
}
.image:before {
content:"";
position:absolute;
top:5px;
bottom:5px;
left:5px;
right:5px;
box-shadow:0 0 0 200px #fff;
background:
linear-gradient(#fff,#fff) top left,
linear-gradient(#fff,#fff) top right,
linear-gradient(#fff,#fff) bottom left,
linear-gradient(#fff,#fff) bottom right;
background-size:calc(50% - 30px) calc(50% - 30px);
background-repeat:no-repeat;
animation: clipRotateAnim 2s linear infinite;
}
@keyframes clipRotateAnim{
to{transform:rotate(360deg)}
}
<div class="image" style="--i:url(https://images.pexels.com/photos/1025804/pexels-photo-1025804.jpeg?auto=compress&cs=tinysrgb&h=350)">
</div>