【发布时间】:2019-11-15 13:28:14
【问题描述】:
对于我工作的公司,我需要为 Web 应用程序加载 SVG。 SVG 位于由 HTML 代码组成的组件中。这些组件被加载到更大的 HTML 结构中。每个组件可以有不同的 SVG 图标,并且必须易于更改。它的颜色也必须能够通过 CSS 改变。
我可以不写下内联 SVG,因为管理员必须能够轻松更改图像(例如:从 https://example.com/svg/potato.svg 到 https://example.com/svg/carrot.svg。我也可以不 使用任何 AJAX/fetch 相关函数来获取内联 SVG,因为组件必须能够在测试域上完美运行,这将触发 CORS 错误。更改 CORS 设置不是此应用程序的选项。
我剩下的唯一选择是加载所有 SVG(目前 10 个,但可以随时缩放)并根据用户输入的 svg 名称查找正确的。我可以让用户像这样调用 JS 函数:showSVG('carrot');,但为了加载时间,我宁愿不加载所有 SVG。
一些答案告诉您使用 CSS filter,但这需要用户可能查找正确的过滤器以获得正确的十六进制代码。我只是希望用户能够像这样编写 CSS:fill: #eee;
我还检查了 CSS mask,但它支持 ok-ish,所以我现在不想使用它。
这是我想要实现的示例:
HTML
<div class="img">
<img src="https://example.com/svg/carrot.svg" alt="">
<p>Test component</p>
</div>
CSS
.img {
fill: yellow;
}
我愿意接受最骇人听闻的 Javascript 解决方案,只要它们适用于所有浏览器。
【问题讨论】:
-
filter可能没有你想要的效果,因为它改变了图像中的每一种颜色,而不仅仅是特定区域,但这是我现在唯一能想到的。如果您想使用它但希望用户能够轻松更改颜色,那么只需制作一个充当中间人的js函数:用户使用changeImageColor("#ff0000")之类的函数,该函数通过使用@来完成复杂的工作987654332@. -
@ibrahimmahrir 图像应该是一种颜色,所以没关系。我想这个功能会起作用,但我担心过滤器可能不起作用。我见过的一些
hex to filter函数并不那么准确。你能给我看一个好的吗? -
能否知道原图使用的颜色?
-
@ibrahimmahrir 我可以将默认颜色更改为所需的任何颜色。
-
你能用
changeImageColor(hue, saturation, luminance)这样的HSL颜色系统代替RGB或HEX吗?
标签: javascript html css svg