2017.03.17 Web制作
可変SVG利用時の問題と解決方法
SVGとは、ベクター形式の画像ファイルで拡大しても劣化しないといったメリットがあります。
IE8のサポートが終了し、弊社の対応ブラウザでは基本的にSVGが利用できるようになりました。
今まですべて画像として切り出していたアイコンも、フォントアイコンとして利用することも多くなりました。
今回は、デバイス幅いっぱいまで拡大させる画像をSVGで実装したときにあった問題とその解決方法をご紹介します。
■img要素で使った際にIE11(edge)でちらつき発生
SVGの使い方は複数あります。
・img要素のsrc属性にsvgファイルを指定する。
・object要素のdata属性にsvgファイルを指定する。
・HTML文書に直接svgコードを記述する。
最初、一番馴染み深いimg要素でSVGを使っていたのですが、IEで問題がありました。
ブラウザの幅を変更すると、変更中SVG画像が消え、変更が終わった後に再表示されます。
その為ちらつき不具合のように見えます。
IEではリサイズ中はリサイズされるSVGの描画をしないようですね。
→解決方法
img要素以外の方法でSVGを利用する。
■SVGをアスペクト比を維持せずサイズを変えたい
pngなどの画像は、サイズを指定するとアスペクト比に関係なくそのサイズで表示されます。
ですが、SVGはアスペクト比を維持したままサイズが変わるので、幅いっぱいには広げたいが高さは固定したいといった場合に問題になります。
→解決方法
SVGのpreserveAspectRatio属性を"none"と設定する。
■1pxの隙間ができる
cssの背景色を設定したブロックの上下にSVG画像をピッタリくっつけているにもかかわらず、隙間ができることがありました。
必ず隙間ができるのではなく、ブラウザの幅を変更していると出たり出なかったりしました。
幅いっぱいまで表示するようにしていた為、割り切れず隙間ができるのだと想像。どうしようもないものだとあきらめました。
→対処方法
隙間が発生する箇所を、after疑似要素を上に重ね目隠しする。
■chromeでSVG画像が更新されない時がある
ある条件下でリサイズした際に、SVG画像が更新されず意図した見た目にならないという問題が発生しました。
サンプルを作ろうとしましたが、うまく再現させることができませんでした。
ですが、実際に作ったサイトでは必ず発生する…。
そんな困った不具合でした。
想像される発生条件
・SVGがブラウザ幅いっぱいに可変する。
・そのSVGがfixedの要素にある。
・動画など描画負荷が高い要素がある。
→ブラウザの幅を広げると、広げる前の状態のまま幅いっぱいにならない。
→対処方法
原因はよく分からないが、結果は再描画されていないからだと断定。
ブラウザのリサイズ時に無理やり描画させ対応。
jQueryで描画に関係しそうな属性を変化させ無理やり更新させる。
$(window).resize(function(){
$('svg').css({fontSize: '10px'}).animate({fontSize: '11px'}, 1);
});
以上、かなり限定的な問題ですが、何らかの足しになりましたら幸いです。
この記事を読んで、私たちに興味を持ったお客様は、気軽にお問い合わせください!
WEBサイト・ホームページの制作をご検討の方
フライング・ハイ・ワークスの紹介
フライング・ハイ・ワークスは、東京のホームページ制作・Web制作会社・システム開発会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。
実績
デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。
また、SEOやランディングページ(LP)、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。
500点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください。
ホームページ制作・Web制作のお問い合わせ、お見積り依頼、相談、質問は
お問い合わせフォームよりお願いいたします