clip-path动画无过渡效果?三角形转八边形无法平滑动画问题
解决clip-path从三角形到八边形的平滑动画问题
问题原因
CSS的clip-path在做动画过渡时,要求两个关键帧中polygon()的顶点数量完全一致。你原来的三角形只有3个顶点,八边形有8个顶点,浏览器无法在不同数量的顶点之间计算平滑过渡路径,所以会直接跳变。
修复方案
把三角形的clip-path补全为8个顶点,通过重复相同顶点模拟三角形形状,让两个关键帧顶点数量一致,浏览器就能正常插值实现平滑动画。
修改后的完整代码:
body { background-color: #252525; height: 100vh; display: flex; justify-content: center; align-items: center; } .circle { width: 30rem; height: 5rem; background-color: #1c7ed6; animation: wave--animate 4s infinite ease-in-out alternate; } @keyframes wave--animate { 0% { /* 补全为8个顶点的三角形,重复相同顶点 */ clip-path: polygon(50% 0%, 50% 0%, 0% 100%, 0% 100%, 100% 100%, 100% 100%, 0% 100%, 50% 0%); } 100% { /* 原八边形路径 */ clip-path: polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%); } }
<body> <section class="section--water-waves"> <p class="circle"></p> </section> </body>
原理说明
通过重复三角形的顶点,让两个关键帧的polygon拥有相同数量的顶点,浏览器就能逐个计算每个顶点的位置变化,从而实现从三角形到八边形的平滑变形。你可以根据需求调整重复顶点的位置,优化过渡效果。
内容的提问来源于stack exchange,提问作者Kondaveti Charan
相关产品推荐
相关产品推荐

