Причина в способе подключения. Внешний SVG внутри img отображается как отдельное изображение. CSS страницы может задать размер самого img, но обычный селектор не проходит к его внутренним path, поэтому color на классе картинки не заменяет черный fill. Для частой смены цвета одноцветной иконки удобно встроить SVG в HTML и связать нужные заливки с currentColor. Например, у фигуры укажите fill="currentColor", а у svg назначьте класс icon. Затем правило .icon { color: teal; } задаст используемый цвет. Состояние наведения можно оформить на родительской кнопке, меняя ее color, если SVG наследует это значение. Для контурного рисунка аналогичная связь делается через stroke, а fill часто должен оставаться none. Если заменить все заливки подряд, тонкая контурная иконка может превратиться в сплошное пятно. Посмотрите на устройство исходного SVG и изменяйте только те фигуры, которым действительно нужен единый цвет. Презентационные атрибуты и inline-стили тоже участвуют в определении результата, поэтому при конфликте проверяйте Computed у конкретной фигуры. Для внешнего файла возможен другой подход: использовать его как маску, а цвет задать фоном элемента. Он подходит для одноцветного силуэта, но не сохраняет исходную многокрасочную картинку. Не подбирайте случайный filter, ожидая точного произвольного цвета во всех случаях. Независимо от способа вставки оставьте доступное название у кнопки с иконкой. Декоративный SVG рядом с понятным текстом можно скрыть от вспомогательных технологий, а кнопка только с рисунком должна иметь название действия.
Лучший ответ
Датахакер
Датахакер
Как поменять цвет svg css?
CurrentColor как раз нужен для состояний кнопки.