如何将颜色应用于 SVG 文本元素

Posted

技术标签:

【中文标题】如何将颜色应用于 SVG 文本元素【英文标题】:How to apply a color to a SVG Text element 【发布时间】:2013-07-02 05:56:54 【问题描述】:

好吧...我要疯了。我已经开始尝试使用 SVG。使用 SVG 并对其应用 CSS 类就像一种魅力。我只是无法弄清楚我做错了什么,但我只是无法让班级在 svg 文本元素上工作。我已经完全剥离了它,这就是我得到的:

<!DOCTYPE html>
<html>
<head>
    <meta charset='UTF-8'>
    <title>Playground</title>
</head>
<body>
    <style type="text/css">
        .mainsvg 
            height: 320px;
            border: 1px solid red;
            width: 400px;
        
        .caption 
            color: yellow;
        
    </style>
    <h2>SVG - Sandbox</h2>
    <div>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" class="mainsvg">
            <text x="65" y="40" class="caption">Fact</text>
        </svg>
    </div>
</body>
</html>

根据http://www.w3.org/TR/SVG/styling.html#ClassAttribute 这应该可以工作...

关于改变什么或替代方案的任何提示/提示?

【问题讨论】:

如果我阅读 w3 链接,您将无法设置边框。这叫中风。 好吧,边框效果很好。 Stroke 用于您实际“绘制”的所有内容。但我的问题是关于文本元素上的类,我在其中设置文本的颜色,就像在 w3 链接中一样。 【参考方案1】:

设置类是正确的,但是 CSS 颜色属性对 SVG 没有影响。 SVG 使用 fill 和 stroke 属性。在您的情况下,您可能只需要更改颜色即可填充。这会在 Firefox 中为我显示黄色文本。

<!DOCTYPE html>
<html>
<head>
    <meta charset='UTF-8'>
    <title>Playground</title>
</head>
<body>
    <style type="text/css">
        .mainsvg 
            height: 320px;
            border: 1px solid red;
            width: 400px;
        
        .caption 
            fill: yellow;
        
    </style>
    <h2>SVG - Sandbox</h2>
    <div>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" class="mainsvg">
            <text x="65" y="40" class="caption">Fact</text>
        </svg>
    </div>
</body>
</html>

【讨论】:

试过了,不行...记住。颜色是他们在 W3 Recommendation 中给出的示例。我将其剥离为颜色以获得最简单的实现进行测试。 干得好,您在 SVG 规范中发现了一个错误。我已将其报告给 w3c:lists.w3.org/Archives/Public/www-svg/2013Jul/0001.html 嗯,不。我同意有一个错误。但它不在文档中。他们基本上说明了它应该是什么。似乎所有浏览器都未能实现这一点。这让我觉得不太可能。请记住,它也不适用于填充或描边。似乎完全忽略了 css 类选择器(chrome、FF 和 IE10)。 等待.... text.caption 确实有效。文本 .caption (带空格)没有.... (这是在所有 3 个浏览器中进行测试的) .caption 也可以。我想知道你第一次建议填充时我测试了什么,但它没有用..... 仅设置color 属性在svg 中没有直接可见的效果,但您可以将该颜色用于fillstroke 甚至两者,例如text fill: currentColor

以上是关于如何将颜色应用于 SVG 文本元素的主要内容,如果未能解决你的问题,请参考以下文章

如何将样式应用于 SVG 元素数组

如何通过 CSS 将阴影过滤器应用于 SVG 特定元素/路径

如何通过 CSS 将阴影过滤器应用于 SVG 特定元素/路径

在悬停另一个元素时更改 SVG 填充颜色

如何在 Angular 中更改 svg 元素的颜色?

如何将图案图像动态添加到 svg?