CSSを介して背景画像として使用されるSVG要素を処理するための解決策を見つけようとしています:
.icon.arrow-down
{
background-image: url( 'images/spritesheet.svg#arrow-down' );
}
:target
結合された SVG スプライトシート内の特定のレイヤー (または「グループ」) をターゲットにするために、SVG ファイルで直接使用しています。
<?xml version="1.0" encoding="utf-8" ?>
<svg class="icon" id="icon" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="50px" height="50px" viewBox="0 0 50 50">
<defs>
<style>
rect, line { shape-rendering: crispEdges; }
svg .icon { display: none; }
svg .icon:target { display: inline; }
</style>
</defs>
<!-- Arrows -->
<g class="icon" id="arrow-down" transform="translate(0,12.5)">
<path fill="#F00" d="M 0,0 50,0 25,25 z" />
</g>
<g class="icon" id="arrow-up" transform="translate(0,12.5)">
<path fill="#F00" d="M 0,25 50,25 25,0 z" />
</g>
...
</svg>
#profile
これは Firefox と IE9+ では問題なく動作しますが、Chrome ではその部分を無視しているようです。ただし、ターゲット ID を使用してブラウザーで直接 SVG シートに移動すると、正しい画像が得られます。
:target
これは、Chrome が背景画像を処理する方法のバグですか?
すべてを独自のファイルに分割する必要がないようにしようとしているので、ダウンロードされるリソースは 1 つだけですが、まだ可能かどうかはわかりません。
アイコンが Chrome では表示されず、他のブラウザーでは表示されることに注意してください: http://jsfiddle.net/sYL5F/1/