Preencher elemento de caminho SVG com uma imagem de plano de fundo

166

É possível definir um background-imagepara um <path>elemento SVG ?

Por exemplo, se eu definir o elemento class="wall", o estilo CSS .wall {fill: red;}funcionará, mas .wall{background-image: url(wall.jpg)}também não .wall {background-color: red;}.

jbochi
fonte
1
Mostrando como definir a imagem de fundo para o texto SVG, opcionalmente, em uma base per-caráter: stackoverflow.com/a/10853878/405017
Phrogz
para aqueles que procuram um pouco mais de informações profundo verificar este artigo ligação
Paulo Bueno

Respostas:

261

Você pode fazer isso transformando o plano de fundo em um padrão :

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

Ajuste a largura e a altura de acordo com a imagem e faça referência a partir do caminho da seguinte maneira:

<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)" />

Exemplo de trabalho

robertc
fonte
3
muito bom, isso também funciona com imagens base64? em vez de wall.jpg algo data:image/png;base64,iVBORw0KGgoAAcomo você faria em CSS normal?
Christoph
12
@ Christoph Eu não sei, tente e veja.
Robertc # 10/12
2
@robertc Eu tentei e não funcionou, mas eu tinha um elemento de estilo duplicado. Ao eliminá-lo, funcionou muito bem;)
Christoph
4
@robertc: Eu tenho uma pergunta sobre sua resposta. O padrão começa nas coordenadas globais (0,0). É possível deixar o padrão usar o sistema de coordenadas local do objeto anexado? Eu quero desenhar um ret em diferentes lugares no meu svg e o que acontece é que o padrão é repetido no fundo do buraco e os objetos são usados ​​como máscaras.
Tobias Golbs
7
@robertc, atualize sua resposta para mencionar que xlink:hrefestá obsoleta desde o SVG 2 e simplesmente usar hrefagora. developer.mozilla.org/pt-BR/docs/Web/SVG/Attribute/xlink:href
Blake Regalia