2012-12-28 42 views
6
上@keyframes前綴

我想通過生成自己的前綴版採用了薩斯循環像這樣要解決Bourbon不支持@keyframe插值在薩斯

$list: '' -ms- -webkit- -moz- -o- 
$at: @ //at sign 
@each $prefix in $list 

    #{$at}#{$prefix}keyframes moveclouds 
    from 
     #{$prefix}transform: translateX(2400px) 
    to 
     #{$prefix}transform: translateX(-400px) 

,並期待生成CSS:

@keyframes moveclouds from { 
    transform: translateX(2400px); 
} 
@keyframes moveclouds to { 
    transform: translateX(-400px); 
} 

@-moz-keyframes moveclouds from { 
    -moz-transform: translateX(2400px); 
} 
@-moz-keyframes moveclouds to { 
    -moz-transform: translateX(-400px); 
} 
.... 

的問題是,我無法弄清楚如何強制薩斯輸出@(at符號)中的行開始

如果我做

$at: @ // wont work, error 
$at: \@ // will generate \@keyframes = not good 
$at: "\@" // wont work error 
$at: @@ // will generate @@keyframes = not good 

所以任何人都有一個想法如何輸出在簽署薩斯?

+0

錯誤是否有消息? –

+0

看起來這個現在已經被修復了。我遇到了同樣的問題,但更新到3.4.13,錯誤消失了。 – Godwin

回答

5

這簡直不可能使用可變插值。你可以避開@分配是這樣的:

$at: unquote("@"); // either of these will work 
$amp: #{"@"}; 

但隨後你結束了這個錯誤:

error sass/test.scss (Line 4: Invalid CSS after "": expected selector_comma_sequence, was "@-ms-keyframes ...")

目前不支持@keyframes插值,但將在未來。你可以track the progress of that on GitHub。同時,您必須親自寫出關鍵幀信息。一個簡單的例子是這樣的:

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

    @keyframes #{$name} { 
     @content; 
    } 
} 

用法:

@include keyframes(foo) { 
    0% { 
     color: red; 
    } 

    100% { 
     color: blue; 
    } 
} 

一個更復雜的例子可以在Eric Meyer's Sass Animation library找到。

+0

thx無論如何嘗試,我不知道在Sass中存在的unquote函數:) ...嘗試它,因爲你建議,像你說的那樣炸燬它。我自己使用了手動編寫的關鍵幀前綴,但事實上它不能寫得「更漂亮」是令我煩惱的事情(並且可能讓我今晚保持清醒) – equivalent8

+1

我在一年前遇到過有關Google小組的討論動畫,暗示對它有更好的支持。我猜他們的解決方案是'@ content'指令。看到https://groups.google.com/forum/?fromgroups=#!topic/sass-lang/MfPZyWRRPZk – cimmanon

+0

不幸的是,Cimmanon是對的,這是不可能的:(......這就像一個孩子令人失望的時候,他看到他的女孩穿着超級英雄:) – equivalent8