129

svgの背景をcsstextと同じように色付けしたいbackground-color

fillテキスト自体に色を付ける のドキュメントしか見つけることができませんでした

それは可能ですか?

4

12 に答える 12

115

いいえ、これは不可能です。SVG 要素にはbackground-... プレゼンテーション属性がありません。

この効果をシミュレートするには、テキスト属性の後ろに長方形を描画するか、fill="green"または同様のもの (フィルター) を使用します。JavaScript を使用すると、次のことができます。

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);
于 2013-06-01T13:14:52.063 に答える
109

フィルタを使用して背景を生成できます。

<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>

于 2015-06-23T21:03:37.293 に答える
18

いいえ、SVG 要素に背景色を追加することはできません。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");
于 2014-06-24T04:48:08.450 に答える
2

これは私のお気に入りのハックです (うまくいくかどうかはわかりません)。まだ表示されていない要素を参照し、かなりうまく機能します

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 620 40" preserveAspectRatio="xMidYMid meet">
    <defs>
        <filter x="-0.02" y="0" width="1.04" height="1.1" id="removebackground">
            <feFlood flood-color="#00ffff"/>
        </filter>
    </defs>

    <!--Draw the text--> 
    <use xlink:href="#mygroup" filter="url(#removebackground)" />
    <g id="mygroup">
        <text id="text1" x="9" y="20" style="text-anchor:start;font-size:14px;">custom text with background</text>  
        <line x1="200" y1="18" x2="200" y2="36" stroke="#000" stroke-width="5"/> 
        <line x1="120" y1="27" x2="203" y2="27" stroke="#000" stroke-width="5"/> 
    </g>
</svg>

于 2017-09-19T20:10:17.100 に答える