【发布时间】:2023-03-16 12:45:01
【问题描述】:
我正在尝试使用 CSS 来设置 <symbol> 中特定 <path> 的 fill 的样式。我已将fill:inherit 分配给符号<defs> 中的路径,并且我可以查询SVG DOM 中符号的<use> 实例,但我似乎无法在这些实例中访问该路径。我查看了 inherit 的 CSS 和 currentColor 的填充 <path> 但没有运气。任何帮助表示赞赏。
<svg>
<defs>
<style>
symbol#DateCard path.purple {
fill:inherit;
}
use[*|href="#DateCard"] path.purple{
fill:#ff0095;
transition:fill .6s;
}
use[*|href="#DateCard"] path.purple:hover{
path:#ff0000;
}
</style>
<symbol id="DateCard">
<path class="purple" fill="currentColor" d="..."/>
</symbol>
</defs>
<use xlink:href="#DateCard"/>
<svg>
我可以查询符号内的路径,但是当我查询 <use> 实例内的特定路径时,这将返回一个空的 NodeList:
document.querySelectorAll('use[*|href="#DateCard"] path.purple')
【问题讨论】:
-
无法访问 Use 元素的 shadow DOM。
-
我正在尝试阅读这篇文章,tympanus.net/codrops/2015/07/16/styling-svg-use-content-css,我希望有办法,但我还没有完全理解它。
-
你可以使用inherit / currentColor技巧来设置use元素的样式,但如果我没记错的话,你不能定位use元素的子元素,你只能为整个使用元素。并且只是强调一下,JavaScript 无法访问 SVG shadowDOM(但至少据我所知)——因此 querySelector 不会对符号/使用的子元素起作用。
标签: css svg shadow-dom