У меня есть SVG, встроенный в мой HTML, например, так:

<body>
  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 256 256">
    <defs>
      <g id="my_element">
        <polygon points="10 4829 45 294"/>
        <polygon points="30 390 93 20"/>
      </g>
    </defs>
  </svg>
...

Позже в моем html я ссылаюсь на элемент svg следующим образом:

<svg viewBox="0 0 256 256" class="style1"><use xlink:href="#my_element"></use></svg>

Это работает отлично. Если в моем svg есть несколько групп, я могу вставить их в HTML, просто сославшись на их идентификатор группы (#my_element).

Кроме того, я могу вносить изменения в CSS для каждого SVG на лету, например, так:

svg.style1 {
  fill: red;
}

Тем не менее, это где моя проблема. Я не могу внести изменения атрибутов CSS в отдельные компоненты SVG. Это не работает:

svg.style1 polygon {
  stroke: purple;
  fill: yellow;
}

Очевидно, что я могу внести эти изменения непосредственно в SVG, но мне нужно иметь возможность вставлять несколько SVG одного и того же #my_element и управлять цветами на отдельном уровне. Если бы я внес изменения в сам SVG, то все элементы имели бы одинаковые цвета независимо от того, какой стиль я применил к SVG. Поэтому мне нужно уметь делать такие вещи:

svg.style1 polygon {
  stroke: purple;
  fill: yellow;
}

svg.style2 polygon {
  stroke: red;
  fill: white;
}

Можно ли это сделать? Можно ли управлять атрибутами CSS отдельных компонентов SVG при использовании синтаксиса use xlink:href ?

1 ответ1

1

Элемент <use> в SVG не поддерживает атрибут class , см. https://stackoverflow.com/a/13674240/304371

Простая группировка решает эту проблему:

<g id="wheel_front" class="spin">
   <use xlink:href="#wheelBase"  />
</g>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .