2016-07-19 9 views
0

私はアイコンに非常に重いウェブサイトを構築していますので、重複を減らすためにSVGシンボルを使って作業しています。デザインによっては、シンボルにドロップシャドウが必要な場合があります。私はドロップシャドーをどのように追加できるかを理解するのに苦労しています。私のSVGの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> 

私はその後、標準を使用して、ページ上のアイコンを含める:

<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> 

私は、このようなアイコンの色を設定することができます。

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

しかし、私はドロップシャドーを追加する方法を理解できません。私は、CSSのボックスシャドウを試して、フィルタ:ドロップシャドウ()も、どちらも何もしていないようです。例えば

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

助けてください。

+0

うん...私は* *あなたが '' のみインラインSVGであることを行うことができるとは思いません。 - http://stackoverflow.com/questions/6088409/svg-drop-shadow-using-css3?rq=1 –

+0

また、それをSVGに含めることができ、CSSを使用してスイッチを切り替えることも可能です全く同じ制限? – chrism

+0

私は同じ問題があると思う。私はちょうど私のここの読書から仮定しています。不可能ではないにしても、「」に到達し、(効果的に)*部品にCSSを適用することは困難です。 SVGの専門家たちが来るのを待っています。もし@RobertLongsonがコメントしたら、それを福音として取る。 –

答えて

0

は、SVGフィルターを使用します。

.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

FF 47.0.1またはEdge 14.14393では私のために機能しません。はい、Chromeで 元のコードがうまくいかない理由を理解できません - 私は自分のWebサイト[http://potoococha.net/] 1:1で同じことをやっており、すべてのブラウザで動作します。私はすべてのあなたのタグを閉じることをお勧めします、rect、polygonは "自己閉鎖"ではないかもしれません。そして、あなたのCSSでuse要素名を使う必要はありません。クラス名だけで十分です。 [1]:http://potoococha.net/ – Mark

+0

はい私はクロスブラウザのpolyfillsを書いていませんでした –

関連する問題