【发布时间】:2019-09-10 15:16:18
【问题描述】:
我想知道是否可以在 sass 中调用动画混合内的 css 变量来获得基于动态动画颜色的效果。
我在 Sass 中尝试了很多关于插值的方法,但从未成功。没有动态颜色的 mixin 版本可以工作,但不能使用动态 css 变量。
所以我想知道这是否可能以及如何实现?
我正在使用 node-sass(版本:1.22.9)。
查看
<ion-button class="pulse pulse-danger"></ion-button>
SCSS
# Var
--ion-color-primary: #FFFFFF;
--ion-color-danger: #000000;
/**
* Pulse Animation
*/
@mixin animation-pulse($duration, $color-name) {
$name: animation-pulse-#{$color-name};
@keyframes #{$name} {
0% {
-moz-box-shadow: 0 0 0 0 #{"rgba(--ion-color-#{$color-name}, 0.4)"};
box-shadow: 0 0 0 0 #{"rgba(--ion-color-#{$color-name}, 0.4)"};
}
70% {
-moz-box-shadow: 0 0 0 10px #{"rgba(--ion-color-#{$color-name}, 0)"};
box-shadow: 0 0 0 10px #{"rgba(--ion-color-#{$color-name}, 0)"};
}
100% {
-moz-box-shadow: 0 0 0 0 #{"rgba(--ion-color-#{$color-name}, 0)"};
box-shadow: 0 0 0 0 #{"rgba(--ion-color-#{$color-name}, 0)"};
}
}
@-webkit-keyframes #{$name} {
0% {
-webkit-box-shadow: 0 0 0 0 #{"rgba(--ion-color-#{$color-name}, 0.4)"};
}
70% {
-webkit-box-shadow: 0 0 0 10px #{"rgba(--ion-color-#{$color-name}, 0)"};
}
100% {
-webkit-box-shadow: 0 0 0 0 #{"rgba(--ion-color-#{$color-name}, 0)"};
}
}
animation-name: $name;
animation-duration: $duration;
animation-iteration-count: infinite;
}
.pulse {
&:hover {
animation: none;
}
&.pulse-primary {
background: var(--ion-color-primary);
box-shadow: 0 0 0 rgba(var(--ion-color-primary), 0.4);
@include animation-pulse(2s, primary);
}
&.pulse-danger {
background: var(--ion-color-danger);
box-shadow: 0 0 0 rgba(var(--ion-color-danger), 0.4);
@include animation-pulse(2s, danger);
}
}
实际结果未显示脉冲动画可能是由于未在 mixin 中正确设置 css var。
如果我在混合动画中用静态值替换脉冲颜色,则脉冲动画正在工作。
【问题讨论】: