CSS Animation无法实现元素宽度动画效果问题求助
解决CSS宽度动画laserAnimation失效的问题
我仔细检查了你的代码,立刻找到了问题的根源——你在laserAnimation的关键帧里使用了!important声明,这是CSS规范明确禁止的写法,浏览器会直接判定这段关键帧语法无效,导致整个动画无法运行。
问题原因详解
CSS动画的@keyframes规则中,属性值不能附加!important修饰符。浏览器解析到这类代码时,会忽略整个关键帧的定义,这就是为什么你的浏览器检查工具会提示无效语法。而你的另外两个动画seaMove和obstMove没有使用!important,所以能正常工作。
修复方案
只需要移除关键帧里的!important,同时可以根据情况调整.laser类的初始样式:
- 修改激光动画的关键帧
/* 修复后的激光动画 */ @keyframes laserAnimation { from { width: 0%; } to { width: 45vw; } }
- 调整.laser类的初始宽度(可选)
如果没有其他更高优先级的样式强制覆盖.laser的宽度,建议去掉初始样式里的!important,让代码更简洁:
.laser { position: absolute; transform: rotateZ(189deg); left: 282px; width: 0%; /* 移除!important */ animation: laserAnimation infinite 3s; }
如果确实有其他样式用!important强制设置了.laser的宽度,也不用担心——CSS动画的属性值优先级高于普通的!important声明,只要关键帧里不写!important,动画依然能正常覆盖初始样式。
验证效果
修改完成后,刷新页面,laserAnimation应该就能正常从0%宽度平滑过渡到45vw宽度了,浏览器也不会再提示无效语法。
内容的提问来源于stack exchange,提问作者user15052429
相关产品推荐
相关产品推荐

