[解決済み] CSSを使用してSVG画像の色を変更する方法(jQuery SVG image replacement)とは?
質問
これは、私が思いついた便利なコードの自己Q&Aです。
現在、SVG画像を埋め込んで、CSSでSVG要素にアクセスする簡単な方法はありません。JS SVGフレームワークを利用する方法もありますが、ロールオーバーを伴う単純なアイコンを作るだけなら複雑すぎてできません。
そこで、私が考えたのが、WebサイトでSVGファイルを利用する最も簡単な方法です。これは、初期のテキストから画像への置き換え手法からコンセプトを得たものですが、私の知る限り、SVGに対して行われたことはありません。
これが質問です。
JS-SVGフレームワークを使わずに、SVGを埋め込んでCSSで色を変えるにはどうしたらいいですか?
どのように解決するのですか?
まず、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やclassをまたいで移植しています。なので、この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
関連
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] CSSでテキストや画像の背景を透明にするには?
-
[解決済み] svg要素の色を変更するには?
-
[解決済み] jQuery: テーブルの行数を数える
-
[解決済み] jQueryでloading spinnerを表示するには?
-
[解決済み] jQuery セレクタ。Id Ends With?
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
-
[解決済み】HTML5入力のプレースホルダの色をCSSで変更する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Uncaught TypeError: 未定義のプロパティ 'length' を読み取れませんでした。
-
[解決済み] 選択オプション「selected」を値で設定する
-
[解決済み] jQuery 複数のイベントで同じ関数を起動する
-
[解決済み] jQueryのSELECT要素で特定のオプションを選択するにはどうすればよいですか?
-
[解決済み] Google Maps APIでマウスのスクロールホイールによる拡大縮小を無効にする方法
-
[解決済み] 動的に生成された要素でクリックイベントが動作しない [duplicate]
-
[解決済み] jQueryでloading spinnerを表示するには?
-
[解決済み] jQueryを使用してspanに値を設定する方法
-
[解決済み] jQuery OR Selector?
-
[解決済み】$(window).width()がメディアクエリとは違う