it-swarm.com.ru

Задать фоновое изображение CSS для встроенного символа SVG?

Я знаю, что внешние файлы SVG могут быть связаны с фоновыми изображениями:

background-image: url(Icon.svg);

и идентификаторы символов могут быть нацелены из внешнего файла SVG:

background-image: url(Icons.svg#Icon-Menu);

но как я могу установить фоновое изображение для символа inline svg? (Как показано ниже) 

Мой svg находится вверху тела моей веб-страницы, а не во внешнем файле.

Я хочу, чтобы фоновое изображение .test было символом #Icon-Menu.

.test{
  background:#ddd url('../#Icon-Menu');
  height:100px;
  width:100px;
  display:block;
}
<div style="height: 0; width: 0; position: absolute; visibility: hidden;">
  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <symbol id="Icon-Menu" viewBox="0 0 512 512">
      <title>Menu</title>
      <path d="M93.417,5.333H6.583c-1.654,0-3,1.346-3,3v13.334c0,1.654,1.346,3,3,3h86.833c1.654,0,3-1.346,3-3V8.333	C96.417,6.679,95.071,5.333,93.417,5.333z" />
      <path d="M93.417,40.333H6.583c-1.654,0-3,1.346-3,3v13.334c0,1.654,1.346,3,3,3h86.833c1.654,0,3-1.346,3-3V43.333	C96.417,41.679,95.071,40.333,93.417,40.333z" />
      <path d="M93.417,75.333H6.583c-1.654,0-3,1.346-3,3v13.334c0,1.654,1.346,3,3,3h86.833c1.654,0,3-1.346,3-3V78.333	C96.417,76.679,95.071,75.333,93.417,75.333z" />
    </symbol>
  </svg>
</div>

<div class="test"></div>

25
DreamTeK

Изображение должно быть полным файлом.

Из спецификации SVG ...

Элемент 'image' указывает, что содержимое всего файла должно быть отображено ...

То же самое верно для фонового изображения и т.д.

4
Robert Longson

@ Роберт Лонгсон

вот так. Но вы можете сделать это таким образом .. Но символ не так, как он будет работать. К сожалению, вы должны использовать «г» или что-то подобное для ссылки.

body {
  background: url(http://www.broken-links.com/tests/images/faces.svg#devil-view);
}

http://codepen.io/Type-Style/pen/ByvKJq

Это не будет работать, если svg находится в разметке.

4
Type-Style

(1) одним из возможных способов использования inline SVG было бы использование символов и абсолютного наложения DIV:

<a class="preview-modal__device-icon-link" ng-click="setPreviewWidth('phone')">
   <svg class="preview-modal__device-icon"><use xlink:href="#icon-phone">
   </use></svg>
</a>

(2) Вторым решением будет использование Data URI: Здесь есть хорошая информация: https://css-tricks.com/using-svg/ С помощью этого инструмента: Mobilefish.com онлайн-инструмент для конвертации

CSS:

.logo {
  background: url("data:image/svg+xml;base64,[data]");
}

HTML:

<img src="data:image/svg+xml;base64,[data]">
0
Stxle