134 votes

Couleur de fond du texte en SVG

Je veux colorer l'arrière-plan du svg. text similaire à background-color en css

Je n'ai pu trouver de la documentation que sur fill qui colore le texte lui-même

Est-ce même possible ?

116voto

Young Roger Points 508

Non, cela n'est pas possible, les éléments SVG n'ont pas de background-... attributs de présentation .

Pour simuler cet effet, vous pouvez dessiner un rectangle derrière l'attribut texte avec fill="green" ou quelque chose de similaire (filtres). En utilisant JavaScript, vous pourriez faire ce qui suit :

var ctx = document.getElementById("the-svg"),
textElm = ctx.getElementById("the-text"),
SVGRect = textElm.getBBox();

var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
    rect.setAttribute("x", SVGRect.x);
    rect.setAttribute("y", SVGRect.y);
    rect.setAttribute("width", SVGRect.width);
    rect.setAttribute("height", SVGRect.height);
    rect.setAttribute("fill", "yellow");
    ctx.insertBefore(rect, textElm);

110voto

Robert Longson Points 24231

Vous pourriez utiliser un filtre pour générer l'arrière-plan.

<svg width="100%" height="100%">
  <defs>
    <filter x="0" y="0" width="1" height="1" id="solid">
      <feFlood flood-color="yellow" result="bg" />
      <feMerge>
        <feMergeNode in="bg"/>
        <feMergeNode in="SourceGraphic"/>
      </feMerge>
    </filter>
  </defs>
  <text filter="url(#solid)" x="20" y="50" font-size="50">solid background</text>
</svg>

31voto

dbarton_uk Points 512

La solution que j'ai utilisée est la suivante :

<svg>
  <line x1="100" y1="100" x2="500" y2="100" style="stroke:black; stroke-width: 2"/>    
  <text x="150" y="105" style="stroke:white; stroke-width:0.6em">Hello World!</text>
  <text x="150" y="105" style="fill:black">Hello World!</text>  
</svg>

Un élément de texte dupliqué est placé, avec des attributs de trait et de largeur de trait. Le trait doit correspondre à la couleur de l'arrière-plan et la largeur du trait doit être juste assez grande pour créer une "tache" sur laquelle écrire le texte.

Un peu de bricolage et il y a des problèmes potentiels, mais ça marche pour moi !

20voto

Chris G Points 31

Au lieu d'utiliser un <text> l'étiquette <foreignObject> peut être utilisée, ce qui permet d'utiliser du contenu XHTML avec CSS.

18voto

nnattawat Points 21

Non, vous ne pouvez pas ajouter une couleur de fond aux éléments SVG. Vous pouvez le faire de manière programmatique avec d3 .

var text = d3.select("text");
var bbox = text.node().getBBox();
var padding = 2;
var rect = self.svg.insert("rect", "text")
    .attr("x", bbox.x - padding)
    .attr("y", bbox.y - padding)
    .attr("width", bbox.width + (padding*2))
    .attr("height", bbox.height + (padding*2))
    .style("fill", "red");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X