Залийте елемент шляху SVG фоновим зображенням


166

Чи можна встановити background-imageдля <path>елемента SVG ?

Наприклад, якщо я встановив елемент class="wall", стиль CSS .wall {fill: red;}працює, але .wall{background-image: url(wall.jpg)}ні, ні .wall {background-color: red;}.


1
Показано , як встановити фонове зображення для SVG тексту, необов'язково на кожен персонаж основі: stackoverflow.com/a/10853878/405017
Phrogz

для тих, хто шукає ще детальної інформації, ознайомтесь із посиланням на
Paulo Bueno

Відповіді:


261

Це можна зробити, перетворивши фон у візерунок :

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

Робочий приклад


3
дуже приємно, чи працює це також із базовими зображеннями64? замість wall.jpg щось подібне data:image/png;base64,iVBORw0KGgoAAна звичайний CSS?
Крістоф

12
@Christoph Я не знаю, спробуйте і подивіться.
robertc

2
@robertc Я спробував, і це не вийшло, але у мене був дублюючий елемент стилю. Усунувши це, це спрацювало чудово;)
Крістоф

4
@robertc: У мене питання стосовно вашої відповіді. Візерунок починається з глобальних координат (0,0). Чи можна дозволити шаблону використовувати локальну систему координат від об'єкта, що додається? Я хочу намалювати прямокутник у різних місцях мого svg, і те, що відбувається, полягає в тому, що візерунок повторюється на тлі отворів, а об'єкти використовуються як маски.
Тобіас Гольбс

6
@robertc, будь ласка, оновіть свою відповідь, щоб згадати, що xlink:hrefце застаріле з часу SVG 2, і просто використовувати його hrefзараз. developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href
Blake Regalia
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.