【问题标题】:How to use css fill: on image elements inside svg?如何使用 css 填充:在 svg 内的图像元素上?
【发布时间】:2015-11-18 04:42:32
【问题描述】:

.i image,
.i path,
.i {
  fill: red;
  stroke: red;
  margin-top: 5px;
}
<svg class="i">
    <image class="i" xlink:href="https://nextgenthemes.com/wp-content/bubble.svg" height="100%" width="100%"/>
</svg>

如果我使用 &lt;use&gt; 元素并从 svg 定义文件中引用一个符号,它确实有效。

jsbin

【问题讨论】:

  • 尝试使用“stroke”属性而不是“fill”
  • 也可以尝试内联,您的样式表被引用可能存在问题
  • 当它是一个 svg 并引用了一个带有 use 标签的 svg sprite 时,它​​与 fill 一起工作得很好。感谢您的建议,但这无济于事。看起来是不可能的。我正想着我找到了图标的 HTTP/2 读取解决方案。

标签: svg


【解决方案1】:

SVG &lt;image&gt; 元素不接受 fill 作为属性。所以它不会接受 CSS fill 等效项。

W3C SVG &lt;image&gt; 元素:http://www.w3.org/TR/SVG11/struct.html#ImageElement

SVG &lt;image&gt; 元素的属性定义:

  • x = 放置参考文档的矩形区域的一个角的 x 轴坐标。 如果未指定该属性,则效果如同指定了“0”值。 动画:是的。
  • y = 放置被引用文档的矩形区域的一个角的 y 轴坐标。 如果未指定该属性,则效果如同指定了“0”值。 动画:是的。
  • width = 放置引用文档的矩形区域的宽度。 负值是错误(请参阅错误处理)。零值禁用元素的呈现。 动画:是的。
  • height = 放置引用文档的矩形区域的高度。 负值是错误(请参阅错误处理)。零值禁用元素的呈现。 动画:是的。
  • xlink:href = IRI 参考。 动画:是的。

如果它与 SVG &lt;use&gt; 元素一起使用,请不要使用它!

【讨论】:

  • 我担心这个。我不想使用&lt;use&gt; 的原因是我需要包含 svg-for-everybody,因为并非所有浏览器都支持使用锚点 svgdev.svg#icon1 引用外部 svg 定义。此外,我正在为一个 HTTP/2 世界编写代码,其中精灵实际上是不好的做法。所以我实际上会在很多定义文件中引用一个带有 ID 的图标。在没有 ID 的情况下使用简单的 svg 文件不适用于使用 &lt;use&gt; 我的猜测是不支持/不打算这样做。所以当我遇到&lt;image&gt; 时,我很高兴,并认为这是我需要的解决方案。
  • 我不时使用&lt;img&gt; 将其转换为内联&lt;svg&gt; 以便能够填充path 有趣的是我之前在CSS 中不需要path .
  • 当使用 &lt;use&gt; 元素并且如果它使用 CSS 引用 SVG &lt;defs&gt; 元素内的 SVG 元素时。由于 CSS 未直接在 &lt;defs&gt; 元素中呈现,因此您不能在 &lt;defs&gt; 元素内的任何内容上使用 CSS。在这种情况下,您必须改为更改属性。 &lt;defs&gt; developer.mozilla.org/en-US/docs/Web/SVG/Element/defs .. 但很高兴你能成功:)
【解决方案2】:

你想要的东西是不可能的,有两个不同的原因。

  1. 通过 HTML &lt;img&gt;background-image 或通过 SVG &lt;image&gt; 加载的 SVG 可被视为呈现为静态表单,其内容无法由父级设置样式。将其视为已转换为位图。

  2. CSS 规则不适用于跨文档边界。您不能在一个文档(HTML)中使用规则来为另一个文档(在本例中为 SVG bubble.svg)中的元素设置样式。

【讨论】:

    猜你喜欢
    • 2016-09-16
    • 2021-03-06
    • 2018-08-09
    • 2013-11-10
    • 2011-04-17
    相关资源
    最近更新 更多