webdevqa.jp.net

SVGパス要素を背景画像で塗りつぶします

SVG background-image要素に<path>を設定することは可能ですか?

たとえば、要素class="wall"を設定すると、CSSスタイル.wall {fill: red;}は機能しますが、.wall{background-image: url(wall.jpg)}は機能せず、.wall {background-color: red;}も機能しません。

153
jbochi

背景を パターン にすることでできます:

<defs>
  <pattern id="img1" patternUnits="userSpaceOnUse" width="100" height="100">
    <image xlink:href="wall.jpg" x="0" y="0" width="100" height="100" />
  </pattern>
</defs>

画像に応じて幅と高さを調整し、次のようにパスから参照します。

<path d="M5,50
         l0,100 l100,0 l0,-100 l-100,0
         M215,100
         a50,50 0 1 1 -100,0 50,50 0 1 1 100,0
         M265,50
         l50,100 l-100,0 l50,-100
         z"
  fill="url(#img1)" />

実施例

238
robertc

「robertc」による答えはsvgです。これは、d3.jsパスコードで使用されるものに似ています。以下を適用して、d3.jsパスの動的な定義を作成しました。

次のように定義することで、なんとか動作させることができました

chart.append("defs")
     .append('pattern')
     .attr('id', 'locked2')
     .attr('patternUnits', 'userSpaceOnUse')
     .attr('width', 4)
     .attr('height', 4)
     .append("image")
     .attr("xlink:href", "locked.png")
     .attr('width', 4)
     .attr('height', 4);
13
The Old County