2015-05-07 66 views
2

我目前在Go-c6中實現了一個SASS編譯器,並且在編寫表達式解析器和評估器時發現了Ruby SASS編譯器的一些奇怪行爲。SASS:表達式還是純CSS斜線?

的SASS參考提到的普通CSS '/' 和SASS除法表達這裏: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#division-and-slash

設計是使SASS與天然CSS語法這樣兼容:

font: 10px/8px;    // Plain CSS, no division. looks fine. 
font: 10px/8px + 3px;  // Expression 
font: (10px/8px);   // Expression 

上面看起來不錯,但如果你寫:

.foo { 
    $a: 10px/8px; 
    font: $a; 
} 

而且上面會被編譯爲:

.foo { 
    font: 1.25; } 

在以下SASS正常表達將總是表達而不括號:

.foo { 
    padding: 2px+2px; 
    padding: 2px*3; 
} 

輸出:

.foo { 
    padding: 4px; 
    padding: 6px; } 

然而以下SASS產生不同的結果:

.foo { 
    padding: 2px-1px; 
    padding: 2px - 1px; 
} 

而上述將會被編譯爲:

.foo { 
    padding: 2px-1px; // treated as ident instead of expression 
    padding: 1px; } 

似乎除法運算符是屬性值的唯一例外,這使得語法不一致和不明確。 (實際上有那麼多曖昧文法在SASS規範...)

因此,這裏的問題:

  1. 我怎樣才能讓表達式語法一致,避免純CSS'之間的隱式行爲/'和除法運算符? (如果我們不考慮SASS的兼容性)

  2. 你會怎麼做?

謝謝

+0

堆棧溢出是爲了解決技術問題。 「我不知道我應該用什麼語法來表達我的想象語言」並不算是一個技術問題,這是一個純粹的臆測問題。 – cimmanon

+1

可能對程序員更好.se – Eric

+1

@cimmanon:這裏沒有虛構的語言。 OP正在實施一個Sass編譯器,並詢問如何處理特定的邊界情況。看起來,答案是沒有一致的方式來這樣做。 – BoltClock

回答

0

這是一個已知的語法歧義。 Some workarounds之前已在SASS github page上進行了討論。但是從那裏我再也沒有提出任何更好的建議:(

我該怎麼辦?它不是特別適合StackOverflow,但讓我拿font: 10px/8px的例子,你給了你一個變量,所以我使用假設您打算多次使用它的樣式值。本身的價值(10px/8px)似乎相當明確用於與font使用,所以我會採取一個稍微不同的方式,並使用%silent-class

%font { 
    font: 10px/8px; 
} 

.foo { 
    @extend %font; 
    // more styling here 
} 
.bar { 
    @extend %font; 
    // etc 
} 

這正確編譯,SANS師:

.foo { 
    font: 10px/8px; 
} 
.bar { 
    font: 10px/8px; 
} 

至於padding的例子,我認爲這只是很差的一致性。希望他們能在不久的將來糾正這一情況。如果還沒有完成,如果你對此感到強烈,那麼對你來說這不是一個壞主意,看看他們說了些什麼。

相關問題