その仕事、蠍は留守です

おべんきょうしたことなどをメモメモしておくブログです。

さそるのホーム
さそるのおしごと
スクリプト関連
ロゴとかQRコードをSVGにしてみた

ロゴとかQRコードをSVGにしてみた

こんにちは、タケノコの皮を剥いたせいで手がチクチクするHitoyamです。

特に意味はないのですが、やってみたかったので @yomotsu@neotag に知恵を借りつつ、ブログのタイトルロゴとQRコードをSVGにしてみました。

SVGをHTMLで表示させるにはいくつか方法があるのですが、まだまだブラウザごとに実装が違うみたいで、表示にはそれぞれ差が出ます。

<img>で表示させる場合

ソースとデモ

<h1><a href="http://www.hitoyam.com/web/">
<img src="./logo_web.svg" width="190" height="58" alt="その仕事、蠍は留守です" />
</a></h1>
<p><img src="./sasoru_QR.svg" width="84" height="84" alt="QRコード" /></p>

キャプチャ

Opera、Safari、Chromeでの表示 Firefoxでの表示 IE6、7、8での表示

Firefoxでは表示されない...です

はじめうまくいかなくてこまったのですが、.htaccessで「AddType image/svg+xml svg」の指定をしたらうまくいきました。MIMEタイプとか普段あんまり考えないし...。

IE6、7、8では当然というか、まぁ普通に表示されないんですけど、なんとFirefoxでも表示されないんです...。最初にこれでつまずいてガッカリするワケですね。3.7でも表示されないみたいで、残念すぎる...。表示されるブラウザでは、表示もリンクを張るのも問題なくできました。

<object>で表示させる場合

ソースとデモ

<h1><a href="http://www.hitoyam.com/web/">
<object type="image/svg+xml" data="./logo_web.svg" width="190" height="58">
<img src="http://www.hitoyam.com/images/web_logo.gif"
 width="189" height="68" alt="その仕事、蠍は留守です" />
</object>
</a></h1>
<p><object type="image/svg+xml" data="./sasoru_QR.svg" width="84" height="84">QRコード</object></p>

キャプチャ

Firefox、Opera、Safari、Chromeでの表示 IE8での表示 IE6、7での表示

Adobe SVG Viewerのせい? それとも...??

ロゴには<object>の代替としてgif画像を設定しているため、IE8ではsvgでなくgifが表示されている状態。QRコードにはテキストだけ表示させています。

ただ、Adobe SVG Viewerをインストールしていると、IE6、7でのキャプチャのように灰色に塗りつぶされてしまってうまくいきません...。原因がAdobe SVG Viewerのせいかどうかは分かりませんが、とにかくウチの環境ではそうです。

リンク用の<rect>を引いてみた

実は<object>に単純にアンカーリンクをあてるだけでは、うまいことリンクさせるのが難しかったです。なので、svgの中にリンクを設定しています。

ソースとデモ

<a xlink:href="http://www.hitoyam.com/web/" target="_top">
<rect x="0" y="0" width="190" height="58" fill="#ffffff" fill-opacity="0" />
<g>・・・</g>
</a>

190×58pxの領域すべてをリンク領域として確保するため、<rect>で四角形を置いています。今回はfillで四角形の背景色を指定し、fill-opacityで透明化する、というやり方にしてみました。fill指定しないと、FirefoxなどのCSSを切っている時にオブジェクトが黒く塗りつぶされちゃうっぽいので、その対策。

四角形とロゴ両方を<a>で囲んでしまえば、領域全てがリンク領域になります。四角形だけしか囲まない場合には、ロゴの文字の部分などからはリンクされなくなるので注意。

HTMLの背景色を変えてみた

デモ

キャプチャ

sasorusvg03_firefox-opera Safari、Chromeでの表示 IE8での表示

fill-opacityが効いてない?

Firefox、Operaでは四角形の領域が透明化されて表示されているように見えるのですが、Safari、Chromeでは白地が出てしまっています。IE8はもともとgifが表示されているので変わらずgifが出てきます。ちなみにIE6、7も灰色に塗りつぶされたまんま。

<object>の方で<param name="wmode" value="transparent" />を追加しているsasoru_svg04.htmlでも結果は同じでした。

そんなこんなで

Firefoxで<img>が使えない以上、<object>を使って埋め込みをすることにしました。代替コンテンツが当てられるので、IEでも困らないかな、と。まだIE9ppでちゃんと見ていないのですが、IETesterで9が出たようなので近いうち試してみたいと思っています。

あとAdobe SVG Viewerの顧客サポートは2008年に終了しているらしいですが、今どんなふうに扱われているのですかね。アンインストールしたらIE7とかでも代替コンテンツが表示されるようになるのでしょうか。そのへんは謎。でも個人ブログですし、そこまではサポートしないでもいいかなぁ...。ううむ。

とにもかくにも、@yomotsu++ & @neotag++ サンクスでした!

関連URL

My Contact Lists

このサイト『蠍は留守です』はIE6、IE7を対応を廃止しました。
申し訳ありませんが、新しいバージョンのブラウザでご覧下さい。