У меня есть фон с шаблоном SVG, и я хочу изменить только цвет элемента, на который наведен курсор, а не все.
Я пытался использовать: hover для своего многоугольного тега, но это не сработало.
svg:hover pattern polygon{
fill:red;
-webkit-transition: padding 0s;
}
polygon{
-webkit-transition: all 0.75s ease-in;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<svg xmlns = "http://www.w3.org/2000/svg" width = "100%" height = "100%">
<defs>
<pattern id = "stars" patternUnits = "userSpaceOnUse" width = "100" height = "100">
<polygon points = "50,9 60.5,39.5 92.7,40.1 67,59.5 76.4,90.3 50,71.9 23.6,90.3 32.9,59.5 7.2,40.1 39.4,39.5" fill = "blue"/>
</pattern>
</defs>
<rect width = "100%" height = "100%" fill = "url(#stars)" />
</svg>
</div>Возможно, мне нужно использовать JS, но я не знаю, как это сделать. Я впервые работаю с SVG, я искал в Интернете, но не нашел ничего полезного.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете сделать из них разные элементы:
polygon:hover{
fill:red;
transition: 0s;
}
polygon {
transition: all 0.5s ease-in;
}<svg xmlns = "http://www.w3.org/2000/svg" width = "100%" height = "100%">
<polygon points = "50,9 60.5,39.5 92.7,40.1 67,59.5 76.4,90.3 50,71.9 23.6,90.3 32.9,59.5 7.2,40.1 39.4,39.5" fill = "blue"/>
<polygon points = "50,9 60.5,39.5 92.7,40.1 67,59.5 76.4,90.3 50,71.9 23.6,90.3 32.9,59.5 7.2,40.1 39.4,39.5" transform = "translate(100 0)" fill = "blue"/>
<polygon points = "50,9 60.5,39.5 92.7,40.1 67,59.5 76.4,90.3 50,71.9 23.6,90.3 32.9,59.5 7.2,40.1 39.4,39.5" transform = "translate(200 0)" fill = "blue"/>
<polygon points = "50,9 60.5,39.5 92.7,40.1 67,59.5 76.4,90.3 50,71.9 23.6,90.3 32.9,59.5 7.2,40.1 39.4,39.5" transform = "translate(300 0)" fill = "blue"/>
</svg>@Plum С шаблоном Я не думаю, что вы можете настроить таргетинг на элемент индивидуально, потому что это шаблон и рассматривается как один элемент
Как заявил Темани Афиф, вы не сможете нацеливаться на отдельные элементы шаблона, но вы можете программно моделировать шаблон:
var svg = document.querySelector('svg');
const X_OFFSET = 100;
for (let i = 0 ; i < 10 ; i++) {
var useElement = document.createElementNS('http://www.w3.org/2000/svg', 'use');
useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#star');
useElement.setAttribute('transform', 'translate(' + (X_OFFSET * i) + ' 0)');
svg.appendChild(useElement);
}polygon:hover{
fill:red;
-webkit-transition: padding 0s;
}
polygon{
-webkit-transition: all 0.75s ease-in;
}<div>
<svg xmlns = "http://www.w3.org/2000/svg" width = "100%" height = "100%">
<defs>
<polygon id = "star" points = "50,9 60.5,39.5 92.7,40.1 67,59.5 76.4,90.3 50,71.9 23.6,90.3 32.9,59.5 7.2,40.1 39.4,39.5" fill = "blue"/>
</defs>
</svg>
</div>Какой браузер?
Хорошо, я подтверждаю, что он не работает в Chrome (это с Firefox), я проверю это ...
Небольшой обходной путь в ожидании лучшего решения: jsfiddle.net/6yzx8bar/2
@Plum: спасибо за ваш вклад! Вот еще один обходной путь, состоящий в клонировании звездообразного узла вместо создания узлов use, но он каким-то образом уводит нас от исходной проблемы ... jsfiddle.net/vcrbx2qp/33
Ничего страшного, если у меня мало элементов, но нет, если их много. Я не знаю, сколько элементов у меня будет (может быть, 50+), почему я использую паттерн