【问题标题】:Responsive SVG sprites响应式 SVG 精灵
【发布时间】:2015-08-17 05:31:00
【问题描述】:

我正在为一个网站构建一个图标系统,并从 png 和 font-icon sprites 转向 SVG。

我需要它在所有主要浏览器 (IE9+) 上工作,并且理想情况下希望使用片段标识符,或者作为第二好的选择,内联。我已经进行了广泛的研究,但那里并没​​有很多,而且从我读到的内容来看,SVG 精灵并不是特别敏感。

对于片段标识符,使用 img 标签,我必须将宽度/高度设置为与视图框相同的大小。增加 img 标签上的尺寸最终会显示一些下一个精灵。我希望能够使用百分比值,以便精灵片段填充父容器。

我只是想确认这是不可能的,我找不到任何表明我的想法是错误的。

【问题讨论】:

    标签: svg icons sprite


    【解决方案1】:

    这是很有可能的,并且相对容易实现。 SVG 是矢量图形,因此,如果处理得当,它将成为您网站上响应速度最快的图形。

    按预期设置您的 SVG 文件,但将每个精灵放入带有自己标识符的 <g> 标记中。

    <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
      <g class="sprite" id="circle">
        <ellipse cy="50" cx="50" ry="45" rx="45" stroke-width="5" stroke="#00ff00" fill="#00ff00" fill-opacity="0.75" />
      </g>
      <g class="sprite" id="square">
        <rect y="5" x="5" width="90" height="90" stroke-width="5" stroke="#ff0000" fill="#ff0000" fill-opacity="0.75" />
      </g>
      <g class="sprite" id="triangle">
        <path d="M20,7 L92,50 L6,93 z" stroke-width="5" stroke="#0000ff" fill="#0000ff" fill-opacity="0.75" />
      </g>
    </svg>
    

    添加一些 CSS 说明只需要显示 rargeted 一个

    <defs>
        <style><![CDATA[
            .sprite { display: none; }
            .sprite:target { display: inline; }
        ]]></style>
    </defs>
    

    然后,您可以在需要时使用 img 标记或背景元素等来调用它们。

    您可以在此处找到完整解释的文章:

    【讨论】:

    • 这是假设每个图标具有相同的宽度/高度吗?我的图标尺寸不同
    • 我刚刚对其进行了测试,当图标具有不同的尺寸比时,我没有得到想要的结果,最终得到不需要的空白。我想我现在必须放弃使用 SVG sprites 的“梦想”:(
    • 我会认为拥有一堆尺寸比例完全相同的图标更不寻常。当然,宽度/高度比会发生变化会更常见。有些是正方形的,大部分是矩形的,并且在这些矩形中具有不同的宽度/高度比
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2019-04-28
    • 1970-01-01
    • 2013-09-03
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多