2014-01-24 65 views
0

我想通過url('data ...')屬性在樣式表中加載不同顏色的圖像。所有圖像都嵌入在CSS文件中。唯一的區別是應該使用的填充顏色。這是我當前的代碼:更改樣式表中data-URL加載的SVG圖像的填充顏色

.icon.save { 
    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="%23666666" d="M397.944 258.597l0 22.9362c0,7.22714 -5.91315,13.1403 -13.1403,13.1403l-292.742 0c-7.22714,0 -13.1403,-5.91315 -13.1403,-13.1403l0 -22.9362 319.022 0zm-354.98 -209.156l395.673 0c3.31637,0 6.02912,2.65813 6.02912,5.90747l0 403.401c0,3.24863 -2.71346,5.90747 -6.02912,5.90747l-86.1661 0 0 -20.4653 9.24335 0 0 6.27915 68.7657 0 0 -386.843 -32.536 0 0 184.33 -319.022 0 0 -184.33 -27.8006 0 0 370.473 16.4964 16.3701 42.2982 0 6.30256 -6.27915 5.25633 0 0 14.7884 -5.69823 5.67695 -54.0028 0 -24.8386 -24.6481 0 -384.66c0,-3.24934 2.71275,-5.90747 6.02877,-5.90747zm299.498 419.709l-210.978 0 0 -127.463c0,-7.78962 6.37313,-14.1628 14.1624,-14.1628l182.654 0c7.78927,0 14.1624,6.37313 14.1624,14.1628l0 127.463zm-177.925 -133.337l54.4986 0 0 113.007 -54.4986 0 0 -113.007z"/></svg>'); 
} 

.icon.save:hover, .icon.save.bright { 
    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="white" d="M397.944 258.597l0 22.9362c0,7.22714 -5.91315,13.1403 -13.1403,13.1403l-292.742 0c-7.22714,0 -13.1403,-5.91315 -13.1403,-13.1403l0 -22.9362 319.022 0zm-354.98 -209.156l395.673 0c3.31637,0 6.02912,2.65813 6.02912,5.90747l0 403.401c0,3.24863 -2.71346,5.90747 -6.02912,5.90747l-86.1661 0 0 -20.4653 9.24335 0 0 6.27915 68.7657 0 0 -386.843 -32.536 0 0 184.33 -319.022 0 0 -184.33 -27.8006 0 0 370.473 16.4964 16.3701 42.2982 0 6.30256 -6.27915 5.25633 0 0 14.7884 -5.69823 5.67695 -54.0028 0 -24.8386 -24.6481 0 -384.66c0,-3.24934 2.71275,-5.90747 6.02877,-5.90747zm299.498 419.709l-210.978 0 0 -127.463c0,-7.78962 6.37313,-14.1628 14.1624,-14.1628l182.654 0c7.78927,0 14.1624,6.37313 14.1624,14.1628l0 127.463zm-177.925 -133.337l54.4986 0 0 113.007 -54.4986 0 0 -113.007z"/></svg>'); 
} 

正如你所看到的,唯一的區別是路徑的fill =「」屬性。有任何其他方式可以添加任何內嵌的css代碼嗎?

回答

0

我發現的唯一方法是使用小型(自寫)工具生成我的svgs,該工具將顏色轉換爲適合我的需求。但是沒有可以在運行時改變顏色的解決方案。所以每種顏色的尺寸都會增加一倍。但是,該工具增加了像cmap一樣生成像映像的功能。通常這是用於PNG圖標,這是安排在一個大圖片,以避免多個http請求。

0

我看到的唯一方法是通過JavaScript生成CSS,一旦插入fill="white"和一次fill="%23666666"。通過background-image<img>包含的圖像無法使用CSS進行樣式設置。

+0

應該如何通用的CSS被創建,支持通過的HTML標籤的類屬性使用輸出? – SuperNova

0

像這樣的東西應該工作:

var green = '3CB54A'; 
var red = 'ED1F24'; 
var svg = '<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="320px" height="100px" viewBox="0 0 320 100" enable-background="new 0 0 320 100" xml:space="preserve"> <polygon class="mystar" fill="#'+green+'" points="134.973,14.204 143.295,31.066 161.903,33.77 148.438,46.896 151.617,65.43 134.973,56.679 118.329,65.43 121.507,46.896 108.042,33.77 126.65,31.066 "/><circle class="mycircle" fill="#'+red+'" cx="202.028" cy="58.342" r="12.26"/></svg>';  
var encoded = window.btoa(svg); 
document.body.style.background = "url(data:image/svg+xml;base64,"+encoded+")"; 

Fiddle Here

+0

我看不到如何將此嵌入到CSS? – SuperNova

+0

@SuperNova如果將原始背景svg設置爲具有不同顏色的相同svg文檔,則會更新顏色。 –