2012-05-17 63 views
1

我有一個返回一個可愛的SVG梯度在IE中使用的服務,我試圖用這樣一個不太混入使用 -沒有#號的情況下,我如何在LESS中獲得顏色?

.Gradient(@start, @stop) { 
    background-image: url("/imageService/[email protected]{start}&[email protected]{stop}"); 
} 

的問題是,這些顏色以#開頭,這會截斷服務器接收的URL。

我需要一種獲得沒有#的顏色的方法。我不介意它的RGB值,還是不帶前綴的十六進制值。

我曾試圖通過URL使用javascript調用這樣

background-image: url(`"/shop/image/[email protected]{start}&[email protected]{stop}".replace("#","%23")`); 

編碼#我認爲這將只是我的較少的處理在服務器上發生的事情很成功,而且無法評估JavaScript完成這種方式。

任何想法,我可以提取顏色的方式,將在URL中工作?我在服務的工作方式上很靈活。

回答

2

這是我想出的解決方案。我使用顏色功能來應用一點透明度。這確保了我總是以RGBA顏色結束,而不是以#開始。

.Gradient(@start, @stop) { 
    @startRgb: fadeout(@start,1%); 
    @stopRgb: fadeout(@stop,1%); 
    background-image: url("/ImageService/[email protected]{startRgb}&[email protected]{stopRgb}"); 

網址現在總是包含顏色的rgba符號,我的服務很開心。

0

你可以通過字符串而不是顏色的顏色?所以,當你打電話給你的mixin,它剛剛這個樣子?:

.Gradient("000000", "FFFFFF"); 

如果您需要在別處定義顏色這些顏色,你可以嘗試使用反引號解析值出在Javascript。所以它會是這樣的:

@noHash: ~`"@{start}".substring(1)`; 

雖然,我不知道如何將這些顏色值看起來時,將它們傳遞給JS。它們可能是一個顏色對象,並且需要轉換爲字符串。我想我要嘗試一些時間......

+0

謝謝。劇本的東西會起作用。在我的例子中,我用%23代替了#,這樣它就不會把rgba顏色弄糊塗,而不是以#開始。 – GeekyMonkey

1

如果你不介意爲每個顏色兩個變量,你可以使用color函數將字符串轉換:

@myColorString: "FFD700"; 
@myColor: color("#@{myColorString}"); 

使用你需要的變量。

color: @myColor; 
background-image: url("/[email protected]{myColorString}"); 
+0

謝謝,但這是一個通用的漸變mixin。我希望靈活性能夠傳遞任何類型的顏色,甚至是RGBA。 – GeekyMonkey

相關問題