html - 如何使用scss函数或mxin生成关键帧动画
问题描述
我使用命名的关键帧动画,我想节省一些写作。我已经看到这个关于 scss 关键帧功能的 SO Question但我觉得它没有帮助(或者我愚蠢地理解)
我尝试了几种变体
$green: limegreen;
@mixin pulse-animation($name, $color) {
@keyframes #{$name} {
0% {
-moz-box-shadow: 0 0 0 0 rgba($color, 0.4);
box-shadow: 0 0 0 0 rgba($color, 0.4);
}
70% {
-moz-box-shadow: 0 0 0 12px rgba($color, 0);
box-shadow: 0 0 0 12px rgba($color, 0);
}
100% {
-moz-box-shadow: 0 0 0 0 rgba($color, 0);
box-shadow: 0 0 0 0 rgba($color, 0);
}
}
}
.my-element {
animation: @include pulse-animation("green", $green) 2s infinite;
}
我也希望不必将名称传递给这个 mixin。
解决方案
我在这里发现了一个有趣的情况,首先您使用关键帧 mixin 创建动画,然后使用另一个 mixin 来包含该动画(请参阅4. 动画和关键帧)。
但是,如果您不想包含 2 个 mixin,因为您想节省一些写作时间,另一个想法可能是使用简单的地图循环创建您需要的所有关键帧动画:
$colors:(
"green": limegreen,
"black": black,
"white": white /*here you can add all colors you need*/
);
@each $name, $color in $colors {
@keyframes #{$name} {
0% {
-moz-box-shadow: 0 0 0 0 rgba($color, 0.4);
box-shadow: 0 0 0 0 rgba($color, 0.4);
}
70% {
-moz-box-shadow: 0 0 0 12px rgba($color, 0);
box-shadow: 0 0 0 12px rgba($color, 0);
}
100% {
-moz-box-shadow: 0 0 0 0 rgba($color, 0);
box-shadow: 0 0 0 0 rgba($color, 0);
}
}
}
.my-element {
animation: green 2s infinite;
}
推荐阅读
- swift - 升级到 Catalina 后,Emacs 无法在 swift 模式下运行代码
- mysql - “使用索引”和复合索引:A=, B=, C<=
- excel - 将列值移动到下一行
- reactjs - axios.post 返回 400 React Native 的错误请求
- vue.js - 在 VueJs 中在 data() 和 created() 中声明对象有什么区别
- graphql - 运行 e2e 测试时在 cypress 中模拟特定的 graphql 请求
- vba - 如何从 ms 访问中调用 dll?
- python - 无法通过 PyPi Mac 安装软件包 - 连接错误:[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:598)
- javascript - Firefox - 无法安装附加组件,因为它似乎已损坏
- ios - 如何在 Swift 中使用谷歌地图在折线上添加视图或标签