定義動畫用@keyframes,為了保證兼容性,一般在sass中會寫成
@mixin keyframes($a) {
@-webkit-keyframes $a {
@content;
}
@-moz-keyframes $a {
@content;
}
@keyframes $a {
@content;
}
}
調用方法:
@include keyframes(appear) {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
在ruby老版本的sass解釋器中,上述調用方法是可以正確編譯的,但在ruby2.2中編譯后結果卻是錯誤的:
@-webkit-keyframes $a {
0% {
opacity: 0; }
100% {
opacity: 1; }
}
@-moz-keyframes $a {
0% {
opacity: 0;}
100% {
opacity: 1;}
}
@keyframes $a {
0% {
opacity: 0;}
100% {
opacity: 1; }
}
原因是新版本的ruby的sass編譯器認為@keyframes聲明的名稱不應該是一個變量,整個聲明應該是一個字符串,例如@keyframes appear {......}
所以用sass中拼接字符串的方法,修改為
@mixin keyframes($a) {
@-webkit-keyframes #{$a} {
@content;
}
@-moz-keyframes #{$a} {
@content;
}
@keyframes #{$a} {
@content;
}
}
正確編譯的結果為
//調用
@include keyframes(appear) {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
//編譯結果
@-webkit-keyframes appear {
0% {
opacity: 0; }
100% {
opacity: 1; }
}
@-moz-keyframes appear {
0% {
opacity: 0;}
100% {
opacity: 1;}
}
@keyframes appear {
0% {
opacity: 0;}
100% {
opacity: 1; }
}
