如何在 FireFox 中为 SVG 使用十六进制值

Posted

技术标签:

【中文标题】如何在 FireFox 中为 SVG 使用十六进制值【英文标题】:How to use a hex value for SVG in FireFox 【发布时间】:2015-04-19 17:11:03 【问题描述】:

我正在使用 CSS 类将 SVG URL 加载到网页中。这适用于我测试过的所有浏览器,除了 Firefox 35.0.1(可能还有早期版本的 Firefox)。我注意到,当使用实际颜色名称(例如白色)作为笔划时,它会按预期工作,但是当我使用十六进制值(例如 #ffffff)时,它根本不会显示笔划。根据 MDN,hex values are supported.

所以,这很好用:

.ui-stroke-icon .ui-icon-head:after,
    background-image: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 540 540" enable-background="new 0 0 540 540" xml:space="preserve"><path fill="none" stroke="white" stroke- stroke-miterlimit="10" d="...svg coordinates here..."/></svg>

但这不是:

.ui-stroke-icon .ui-icon-head:after,
    background-image: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 540 540" enable-background="new 0 0 540 540" xml:space="preserve"><path fill="none" stroke="#ffffff" stroke- stroke-miterlimit="10" d="...svg coordinates here..."/></svg>

有什么方法可以在这里使用十六进制值作为颜色吗?这真的有助于让我的 Sass 尽可能保持干爽。

【问题讨论】:

【参考方案1】:

字符# 是reserved in URLs 作为片段标识符的开始。您必须将其编码为 %23 才能使 URL 有效。这不是 Firefox 错误。

或者,您可以使用 base64 对整个字符串进行编码。

【讨论】:

感谢您的回答。在尝试了很多愚蠢的事情之后,比如尝试为rgba 着色等,这终于奏效了。我认为理解某些东西为什么不工作总是很重要的,而不是仅仅假设它是浏览器中的一个错误。 你拯救了我的一天! 当你想用[resources.openRawResource()]读取svg然后用[webView.loadData(svg, "image/svg+xml", “UTF-8”)]。对于 [ webView.loadUrl("file:///android_res/raw/image.svg") ] 情况,可以使用 # 设置颜色

以上是关于如何在 FireFox 中为 SVG 使用十六进制值的主要内容,如果未能解决你的问题,请参考以下文章

Firefox中的svg变换原点问题

如何在 CSS 中为 SVG 元素添加边框/轮廓/描边?

如何在 Firefox 和 Internet Explorer 中使 SVG 更清晰

javascript 有关如何在Gutenberg中为块使用自定义SVG图标的示例

如何在浏览器中为 SVG 动画添加硬件加速?

如何在 SVG 中为特定部分制作透明颜色代码