我希望我的CSS动画运行一次,并停止在最后的关键帧,但现在它只是返回到第一个关键帧和动画停止。该动画由一个标题标题组成,该标题标题随着时间的推移用颜色填充。
我在WordPress的Elementor插件中使用此代码。
有谁能告诉我我做错了什么吗?
<style>
:root{
--myText : 'HELLO';
--textColor: #EDC300;
--textStroke: 2px;
--anDuration: 8s;
}
selector{
-webkit-text-stroke: var(--textStroke) var(--textColor);
display: table;
width: -moz-fit-content;
width: -webkit-fit-content;
width: fit-content;
text-align: center;
margin: 0 auto
}
selector .elementor-heading-title::before{
content: var(--myText);
color: var(--textColor);
position: absolute;
top: 0;
width: 0%;
height: 100%;
text-align: left;
overflow: hidden;
white-space: nowrap;
border-right: var(--textStroke) solid var(--textColor);
-webkit-animation:animateX var(--anDuration) linear 1;
-webkit-animation-fill-mode: forwards;
animation:animateX var(--anDuration) linear 1;
animation-fill-mode: forwards;
}
@-webkit-keyframes animateX{
0%,10%,100%{
width:0%;
}
70%, 90%{
width: 100%;
}
}
@keyframes animateX{
0%,10%,100%{
width:0%;
}
70%, 90%{
width:100%;
}
}
</style>
2条答案
按热度按时间ymzxtsji1#
0%和100%处的动画关键帧是相同的,这会使动画看起来似乎已返回到第一帧。我认为从定义
0%
关键帧的关键帧中删除100%
可以解决这个问题。stszievb2#
正如@Caleb所说,animateX的第一个和最后一个关键帧具有宽度:0%;
这意味着在开始时,宽度将为0%,然后它将执行其他帧,直到最后一帧,其中再次为0%。
解决办法是:
注意我是如何改变关键帧的百分比的,所以它以宽度结束(在100%的关键帧处):百分百
在@-webkit-keyframes中也是如此