是否可以像使用文本一样使用css设置外部.svg样式?我错过了什么? 我的标记和css看起来像这样:
<style type="text/css">
#ob {
color: blue;
}
svg {
fill: currentColor;
}
<object id="ob" type="image/svg+xml" data="czo_svg_icons/czo_extra_closed.svg">Your browser does not support SVG</object>
答案 0 :(得分:9)
如果通过引用外部文件来包含svg图像,就像使用object
标记一样,svg图像中的元素不会包含在主文档DOM树中。它们包含自己的树。因此,外部图像中的元素不能被主文档中的CSS选择器匹配。
您可以像对待大多数其他元素一样设置object
元素的样式,例如为其指定边框。但是你不能(至少这样)访问外部图像中的元素。在您的情况下,您尝试设置#ob
&#39; s color
的样式。这将适用于object
的文本颜色,而不适用于引用的svg图像中的任何颜色。在不支持svg的浏览器上,&#34;您的浏览器不支持SVG&#34;通知可能会以蓝色呈现。
svg
的CSS选择器的情况类似:主文档中的CSS选择器仅匹配主文档中的元素,并且找不到svg
,只是object
。
有一些方法可以将CSS样式应用于svg元素。通常的想法是将CSS和svg元素放到同一个DOM树中,方法是将外部文件中的svg元素添加到主文档中,或者将CSS从主文档中获取到外部文件中:
svg
元素及其子元素直接嵌入到主文档中,而不是引用外部文件。在这种情况下,svg
元素及其子元素将成为man文档的DOM树的一部分,因此它们可以被主文档的CSS访问。svg
元素嵌入到主文档中,并使用xlink的use
来引用外部svg图像(而不是其中的一部分)。一般而言,请参阅this answer或this answer。contentDocument
,请参阅this answer。style
属性,使用html&#39; s style
中的head
元素或引用外部CSS文件与<?xml-stylesheet ... ?>
。有关详细信息,请参阅示例this tutorial。