Rellene el elemento de ruta SVG con una imagen de fondo


166

¿Es posible establecer un background-imagepara un <path>elemento SVG ?

Por ejemplo, si configuro el elemento class="wall", el estilo CSS .wall {fill: red;}funciona, pero .wall{background-image: url(wall.jpg)}tampoco lo hace .wall {background-color: red;}.


1
Muestra cómo configurar la imagen de fondo para el texto SVG, opcionalmente por carácter: stackoverflow.com/a/10853878/405017
Phrogz

para aquellos que buscan un poco más de información profunda, consulte este enlace del
Paulo Bueno

Respuestas:


261

Puede hacerlo convirtiendo el fondo en un patrón :

<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 el ancho y la altura de acuerdo con su imagen, luego haga referencia desde la ruta de esta manera:

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

Ejemplo de trabajo


3
muy bien, ¿funciona esto también con imágenes base64? en lugar de wall.jpg algo como data:image/png;base64,iVBORw0KGgoAAlo haría en CSS normal?
Christoph

12
@ Christoph No lo sé, pruébalo y verás.
robertc

2
@robertc Lo intenté y no funcionó, pero tenía un elemento de estilo duplicado. Al eliminarlo, funcionó bien;)
Christoph

44
@robertc: Tengo una pregunta sobre tu respuesta. El patrón comienza en las coordenadas globales (0,0). ¿Es posible dejar que el patrón use el sistema de coordenadas local del objeto adjunto? Quiero dibujar un rect en diferentes lugares en mi svg y lo que sucede es que el patrón se repite en el fondo del agujero y los objetos se usan como máscaras.
Tobias Golbs

77
@robertc, actualice su respuesta para mencionar que xlink:hrefestá en desuso desde SVG 2 y simplemente usar hrefahora. developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href
Blake Regalia
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.