Заполните элемент пути SVG фоновым изображением


166

Можно ли установить элемент background-imageSVG <path>?

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


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

для тех, кто ищет больше в глубокой информации, проверьте эту ссылку
Пауло Буэно

Ответы:


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
очень хорошо, это работает с изображениями base64 тоже? вместо wall.jpg что-то data:image/png;base64,iVBORw0KGgoAAпохожее на обычное CSS?
Кристоф

12
@ Кристоф, я не знаю, попробуй и посмотри.
Робертc

2
@robertc Я пытался, и это не сработало, но у меня был дубликат элемента стиля. Устраняя его, он работал просто отлично;)
Кристоф

4
@robertc: У меня есть вопрос относительно вашего ответа. Паттерн начинается с глобальных координат (0,0). Можно ли позволить шаблону использовать локальную систему координат объекта, к которому прикреплен? Я хочу нарисовать прямоугольник в разных местах в svg, и в результате получается, что рисунок повторяется на фоне отверстия, а объекты используются в качестве масок.
Тобиас Голбс

7
@robertc, пожалуйста, обновите свой ответ, чтобы упомянуть, что xlink:hrefон устарел с SVG 2 и просто использовать hrefсейчас. developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href
Блейк Регалия
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.