Remplissez l'élément de chemin SVG avec une image d'arrière-plan


166

Est-il possible de définir un background-imagepour un <path>élément SVG ?

Par exemple, si je définis l'élément class="wall", le style CSS .wall {fill: red;}fonctionne, mais .wall{background-image: url(wall.jpg)}pas non plus .wall {background-color: red;}.


1
Montrant comment définir l'image d'arrière-plan pour le texte SVG, éventuellement par caractère: stackoverflow.com/a/10853878/405017
Phrogz

pour ceux qui recherchent plus d'informations détaillées, consultez ce lien d'
Paulo Bueno

Réponses:


261

Vous pouvez le faire en transformant l'arrière-plan en motif :

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

Ajustez la largeur et la hauteur en fonction de votre image, puis référencez-la à partir du chemin comme ceci:

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

Exemple de travail


3
très bien, cela fonctionne-t-il aussi avec les images base64? au lieu de wall.jpg quelque chose comme data:image/png;base64,iVBORw0KGgoAAvous le feriez en CSS normal?
Christoph

12
@Christoph je ne sais pas, essayez-le et voyez.
robertc

2
@robertc J'ai essayé et cela n'a pas fonctionné, mais j'avais un élément de style en double. En l'éliminant, cela a très bien fonctionné;)
Christoph

4
@robertc: J'ai une question concernant votre réponse. Le motif commence aux coordonnées globales (0,0). Est-il possible de laisser le motif utiliser le système de coordonnées local de l'objet attaché? Je veux dessiner un rect à différents endroits dans mon svg et ce qui se passe, c'est que le motif est répété dans le fond du trou et que les objets sont utilisés comme masques.
Tobias Golbs

7
@robertc veuillez mettre à jour votre réponse pour mentionner qu'elle xlink:hrefest obsolète depuis SVG 2 et pour l'utiliser simplement hrefmaintenant. developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href
Blake Regalia
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.