sass中@keyframes後變量無效的問題

定義動畫用@keyframes,爲了保證兼容性,通常在sass中會寫成javascript

@mixin keyframes($a) {
  @-webkit-keyframes $a {
    @content;
  }
  @-moz-keyframes $a {
    @content;
  }
  @keyframes $a {
    @content;
  }
}

調用方法:java

@include keyframes(appear) {
    0% {
        opacity: 0;
    }    
    100% {
        opacity: 1;
    }
}    

在ruby老版本的sass解釋器中,上述調用方法是能夠正確編譯的,但在ruby2.2中編譯後結果倒是錯誤的:  web

@-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

因此用sass中拼接字符串的方法,修改成ruby

@mixin keyframes($a) {
  @-webkit-keyframes #{$a} {
    @content;
  }
  @-moz-keyframes #{$a} {
    @content;
  }
  @keyframes #{$a} {
    @content;
  }
}

正確編譯的結果爲app

//調用
@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; }
}
相關文章
相關標籤/搜索