2011-02-05 14 views
92

<svg>タグを使用してSVGをドキュメントに直接含める場合、ドキュメントのスタイルシートを使用してCSSスタイルをSVGに適用できます。しかし、埋め込まれたSVGにスタイルを適用しようとしています(<object>タグを使用しています)。埋め込みSVGにスタイルを適用するには?

次のようなコードを使用することはできますか?

object svg { 
    fill: #fff; 
} 
+1

私は何をしようとするために素晴らしい仕事と思われるこれを行うための軽量な方法を思い付きました。このQ&Aをご覧ください: http://stackoverflow.com/questions/11978995/how-to-change-color-of-svg-image-using-css-jquery-svg-image-replacement/ –

答えて

98

簡単な答え:スタイルはドキュメントの境界を超えて適用されないため、答えはありません。

ただし、<object>タグがあるので、スクリプトを使用してスタイルシートをsvgドキュメントに挿入できます。

このような何か、そしてこのコードは<object>が完全にロードされていることを前提としています:

var svgDoc = yourObjectElement.contentDocument; 
var styleElement = svgDoc.createElementNS("http://www.w3.org/2000/svg", "style"); 
styleElement.textContent = "svg { fill: #fff }"; // add whatever you need here 
svgDoc.getElementById("where-to-insert").appendChild(styleElement); 

それは外部スタイルシート参照するために<link>要素を挿入することも可能です:まだ

var svgDoc = yourObjectElement.contentDocument; 
var linkElm = svgDoc.createElementNS("http://www.w3.org/1999/xhtml", "link"); 
linkElm.setAttribute("href", "my-style.css"); 
linkElm.setAttribute("type", "text/css"); 
linkElm.setAttribute("rel", "stylesheet"); 
svgDoc.getElementById("where-to-insert").appendChild(linkElm); 

を別のオプションは、最初のメソッドを使用してスタイル要素を挿入し、次に@importルール、たとえばstyleElement.textContent = "@import url(my-style.css)"を追加することです。

もちろん、スクリプトを実行せずに、svgファイルから直接スタイルシートにリンクすることもできます。以下のいずれかの作業をする必要があります:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet href="my-style.css" type="text/css"?> 
<svg xmlns="http://www.w3.org/2000/svg"> 
    ... rest of document here ... 
</svg> 

か:

<svg xmlns="http://www.w3.org/2000/svg"> 
    <defs> 
    <link href="my-style.css" type="text/css" rel="stylesheet" 
      xmlns="http://www.w3.org/1999/xhtml"/> 
    </defs> 
    ... rest of document here ... 
</svg> 

を更新2015:埋め込まれたSVGにjsのスクリプトやCSSスタイルを適用するために、あなたがjquery-svgプラグインを使用することができます。

+0

これはリンクする方法ですか外部スタイルシート?そうでない場合、それは可能ですか? –

+0

上記はスタイル要素をsvgに挿入します。はい、外部のスタイルシート、またはおそらくXMLスタイルシート処理命令(http://www.w3.org/Style/styling-XML.html参照)にリンクするためにxhtmlリンク要素を挿入することも可能です。 –

+0

これはかなり素晴らしいエリックです!しかし、私はsvgwebを含まなくてもこのトリックをChromeで動作させることはできませんでした:http://code.google.com/p/svgweb/ ...私の考え方は間違っていますか? –

5

SVGファイル自体にスタイルを含むスタイルブロックを置くことで、javsscrptを使用せずにこれを行うことができます。

<style type="text/css"> 
path, 
circle, 
polygon { 
    fill: #fff; 
    } 
</style> 
関連する問題