Задать вопрос
@caof19

Как использовать градиент в SVG?

Здравствуйте, такая проблема у меня есть svg файл со спрайтам, там лежит один спрайт, у него прописан градиент, кодом выглядит так:
<symbol fill="none" viewBox="0 0 56 64" id="garant" xmlns="http://www.w3.org/2000/svg">
        <path fill-rule="evenodd" clip-rule="evenodd"
              d="M28.888.215l25.575 11.352a2.495 2.425 0 0 1 1.483 2.28V33.56c0 5.492-1.562 11.023-4.518 15.996a2.495 2.495 0 1 1-4.29-2.55c2.498-4.201 3.817-8.851 3.817-13.446V15.47L27.881 5.227 5.045 15.464V33.56c0 13.32 10.941 25.45 25.955 25.45 4.247 0 8.398-1.388 12.006-4.014a2.495 2.495 0 0 1 2.936 4.035C38.476 62.281 33.31 64 28 64c-3.791 0-7.5-.893-11.022-2.653-3.288-1.644-6.265-3.963-8.846-6.895C2.999 48.624.055 41.01.055 33.56V13.848c0-.983.577-1.875 1.444-2.277L26.855.218a2.495 2.495 0 0 1 2.033-.003zM26.772 38.3l12.299-17.178a2.425 2.495 0 1 1 4.057 2.904L30.78 41.276a2.306 2.306 0 0 1-.084.11 6.431 6.431 0 0 1-4.998 2.396 6.433 6.433 0 0 1-4.448-1.79l-7.962-7.77a2.495 2.495 0 0 1 3.485-3.571l7.948 7.757c.392.367.837.396 1.069.381.226-.015.646-.099.982-.489z"
              fill="url(#fpaint0_linear)"/>
        <defs>
            <linearGradient id="fpaint0_linear" x1=".055" y1="32.033" x2="55.946" y2="32.033"
                            gradientUnits="userSpaceOnUse">
                <stop stop-color="#944DEB"/>
                <stop offset="1" stop-color="#4F76DC"/>
            </linearGradient>
        </defs>
    </symbol>

Далее я его использую при помощи svg-use
<svg class="icon icon-garant">
              <use href="icon/spriteraw.svg#garant"></use>
            </svg>

Но, почему то, теги , в которых прописан градиент, в html не отображаются. Если вставить svg кодом на страницу, то отображается все как должно, но не хочу засорять html
  • Вопрос задан
  • 1529 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
develx
@develx Куратор тега CSS
Web developer
Если вставить svg кодом на страницу, то отображается все как должно, но не хочу засорять html

градиенты, фильтры, clip-path, маски в svg из внешнего файла не будут работать
dreamhelg.ru/2017/02/symbol-svg-sprite-detail-guide - здесь написано по поводу градиентов
https://css-tricks.com/ используют из-за этого спрайты в html
Ответ написан
RAX7
@RAX7
Можешь только градиент в html засунуть
<body>
  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" style="width:0;height:0;position:absolute;">
    <defs>
      <linearGradient id="fpaint0_linear" x1=".055" y1="32.033" x2="55.946" y2="32.033" gradientUnits="userSpaceOnUse">
        <stop stop-color="#944DEB" />
        <stop offset="1" stop-color="#4F76DC" />
      </linearGradient>
    </defs>
  </svg>

  <svg class="icon icon-garant" fill="url(#fpaint0_linear)">
    <use href="spriteraw.svg#garant" ></use>
  </svg>
</body>


а в спрайте убрать fill
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol viewBox="0 0 56 64" id="garant" xmlns="http://www.w3.org/2000/svg">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M28.888.215l25.575 ..."/>
</symbol>
</svg>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Aetae
@Aetae
Тлен
В фурифоксе это и так работает. Как и положено по спеке.
В хромом приемнике осла - многолетний багточнее).

Решения нет, только пихать на страницу, что убивает весь смысл.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Лига Роботов Новосибирск
от 65 000 до 85 000 ₽
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
Love.ru Пермь
от 100 000 ₽