我正在使用包含許多SVG藝術作品的界面,這些界面包含在Adobe Illustrator中創建的。這些SVG的顏色可由用戶自定義,並且所有的作品原來都使用相同的顏色。這個想法是,一旦用戶改變了每種顏色,它就會反映在所有的SVG藝術作品中。SVG用類聲明替換填充聲明以進行顏色自定義
現在,我有這個工作正常的功能。我首先使用LESS在我的CSS中生成所有顏色陰影,並將它們分配給類。
像這樣
@color3-base: #FF0000;
@color3-shade1: mix(@color3-base, @color2-base, 90%);
@color3-shade2: mix(@color3-base, @color2-base, 80%);
@color3-shade3: mix(@color3-base, @color2-base, 70%);
@color3-shade4: mix(@color3-base, @color2-base, 60%);
@color3-shade5: mix(@color3-base, @color2-base, 50%);
@color3-shade6: mix(@color3-base, @color2-base, 40%);
@color3-shade7: mix(@color3-base, @color2-base, 30%);
@color3-shade8: mix(@color3-base, @color2-base, 20%);
這
.color3-base-fill {fill: @color3-base;}
.color3-shade1-fill {fill: @color3-shade1;}
.color3-shade2-fill {fill: @color3-shade2;}
.color3-shade3-fill {fill: @color3-shade3;}
.color3-shade4-fill {fill: @color3-shade4;}
.color3-shade5-fill {fill: @color3-shade5;}
.color3-shade6-fill {fill: @color3-shade6;}
.color3-shade7-fill {fill: @color3-shade7;}
.color3-shade8-fill {fill: @color3-shade8;}
我使用less.js方法less.modifyVars
來更新我的基色值,喜歡的顏色@color3-base
。對每種顏色的任何更改都會導致整個SVG藝術品使用的所有顏色的不同陰影。所有的顏色生成完美,沒有問題。
我使用solution provided here將所有SVG內聯加載,以便它們成爲我的DOM的一部分,並且可以從我的LESS CSS中發生的所有顏色變化中生效。
現在,在這些加載的SVG中,我手動進去了,用類語句替換了填充語句。像fill="#FF0000"
與class="color3-base-fill"
(或屬於我替換的特定填充色的類),以便它從類中檢索填充值,並且始終可以通過LESS發生的顏色變化產生影響。因爲我們所有的作品都使用相同的顏色,現在他們的填充語句被人工替換爲與這些顏色相對應的類,這很有用。使用less.modifyVars
對每種顏色的更改反映了所有藝術品上的所有顏色。
問題是我們有大量的SVG圖形文件,我必須用相應的陰影類來手動替換SVG中的每一條填充語句。這爲很多人爲錯誤打開了餘量,這似乎是應該自動化的東西。
我最理想的是能夠在SVG加載時自動完成這些替換。這將使我們在Adobe Illustrator中製作的任何藝術作品在加載時立即可定製。我嘗試了不同的方式將我的SVG首先轉換爲字符串,以便我可以將填充聲明替換爲類聲明,但是我沒有成功。看起來SVG既不是XML也不是HTML,它很難序列化。我的知識在這一點上是有限的,所以在解決上述問題上的任何幫助都會很棒!
謝謝!
這似乎是正確的解決方案,但我無法使其正常工作。由於我正在使用的工具目前只是所有客戶端,所以XSLT轉換對我來說不起作用。我確信一旦涉及服務器,這可以很好地工作。 – alik