2013-03-26 53 views
5

我使用最新的SASS/Compass版本來開發CSS。我已經聲明在開始時有些SASS變量「媒體=所有」樣式表是這樣的:打印樣式表中的Sass變量覆蓋「全部」樣式表中的變量

$var1: red; 
$var2: blue; 
$var3: black; 
$var4: green; 

在此SCSS文件導入我的打印樣式表(@import「print.scss」;),後來它看起來像這樣:

@media print { 
    $var1: black; 
    $var2: black; 
    $var4:black; 
} 

我想,這在打印樣式表中的變量覆蓋「正常」瓦爾只有如果瀏覽器中的「打印模式」。但變量確實覆蓋了總是之前聲明的「正常」變量。

我有點困惑,並感謝任何幫助。

謝謝!

回答

2

根據this的問題,目前的形式基本上是不可能的。如果要實現這一點,你就必須導入,使你的$varX的使用,就像每一種風格:

$blue: blue; 

.test{ 
    color: $blue; 
} 

@media print { 
    $blue: pink; 
    .test{ 
     color: $blue; 
    } 
} 

輸出:

.test{color:blue}@media print{.test{color:pink}} 

這不是理想的解決方案(你會得到很多重複的代碼),但不幸的是,由於CSS的工作方式,你可以完成所有工作。

這可能是一個稍微好一點的解決方案:

$blue: blue; 
$print_blue: pink; 

.test{ 
    color: $blue; 
    text-align: right; 
    @media print { 
     color: $print_blue; 
    } 
} 

輸出:

.test{color:blue;text-align:right}@media print{.test{color:pink}} 
+0

謝謝您的回答!我擔心我必須這樣做:-(也許這個功能可能適用於下一個SASS版本... – captainh2ok 2013-03-26 09:37:51

+1

@ captainh2ok這不能成爲下一個版本的一個功能,因爲服務器端的SASS編譯器無法知道哪個狀態瀏覽器將會進入。你需要將css的編譯移動到客戶端,比如LESS使用它的less.js. – Christoph 2013-03-26 10:04:27

+1

@Christoph你肯定是對的,SASS編譯器不像「人工智能」。我有時候也是這樣 – captainh2ok 2013-03-26 11:08:22