您如何使用 CSS 设置外部 svg 的样式

Posted

技术标签:

【中文标题】您如何使用 CSS 设置外部 svg 的样式【英文标题】:How do you style a external svg with css 【发布时间】:2022-01-13 03:07:14 【问题描述】:

是否可以像使用文本一样使用 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>

【问题讨论】:

【参考方案1】:

如果您通过引用外部文件来包含您的 svg 图像,就像使用 object 标记一样,那么 svg 图像中的元素不会包含在您的主文档 DOM 树中。它们组成了自己的树。因此,主文档中的 CSS 选择器无法匹配外部图像中的元素。

您可以像其他大多数元素一样设置object 元素的样式,例如给它一个边框。但是您不能(至少通过这种方式)访问外部图像中的元素。在您的情况下,您尝试设置#obcolor 样式。这将适用于 objects 文本颜色,而不适用于引用的 svg 图像内的任何颜色。在不支持 svg 的浏览器上,“您的浏览器不支持 SVG”通知可能会呈现为蓝色。

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。 通过 AJAX/XHR 将元素从外部图像加载到主文档树。总体思路,请再次参阅this answer。 您可以使用 javascript 抓住外部图像的树并从那里编辑它们的样式。其关键字是contentDocument,请参阅this answer。 如果您无法将外部 svg 图像中的元素获取到主文档的 DOM 树中,因此主文档 CSS 选择器可以与之匹配,您可以尝试相反的方法:将您的 CSS 添加到您的 svg 文件中。与将 CSS 包含到 html 文档中的方式类似,您可以使用内联 style 属性,使用 html 的 head 中的 style 元素或使用 &lt;?xml-stylesheet ... ?&gt; 引用外部 CSS 文件。有关详细信息,请参阅例如 this tutorial。

【讨论】:

以上是关于您如何使用 CSS 设置外部 svg 的样式的主要内容,如果未能解决你的问题,请参考以下文章

SVG:为啥外部 css 会覆盖文本的内联样式?

使用 `fill="url(#a)"` 时如何使用 Tailwind CSS 设置 SVG <linearGradient> 样式?

如何将带有css样式的内联SVG从浏览器保存/导出到图像文件

使用 CSS 操作外部 svg 文件样式属性

如何防止外部 CSS 覆盖 Web 组件样式

怎么建立css外部样式文件