我一直在尝试找到一种解决方案来处理通过 CSS 用作背景图像的 SVG 元素:
.icon.arrow-down
{
background-image: url( 'images/spritesheet.svg#arrow-down' );
}
我:target
直接在 SVG 文件中使用,以便在组合的 SVG spritesheet 中定位特定层(或“组”)。
<?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>
这适用于 Firefox 和 IE9+,但在 Chrome 中它似乎忽略了这#profile
部分。但是,直接在浏览器中使用目标 id 访问 SVG 工作表会产生正确的图像。
这是 Chrome:target
在背景图像中处理方式的错误吗?
我试图避免必须将所有内容分成自己的文件,因此只下载一个资源,但我不知道这是否可能。
请注意图标未在 Chrome 中显示,但在其他浏览器中显示:http: //jsfiddle.net/sYL5F/1/