在 SCSS 中使用@each 缩短@keyframe 前缀混合
Using @each to shorten @keyframe prefixes mixing in SCSS
我正在尝试使用 mixin 自动为@keyframes 添加前缀
@mixin keyframePrefix($name) {
@-webkit-keyframes #{$name} {
@content;
}
@-moz-keyframes #{$name} {
@content;
}
@-o-keyframes #{$name} {
@content;
}
@keyframes #{$name} {
@content;
}
这在技术上可行,但它很大。我有一个用于单个属性的前缀混合器,它使用 @each 语句使它更紧凑:
$prefixes: ("-moz-", "-webkit-", "-o-", "");
@mixin prefix($property, $value) {
@each $prefix in $prefixes {
#{$prefix + $property}: $value;
}
}
但是,我的问题是@-prefix-keyframes 上的字符串插值。好像不想让我直接在里面加个@:
@mixin keyframePrefix($name) {
@each $prefix in $prefixes {
@#{$prefix}keyframes #{$name} {
@content;
}
}
}
所以我的问题是:如何转义 @ 符号?我尝试了很多嵌套插值和字符串的组合等等,但似乎没有任何效果。添加一个反斜杠,使 \@#{$prefix}keyframes #{$name}
行是我得到的最接近的行,并且它编译为 \@-moz-keyframes prompt 50%
。
不允许在 name 的指令中插入。你可以找到这个 issue 打开。解决之前一定要用大号的
@mixin keyframes($name) {
@-webkit-keyframes #{$name} {
@content;
}
@-moz-keyframes #{$name} {
@content;
}
@-o-keyframes #{$name} {
@content;
}
@keyframes #{$name} {
@content;
}
}
顺便说一句,你错过了最后的 }
。
我正在尝试使用 mixin 自动为@keyframes 添加前缀
@mixin keyframePrefix($name) {
@-webkit-keyframes #{$name} {
@content;
}
@-moz-keyframes #{$name} {
@content;
}
@-o-keyframes #{$name} {
@content;
}
@keyframes #{$name} {
@content;
}
这在技术上可行,但它很大。我有一个用于单个属性的前缀混合器,它使用 @each 语句使它更紧凑:
$prefixes: ("-moz-", "-webkit-", "-o-", "");
@mixin prefix($property, $value) {
@each $prefix in $prefixes {
#{$prefix + $property}: $value;
}
}
但是,我的问题是@-prefix-keyframes 上的字符串插值。好像不想让我直接在里面加个@:
@mixin keyframePrefix($name) {
@each $prefix in $prefixes {
@#{$prefix}keyframes #{$name} {
@content;
}
}
}
所以我的问题是:如何转义 @ 符号?我尝试了很多嵌套插值和字符串的组合等等,但似乎没有任何效果。添加一个反斜杠,使 \@#{$prefix}keyframes #{$name}
行是我得到的最接近的行,并且它编译为 \@-moz-keyframes prompt 50%
。
不允许在 name 的指令中插入。你可以找到这个 issue 打开。解决之前一定要用大号的
@mixin keyframes($name) {
@-webkit-keyframes #{$name} {
@content;
}
@-moz-keyframes #{$name} {
@content;
}
@-o-keyframes #{$name} {
@content;
}
@keyframes #{$name} {
@content;
}
}
顺便说一句,你错过了最后的 }
。