2016-07-19 14 views
0

Ich baue eine Website, die sehr schwer auf Icons ist, also arbeite ich mit SVG-Symbolen, um die Duplizierung zu reduzieren. In einigen Fällen erfordert das Design, dass die Symbole einen Schlagschatten haben und nicht in anderen. Ich kämpfe um herauszufinden, wie ich einen Schlagschatten hinzufügen kann.Hinzufügen von Schlagschatten zu SVG-Symbolen

Beispiel meines SVG:

<svg id="icons-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 
... 
<symbol id="icon-communications" viewBox="1400 0 200 200"> 
    <title>Communications</title> 
    <rect style="fill: currentColor" x="1447.3" y="95.3" width="105.3" height="5.3"/> 
    <rect style="fill: currentColor" x="1447.3" y="78" width="105.3" height="5.3"/> 
    <polygon style="fill: currentColor" points="1463.2,127.9 1468,130.1 1475.7,113.6 1470.9,111.4 "/> 
    ... 
</symbol> 
... 
</svg> 

Ich schließe dann das Symbol auf Seite mit dem Standard:

<svg class="icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <use xlink:href="#icon-communications"/> 
</svg> 

Ich kann dann legen Sie die Farbe des Symbols wie folgt aus:

.icon-svg use { 
    color: blue; 
} 
.error .icon-svg use { 
    color: red; 
} 

Aber ich kann nicht herausfinden, wie man einen Schlagschatten hinzufügt. Ich habe CSS box-shadow ausprobiert, und auch filter: drop-shadow(), aber beide scheinen nichts zu tun. z.B.

.someClass .icon-svg use { 
    color: #fff; 
    -webkit-filter: drop-shadow(0 0 20px #000); 
    filter: drop-shadow(0 0 20px #000); 
} 

Jede Hilfe wäre willkommen.

+0

Ja ... Ich glaube nicht, * * Sie, dass mit einem '' tun kann nur ein Inline-SVG. - http://stackoverflow.com/questions/6088409/svg-drop-shadow-using-css3?rq=1 –

+0

Alternativ wäre es möglich, es mit dem SVG einzuschließen und es mit CSS auszuschalten, oder würde das haben genau die gleiche Einschränkung? – chrism

+0

Ich denke, es würde die gleichen Probleme haben. Ich nehme nur an, dass ich hier gelesen habe. Das Erreichen von * in * a '' und das Anwenden von CSS auf (effektiv) * Teile 'ist schwierig, wenn nicht unmöglich. Ich warte auf einige SVG-Experten, die mitkommen. Wenn @RobertLongson kommentiert..nehme es als Evangelium. –

Antwort

0

eine SVG-Filter verwenden:

.icon-svg use { 
 
    color: blue; 
 
} 
 
.error .icon-svg use { 
 
    color: red; 
 
} 
 

 
.icon-svg { 
 
    -webkit-filter: url(#dropshadowy); 
 
}
<svg id="icons-svg" > 
 
    <defs> 
 
<filter id="dropshadowy"> 
 
    <feGaussianBlur in="SourceAlpha" stdDeviation="4"/> 
 
    <feMerge> 
 
    <feMergeNode/> 
 
    <feMergeNode in="SourceGraphic"/> 
 
    </feMerge> 
 
</filter> 
 
    
 
<symbol id="icon-communications" viewBox="1400 0 200 200"> 
 
    <title>Communications</title> 
 

 
    <rect style="fill: currentColor" x="1447.3" y="95.3" width="105.3" height="5.3"/> 
 
    <rect style="fill: currentColor" x="1447.3" y="78" width="105.3" height="5.3"/> 
 
    <polygon style="fill: currentColor" points="1463.2,127.9 1468,130.1 1475.7,113.6 1470.9,111.4 "/> 
 

 
</symbol> 
 
    </defs> 
 

 
</svg> 
 

 

 
<svg class="icon-svg" > 
 
    
 
    <use xlink:href="#icon-communications"/> 
 

 
</svg>

+0

Funktioniert bei mir nicht in FF 47.0.1 oder Edge 14.14393. Ja, in Chrome. Ich kann nicht herausfinden, warum der ursprüngliche Code nicht funktioniert - ich habe das gleiche auf meiner Website [http://potoococha.net/][1] und es funktioniert in allen Browsern. Ich würde vorschlagen, alle Ihre Tags zu schließen, verwenden Sie, rect und Polygon möglicherweise nicht "selbstschließend". Und Sie sollten nicht den Namen des Verwendungselements in Ihrem CSS verwenden müssen - nur die Klassennamen sind genug. [1]: http://potoococha.net/ – Mark

+0

Ja, ich habe die Cross-Browser-Polyfills nicht geschrieben –