以不同方式设置相同 SVG <object> 的样式

新手上路,请多包涵

我想在不同颜色的页面上放置一系列相同的 SVG 文件。我知道在不膨胀代码的情况下将 SVG 放入页面,并且仍然具有外部样式的最佳方法是通过 <object> 标记。

这是我到目前为止所拥有的:

HTML

 <object type="image/svg+xml" data="images/circle.svg" class="object-circle red" >
    <!-- fallback image in CSS -->
</object>

<object type="image/svg+xml" data="images/circle.svg" class="object-circle blue" >
    <!-- fallback image in CSS -->
</object>

CSS

 .object-circle {
    height:16px;
    width:16px;
}

.red .svg-circle {
    fill:#f00;
}
.blue .svg-circle {
    fill:#00f;
}

SVG

 <?xml-stylesheet type="text/css" href="styles.css" ?>
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400">
  <defs>
    <style>
      .svg-circle {
        fill-rule: evenodd;
      }
    </style>
  </defs>
  <path class="svg-circle" d="M200,398.688A199.552,199. ..."/>
</svg>

这只是行不通。我认为将 <object> 标记用于操纵 CSS 中的 SVG fill 属性存在问题。

从样式表中取出 .red 选择器并保留 .svg-circle 选择器按预期工作 - 将圆圈变成红色,但我希望能够在页面上有几个不同的颜色。

非常感谢任何帮助!

如果我不能破解这个,我可能会求助于老式的 .png 精灵表。

原文由 Grimmie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 175
1 个回答

请参阅 https://css-tricks.com/using-svg/ ,“将 SVG 用作 <object> ”部分:

[…] 如果你想让 CSS 东西起作用,你不能在文档上使用外部样式表或 <style> ,你需要在 SVG 文件本身中使用 <style> 元素.

因此,似乎无法通过 CSS 从对象“外部”为 object 内的 SVG 元素设置样式。

原文由 CBroe 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题