我正在使用 js 库(美人鱼)在网页上生成 svg。当用户使用键盘快捷键激活各种命令时,我需要动态地将样式应用于 svg 的某些部分,特别是,我需要突出显示 svg 中当前在逻辑模型中指定为选定元素的元素。查看有关动态样式化 svg 处理内联静态 svg 的其他问题,因此它们可能不适用于我的案例,并且到目前为止我尝试的方法都没有奏效。
我尝试应用的样式是
border-radius : 2rem; box-shadow : 0 0 3rem red;
在应用于常规 html 时,这会给元素一个发光的红色边框。
我尝试的第一件事是将它作为一个类包含在这样的元素中:
<style>
.highlight {
border-radius : 2rem;
box-shadow : 0 0 3rem red;
}
</style>
将类添加到常规 html 元素的类列表中,例如 , 或
,将产生所需的样式。但是,当我以编程方式获取一个元素并将该类添加到其类列表中时,它将保持没有发光边框。使用 chrome 开发工具检查 svg 发现相关类已添加到元素的类列表中。对常规 html 使用相同的方法是成功的。这里是我用来添加类的方法供参考:
graphicDiv.querySelector(selector).classList.add('highlight')
这失败了,我想也许 svg 在其内部元素中有一些样式覆盖了我的样式,所以我添加了 !important 到我的样式中,这样它们将具有最高优先级。这仍然失败,所以接下来我尝试为元素设置样式属性,它应该具有最高优先级,如下所示:
graphicDiv.querySelector(selector).setAttribute('style', 'border-radius : 2rem !important; box-shadow : 0 0 3rem red !important;')
这仍然未能在 svg 的样式上产生任何差异。检查 chrome 开发工具中的元素显示确实设置了样式属性。
我还尝试将我的样式定义添加到 svg 自己的元素中,方法是在生成 svg 后获取它,并将我的类样式定义附加到其文本内容中。它仍然行不通。
最后,我认为这些 css 属性可能不受background-color: green;
. 这没有用。我尝试应用于 svg 中的元素。也没有用。
我完全困惑为什么这些都不起作用。如果有人能帮助我了解如何动态更改 svg 元素的样式,我将不胜感激!