[英]Animation fill mode and opacity are not keeping the last style after animation ends
我正在尝试使用设置为forwards
的animation-fill-mode
将动画结束时的opacity
设置为 1(它应该是最后一个关键帧),但由于某种原因我错过了将不透明度设置回动画结束时为 0。
这是我正在制作动画的元素片段:
<div class="section active">
<span>Il</span>
<span>massaggio</span>
<span>è</span>
<span>l'unica</span>
<span>forma</span>
<span>di</span>
<span>piacere</span>
<span>fisico</span>
<span>a</span>
<span>cui</span>
<span>la</span>
<span>natura</span>
<span>ha</span>
<span>dimenticato</span>
<div id="arrow-container">
<img src="images/social-35-white.svg" id="arrow-down" alt="" class="image-2">
</div>
</div>
虽然这里是带有动画的 css:
span {
color: transparent;
animation: blur 10s ease-out;
-webkit-animation: blur 10s ease-out;
animation-fill-mode: forwards;
-webkit-animation-fill-mode: forwards;
}
span:nth-child(1) {
animation-delay: 0.1s;
-webkit-animation-delay: 0.1s;
}
span:nth-child(2) {
animation-delay: 0.2s;
-webkit-animation-delay: 0.2s;
}
span:nth-child(3) {
animation-delay: 0.3s;
-webkit-animation-delay: 0.3s;
}
span:nth-child(4) {
animation-delay: 0.4s;
-webkit-animation-delay: 0.4s;
}
span:nth-child(5) {
animation-delay: 0.5s;
-webkit-animation-delay: 0.5s;
}
span:nth-child(6) {
animation-delay: 0.6s;
-webkit-animation-delay: 0.6s;
}
span:nth-child(7) {
animation-delay: 0.7s;
-webkit-animation-delay: 0.7s;
}
span:nth-child(8) {
animation-delay: 0.8s;
-webkit-animation-delay: 0.8s;
}
span:nth-child(9) {
animation-delay: 0.9s;
-webkit-animation-delay: 0.9s;
}
span:nth-child(10) {
animation-delay: 1.0s;
-webkit-animation-delay: 1.0s;
}
span:nth-child(11) {
animation-delay: 1.1s;
-webkit-animation-delay: 1.1s;
}
span:nth-child(12) {
animation-delay: 1.2s;
-webkit-animation-delay: 1.2s;
}
span:nth-child(13) {
animation-delay: 1.3s;
-webkit-animation-delay: 1.3s;
}
span:nth-child(14) {
animation-delay: 1.4s;
-webkit-animation-delay: 1.4s;
}
@keyframes blur {
0% {text-shadow: 0 0 100px #111; opacity:0;}
5% {text-shadow: 0 0 90px #111;}
15% {opacity: 1;}
20% {text-shadow: 0 0 0px #111;}
80% {text-shadow: 0 0 0px #111;}
100%. {opacity: 1;}
}
@-webkit-keyframes blur {
0% {text-shadow: 0 0 100px #111; opacity:0;}
5% {text-shadow: 0 0 90px #111;}
15% {opacity: 1;}
20% {text-shadow: 0 0 0px #111;}
80% {text-shadow: 0 0 0px #111;}
100% {opacity: 1;}
}
为什么最后不保持不透明度?
你的最后一个关键帧是100% {opacity: 1;}
所以这是保留的样式......但这不是使文本可见的样式!
文本有color:transparent
所以不透明度没有任何影响。 实际上使文本可见的样式是text-shadow: 0 0 0px #111;
,因此您需要将其包含在最后一个关键帧中:
100% {opacity: 1; text-shadow: 0 0 0px #111; }
注意:我一直保持opacity
,以防此处未包含其他元素,但对于此处的代码,它实际上并没有做任何事情:)
工作示例:
你可以在下面看到这个工作,仅供参考,我已经运行了 2 秒,所以可以更快地看到它的工作:)
span { color: transparent; animation: blur 2s ease-out; -webkit-animation: blur 2s ease-out; animation-fill-mode: forwards; -webkit-animation-fill-mode: forwards; } span:nth-child(1) { animation-delay: 0.1s; -webkit-animation-delay: 0.1s; } span:nth-child(2) { animation-delay: 0.2s; -webkit-animation-delay: 0.2s; } span:nth-child(3) { animation-delay: 0.3s; -webkit-animation-delay: 0.3s; } span:nth-child(4) { animation-delay: 0.4s; -webkit-animation-delay: 0.4s; } span:nth-child(5) { animation-delay: 0.5s; -webkit-animation-delay: 0.5s; } span:nth-child(6) { animation-delay: 0.6s; -webkit-animation-delay: 0.6s; } span:nth-child(7) { animation-delay: 0.7s; -webkit-animation-delay: 0.7s; } span:nth-child(8) { animation-delay: 0.8s; -webkit-animation-delay: 0.8s; } span:nth-child(9) { animation-delay: 0.9s; -webkit-animation-delay: 0.9s; } span:nth-child(10) { animation-delay: 1.0s; -webkit-animation-delay: 1.0s; } span:nth-child(11) { animation-delay: 1.1s; -webkit-animation-delay: 1.1s; } span:nth-child(12) { animation-delay: 1.2s; -webkit-animation-delay: 1.2s; } span:nth-child(13) { animation-delay: 1.3s; -webkit-animation-delay: 1.3s; } span:nth-child(14) { animation-delay: 1.4s; -webkit-animation-delay: 1.4s; } @keyframes blur { 0% {text-shadow: 0 0 100px #111; opacity:0;} 5% {text-shadow: 0 0 90px #111;} 15% {opacity: 1;} 20% {text-shadow: 0 0 0px #111;} 80% {text-shadow: 0 0 0px #111;} 100% {opacity: 1; text-shadow: 0 0 0px #111; } } @-webkit-keyframes blur { 0% {text-shadow: 0 0 100px #111; opacity:0;} 5% {text-shadow: 0 0 90px #111;} 15% {opacity: 1;} 20% {text-shadow: 0 0 0px #111;} 80% {text-shadow: 0 0 0px #111;} 100% {opacity: 1; text-shadow: 0 0 0px #111; } }
<div class="section active"> <span>Il</span> <span>massaggio</span> <span>è</span> <span>l'unica</span> <span>forma</span> <span>di</span> <span>piacere</span> <span>fisico</span> <span>a</span> <span>cui</span> <span>la</span> <span>natura</span> <span>ha</span> <span>dimenticato</span> <div id="arrow-container"> <img src="images/social-35-white.svg" id="arrow-down" alt="" class="image-2"> </div> </div>
另外仅供参考,您还有一个额外的.
在线: 100%. {opacity: 1;}
100%. {opacity: 1;}
正如你所说,使用animation-fill-mode: forwards;
意味着元素将保留执行期间遇到的最后一个关键帧设置的计算值,这是任何其他用户的参考: 动画填充模式的 MDN 文档。
这应该工作
span { animation: blur 5s ease-out; animation-fill-mode: forwards; } span:nth-child(1) { opacity: 0; animation-delay: 0.1s; -webkit-animation-delay: 0.1s; } span:nth-child(2) { opacity: 0; animation-delay: 0.2s; -webkit-animation-delay: 0.2s; } span:nth-child(3) { opacity: 0; animation-delay: 0.3s; -webkit-animation-delay: 0.3s; } span:nth-child(4) { opacity: 0; animation-delay: 0.4s; -webkit-animation-delay: 0.4s; } span:nth-child(5) { opacity: 0; animation-delay: 0.5s; -webkit-animation-delay: 0.5s; } span:nth-child(6) { opacity: 0; animation-delay: 0.6s; -webkit-animation-delay: 0.6s; } span:nth-child(7) { opacity: 0; animation-delay: 0.7s; -webkit-animation-delay: 0.7s; } span:nth-child(8) { opacity: 0; animation-delay: 0.8s; -webkit-animation-delay: 0.8s; } span:nth-child(9) { opacity: 0; animation-delay: 0.9s; -webkit-animation-delay: 0.9s; } span:nth-child(10) { opacity: 0; animation-delay: 1.0s; -webkit-animation-delay: 1.0s; } span:nth-child(11) { opacity: 0; animation-delay: 1.1s; -webkit-animation-delay: 1.1s; } span:nth-child(12) { opacity: 0; animation-delay: 1.2s; -webkit-animation-delay: 1.2s; } span:nth-child(13) { opacity: 0; animation-delay: 1.3s; -webkit-animation-delay: 1.3s; } span:nth-child(14) { opacity: 0; animation-delay: 1.4s; -webkit-animation-delay: 1.4s; } @keyframes blur { 0% { color: transparent; text-shadow: 0 0 100px #111; } 50% { color: transparent; text-shadow: 0 0 90px } 100% { opacity: 1; color: transparent; text-shadow: 0 0 0px #111; } }
<div class="section active"> <span>Il</span> <span>massaggio</span> <span>è</span> <span>l'unica</span> <span>forma</span> <span>di</span> <span>piacere</span> <span>fisico</span> <span>a</span> <span>cui</span> <span>la</span> <span>natura</span> <span>ha</span> <span>dimenticato</span> <div id="arrow-container"> <img src="images/social-35-white.svg" id="arrow-down" alt="" class="image-2"> </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.