【问题标题】:Change color of data url embedded SVG image更改数据 url 嵌入 SVG 图像的颜色
【发布时间】:2015-07-19 10:33:09
【问题描述】:

我在 CSS 文件中嵌入了一个 SVG 背景图像作为数据 url:

.what { background: url('data: image/svg+xml; utf8, <svg> ... </svg') }

我希望另一个元素具有相同的背景图像,只是颜色不同,但我不想重复整个 SVG 代码。

<div class="what one">...</div>
<div class="what two">...</div>

那么如何更改背景 SVG 图像的颜色?

请不要使用 Javascript。


其他相关问题都没有回答这个问题,因为那里给出的解决方案依赖于提供两个不同的文件,我想避免这种情况,因为我想最小化移动用户的文件大小。

【问题讨论】:

  • 您可以在此页面的右侧看到许多“相关答案”,但基本上,使用 CSS不可能
  • 我认为你必须重复 svg 但背景颜色不同
  • 您似乎已经排除了所有可能的答案,即两张图片或 javascript。

标签: css svg


【解决方案1】:

查看此网页:https://css-tricks.com/using-svg/ 页面下方是一个名为“现在您可以使用 CSS 进行控制!”的标题。 他们似乎正在使用诸如

之类的语句内联更改图像的颜色
.kiwi {
    fill: #94d31b; 
}

【讨论】:

  • 从反对票来看,我认为这不会像你想要的那样工作。我很抱歉。
  • 您提出的解决方案适用于内联 SVG,而不适用于 OP 所具有的背景图像。
  • 遗憾的是,这个没有回答 OP,但它仍然是有用的额外信息。在评论或其他内容中可能会更好,但无论如何我放弃了删除其中一个问题。我很感激这里的帮助:)
【解决方案2】:

您无法使用 CSS 重新设置背景图像的内容。无论是外部 SVG 还是作为数据 URI 应用的 SVG。

【讨论】:

    【解决方案3】:

    显然,作为Noah Blon explains,可以使用 CSS 过滤器设置 SVG 背景图像的颜色。

    他在他的网站上给出的一个例子是:

    .icon-blue {
        -webkit-filter: hue-rotate(220deg) saturate(5);
        filter: hue-rotate(220deg) saturate(5);
    }
    

    请访问他的网站以获取更多信息和其他两个解决方案,这些解决方案不涉及更改颜色,而是 SVG 背景精灵,并创建一个“倒置”的 SVG,它覆盖了背景,并且在背景颜色闪耀的地方是透明的,以创建彩色表格.

    很遗憾,IE does not support filters

    【讨论】:

    • 它不适用于 IE。但是,只要今天的 IE 远不那么重要,就可以使用 pngs 来为这种自定义情况创建一个后备方案。 (是的,这是一些额外的步骤,但我宁愿在我的项目中使用它)。
    • 应该注意这个解决方案在技术上并没有“设置 SVG 的颜色样式”。无论内容是什么(SVG 与否),它都是对整个 DOM 元素的直接过滤器。
    猜你喜欢
    • 2012-04-27
    • 2019-01-15
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多