#css #reactjs #svg
Вопрос:
У меня есть набор .svg
значков разных цветов для разных путей. В настоящее время я использую пакет react-svg для их визуализации, и это выглядит примерно так:
<span>
<ReactSVG
src="/icons/setting.svg"
beforeInjection={svg => {
svg.classList.add("svg-classname");
}}
/>
</span>
Это прекрасно работает. Теперь я хочу изменить все цвета пути на серый и вернуть все исходные цвета при наведении курсора пользователя, чего я пытаюсь достичь в своей scss
работе, делая:
.svg-classname {
path,
rect,
circle {
fill: #888;
color: #888;
}
amp;:hover {
path,
rect,
circle {
fill: initial;
color: initial;
}
}
}
Это явно не работает! Я не эксперт по svgs, поэтому любые предложения (даже за пределами использования react-svg
) действительно приветствуются.
Комментарии:
1. Два предложения: попробуйте «наследовать» вместо «начальный», добавьте «обводку» вместе с «заливкой». Надеюсь, это поможет…
Ответ №1:
Простое решение проблемы D3 для решения вашей проблемы:
d3.selectAll('.my-svg-icon path')
.each(function() {
const path = d3.select(this);
const originalColor = path.attr('fill');
path.attr('fill', 'gray')
.on('mouseenter', () => path.attr('fill', originalColor))
.on('mouseleave', () => path.attr('fill', 'gray'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<svg class="my-svg-icon">
<path d="M 10,10 H 50 V 50 H 10 Z" fill="red"/>
</svg>
<svg class="my-svg-icon">
<path d="M 10,10 H 50 V 50 H 10 Z" fill="blue"/>
</svg>
Комментарии:
1. Это потрясающе! Спасибо, что ответили