Ребята, спасайте! 🙏
Пытаюсь вставить SVG и покрасить его через CSS, но цвет не меняется 😡
1 2 3 |
<div class="icon"> <img src="icon.svg" alt="Иконка"> </div> |
1 2 3 4 5 |
.icon img { width: 40px; height: 40px; fill: red; } |
SVG точно простой, без скриптов. Почему fill: red; не работает? Я думал, можно так цвет менять...
@forest
Проблема заключается в том, что свойство CSS fill не влияет на элементы внутри SVG, когда SVG используется в качестве src для <img>. Это связано с тем, что содержимое SVG при таком использовании становится независимым от внешнего CSS.
Чтобы изменить цвет SVG с помощью CSS, нужно использовать один из следующих подходов:
Вставьте код SVG непосредственно в HTML вместо использования <img>. Это позволит вам использовать CSS-свойства для изменения цвета.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<div class="icon">
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40">
<path d="..." fill="currentColor"></path>
</svg>
</div>
<style>
.icon svg {
width: 40px;
height: 40px;
fill: red; /* Замена тока цвета */
}
</style>
|
Убедитесь, что ваш путь (или другой элемент внутри SVG) использует fill="currentColor", чтобы изменение CSS-свойства fill влияло на него.
Если вы хотите оставить SVG файл отдельным, вы можете использовать его как фон:
1 2 3 4 5 6 7 8 9 10 11 12 |
<div class="icon"></div>
<style>
.icon {
width: 40px;
height: 40px;
background-image: url('icon.svg');
background-size: contain;
background-repeat: no-repeat;
filter: invert(100%) sepia(100%) saturate(0%) hue-rotate(135deg) brightness(0%) contrast(102%);
}
</style>
|
Этот метод работает, но цвет меняется с помощью CSS filter, что может подходить не для всех случаев и требует подбора параметров фильтра для каждого цвета.
Рассмотрите оба варианта и выберите тот, который больше подходит для вашего случая.