@js-newbie

Как управлять значением атрибута fill path svg внутри background: url() псевдо-элемента?

Нужно управлять значением атрибута fill элемента path svg вложенного в псевдо-элемент ::before через свойство background: url()
#target::before {background: url("data:image/svg+xml;charset=utf-8,%3Csvg ... path ... %3C/svg%3E");}

Для такого вложения эти правила не работают:
#target svg path {fill:#f00;}
#target::before svg path {fill:#f00;}

Смысл в том, что у меня десять вариантов закрашивания и я пытаюсь задать эти варианты так:
[data-color="f00"] #target svg path {fill:#f00;}
[data-color="0f0"] #target svg path {fill:#0f0;}
[data-color="00f"] #target svg path {fill:#00f;}
и т.д.
(data-color меняется через js)

Но это бесполезно. Додумался только описывать каждый вариант полностью:
[data-color="f00"] #target::before {background: url("data:image/svg+xml ... path ... fill='%23f00 ... ");}
[data-color="0f0"] #target::before {background: url("data:image/svg+xml ... path ... fill='%230f0 ... ");}
[data-color="00f"] #target::before {background: url("data:image/svg+xml ... path ... fill='%2300f ... ");}
и т.д.

Но получается страшное нагромождение. Может быть есть более изящный способ?
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
@js-newbie Автор вопроса
Благодаря наводке Ankhena нашёл идеальное решение на чистом CSS - использование mask-image.

Рабочий вариант выглядит так:
#target::before {-webkit-mask-image: url("data:image/svg+xml; ... ");}

[data-color="f00"] #target::before {background-color:#f00;}
[data-color="0f0"] #target::before {background-color:#0f0;}
[data-color="00f"] #target::before {background-color:#00f;}
и т.д.
(data-color меняется через js)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы