SVG互相覆盖CSS样式

时间:2018-08-07 11:13:05

标签: css svg webpack vue.js

我正在使用Vue.js,并尝试放置一些在Illustrator中为Webapp创建的SVG图标。我用Webpacks“ require”加载了图标。无法通过其源(img标签的src属性)访问svg,因此我们将其插入vue,如下所示:

<div class="section-icon" v-html="getIconForEvent(event)"></div>

这会在正确的位置显示正确的图标,但是我在使用此方法时遇到了一些问题。

所有SVG均在svg中带有样式标签。因此,最后一个SVG会覆盖所有以前的SVG的样式,因为它们在某种程度上都具有相同的类。在Chrome Devtools中,这看起来像 this

我该怎么办才能不让SVG样式覆盖彼此的类?我没有自己放置样式标签,这些只是SVG本身的样式。谢谢!

2 个答案:

答案 0 :(得分:3)

除了修改每个SVG中的类名称以免它们冲突之外,您无能为力。

您似乎正在使用Illustrator生成这些SVG。要解决此问题,请确保在保存SVG时告知Illustrator,不要使用<style>元素进行元素样式设置。

保存时,使用File > Save As > SVG,然后单击“更多选项”并更改“ CSS属性”设置。如果将其设置为“样式元素”,请将其更改为其他选项之一。如果这样做,它将不会使用类,并且您的SVG也不会彼此冲突。

要修复您当前的SVG,您应该能够将其加载,然后使用上述方法重新保存它们。

答案 1 :(得分:-2)

尝试使用孩子通过CSS定位它们:

.cls-3:first-child {
   fill:yellow;
}
.cls-3:nth-child(2) {
   fill:red;
}

...

.cls-3:last-child {
   fill:blue;
}

填充所需的颜色以查看其是否有效。如果那不能覆盖它,您可能需要使用!important,尽管这不是最佳实践,而是最坏的情况。