CSS关键帧动画在Vue里为什么不生效?
我在Vue组件里写了个简单的淡入动画,但页面上完全没反应,控制台也没报错。关键帧定义和animation属性都写了,是不是哪里写错了?
我试过把keyframes放在里面,也试过移到全局样式,都不行。元素本身是能正常渲染的,就是动画没效果。
<template>
<div class="fade-in">Hello Animation</div>
</template>
<style scoped>
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.fade-in {
animation: fadeIn 2s ease-in-out;
}
</style>
scoped会在CSS选择器后面加个data属性,比如编译后变成
.fade-in[data-v-xxxxx]。但@keyframes的名字是写在animation属性值里的字符串,Vue不会自动处理它,所以keyframes定义变成了@keyframes fadeIn[data-v-xxxxx],而你引用的还是fadeIn,两边对不上,动画自然不生效。解决办法很简单,把keyframes放到非scoped的区域:
或者如果你想保持scoped,可以用深度选择器:
第一种方法最省事,复制过去改一下就行。