これは私が思いついた便利なコードについての自己 Q&A です。
現在、SVG イメージを埋め込み、CSS 経由で SVG 要素にアクセスする簡単な方法はありません。JS SVG フレームワークを使用する方法はさまざまですが、ロールオーバー状態の単純なアイコンを作成するだけの場合は複雑すぎます。
そこで私が思いついたのが、Web サイトで SVG ファイルを使用する最も簡単な方法だと思います。これは、初期のテキストから画像への置換方法の概念を取り入れていますが、私の知る限り、SVG ではこれまで一度も実行されたことはありません。
質問は次のとおりです:
JS-SVG フレームワークを使用せずに、CSS で SVG を埋め込み、その色を変更するにはどうすればよいですか?
ベストアンサー1
まず、HTML で IMG タグを使用して SVG グラフィックを埋め込みます。私は Adobe Illustrator を使用してグラフィックを作成しました。
<img id="facebook-logo" class="svg social-link" src="/images/logo-facebook.svg"/>
これは通常の画像を埋め込む方法とまったく同じです。IMG を svg クラスに設定する必要があることに注意してください。'social-link' クラスは単なる例です。ID は必須ではありませんが、便利です。
次に、この jQuery コードを使用します (別のファイル内または HEAD 内のインライン)。
/**
* Replace all SVG images with inline SVG
*/
jQuery('img.svg').each(function(){
var $img = jQuery(this);
var imgID = $img.attr('id');
var imgClass = $img.attr('class');
var imgURL = $img.attr('src');
jQuery.get(imgURL, function(data) {
// Get the SVG tag, ignore the rest
var $svg = jQuery(data).find('svg');
// Add replaced image's ID to the new SVG
if(typeof imgID !== 'undefined') {
$svg = $svg.attr('id', imgID);
}
// Add replaced image's classes to the new SVG
if(typeof imgClass !== 'undefined') {
$svg = $svg.attr('class', imgClass+' replaced-svg');
}
// Remove any invalid XML tags as per http://validator.w3.org
$svg = $svg.removeAttr('xmlns:a');
// Replace image with new SVG
$img.replaceWith($svg);
}, 'xml');
});
上記のコードは、クラス 'svg' を持つすべての IMG を検索し、リンクされたファイルのインライン SVG に置き換えます。大きな利点は、次のように CSS を使用して SVG の色を変更できることです。
svg:hover path {
fill: red;
}
私が書いた jQuery コードも、元の画像の ID とクラスに移植されます。したがって、この CSS も機能します。
#facebook-logo:hover path {
fill: red;
}
または:
.social-link:hover path {
fill: red;
}
ここで動作例を見ることができます:http://labs.funkhausdesign.com/examples/img-svg/img-to-svg.html
キャッシュを含むより複雑なバージョンを次に示します。https://github.com/funkhaus/style-guide/blob/master/template/js/site.js#L32-L90