SVGの text 要素がIEブラウザで表示されない


SVGを使ったグラフ表示を試しているときに、IEブラウザでのみテキスト文字列が表示されないことがあったのでメモまで。

結果から言うと、CSSで line-height: 0px; を指定しているのが原因だった。

<html>

<style type="text/css">
<!--
    #main {
        line-height: 0px;
    }
-->
</style>

<body>

<div id="main">
    <svg style="width:300px; height:150px;">
        <circle cx="50" cy="50" r="50" fill="red"/>
        <text x="50" y="50" text-anchor="middle" fill="white">
           Hello World
        </text>
    </svg>
</div>

</body>
</html>

上記のHTMLファイルをIE (SVGがサポートされているIE9以降) で読み込むと、"Hello World" の文字が表示されない。Google ChromeやFirefoxであれば表示されることもあり、原因が分かるまで時間がかかった。

この line-height: 0px だが、以下のサイトにもあるようにdiv要素の隙間を消すために指定することがある。

表題とは話題が変わるが、font-size で指定する単位が pxptでもブラウザによって表示の大きさが変わる。Chromeは px, pt は区別がなく (pt ぽい振る舞い)、FirefoxやIEはちゃんと区別しているようで、表示の大きさが変わる。

SVGのブラウザ間の仕様差分はだいぶなくなってきているように思うが、複雑なSVGグラフィックを開発する際には、複数ブラウザで動作確認しながら作業を進めるのがよい。