CSSの背景画像でSVG要素を使う場合にIEにも対応させる書き方

AMP HTMLを使っているとamp-carouselの左右のボタンなんかがそうなんですが、background-imageにSVGのコードをベタッと貼り付ける場面があったりします。そのときにIEの対応まで考えるとdata URI自体をパーセントエンコードする必要が出てきます。ということでIEにも対応した、背景画像にdata URIスキームを使う際の注意点を書きました。

SVGを背景画像に使う

CSSの背景画像にdata URIスキームを使うときの書式の基本は

.data-uri-scheme {
  background-image: url("data:image/svg+xml;utf8,base64,[データ]");
}

です。先頭の"data:"がURIスキーム、"image/svg+xml;"がcontent typeです。データ形式がbase64形式ではなくSVGコードを使う場合は

.svg-image {
  background-image: url("data:image/svg+xml;charset=utf8,<svg ...> ... </svg>");
}

となります。

これをIE対応させるためにはdata URI自体をパーセントエンコードする必要があります。 ポイントは以下の2点です:

  • data:image/svg+xml;utf8からdata:image/svg+xml;charset=utf8 に変更する(IE対応のためにはcharsetが必須となります)
  • SVGコードをURLエンコードする。URLエンコードの手間を最小限にするために、SVG要素の属性を指定するときにダブルクォーテーションの代わりにシングルクォーテーションを使っておくほうがいいです。
    エンコードするとこんな感じになります:
.ie-compatible-image {
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' style='fill:red; stroke:none' %3E%3Crect x='0' y='40' width='100' height='20' /%3E%3Crect x='40' y='0' width='20' height='100' /%3E%3C/svg%3E");
}

これで、IEにも対応した、SVGでの背景画像指定をすることができます。

参考ページ

Optimizing SVGs in data URIs CSS: Using raw svg in the URL parameter of a background-image in IE

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です