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


定義動畫用@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; }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM