Помещая вывод SVG прямо в линию с кодом страницы, я могу просто изменить цвета заливки с помощью CSS следующим образом:
polygon.mystar {
fill: blue;
}
circle.mycircle {
fill: green;
}
Это прекрасно работает, однако я ищу способ изменить атрибут "fill" SVG, когда он используется как BACKGROUND-IMAGE.
html {
background-image: url(../img/bg.svg);
}
Как я могу изменить цвета сейчас? Это вообще возможно?
Для справки, вот содержимое моего внешнего файла SVG:
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="320px" height="100px" viewBox="0 0 320 100" enable-background="new 0 0 320 100" xml:space="preserve">
<polygon class="mystar" fill="#3CB54A" points="134.973,14.204 143.295,31.066 161.903,33.77 148.438,46.896 151.617,65.43 134.973,56.679
118.329,65.43 121.507,46.896 108.042,33.77 126.65,31.066 "/>
<circle class="mycircle" fill="#ED1F24" cx="202.028" cy="58.342" r="12.26"/>
</svg>
Ответы:
Один из способов сделать это состоит в том, чтобы обслуживать ваш svg с какого-либо серверного механизма. Просто создайте сторону сервера ресурсов, которая выводит ваш svg в соответствии с параметрами GET, и вы обслуживаете его по определенному URL.
Тогда вы просто используете этот URL в вашем CSS.
Потому что как фоновое изображение, оно не является частью DOM, и вы не можете им манипулировать. Другой возможностью было бы использовать его регулярно, встраивать его в страницу обычным способом, но расположить его абсолютно, сделать его шириной и высотой страницы, а затем использовать свойство z-index css, чтобы поместить его позади всех других элементов DOM. на странице.
источник
<?php header('Content-type: image/svg+xml'); ?>
Мне нужно что-то подобное и хотел придерживаться CSS. Вот миксины LESS и SCSS, а также простой CSS, который может помочь вам в этом. К сожалению, поддержка браузера немного слабовата. Подробнее о поддержке браузера смотрите ниже.
Меньше миксин:
МЕНЬШЕЕ использование:
SCSS mixin:
Использование SCSS:
CSS:
Вот дополнительная информация о встраивании полного кода SVG в ваш файл CSS. Он также упомянул совместимость браузера, которая слишком мала, чтобы это было приемлемым вариантом.
источник
#
символа для ваших шестнадцатеричных цветов, чтобы это работало в Firefox. Так что-то вроде<svg fill="#ffffff" ...></svg>
становится<svg fill="%23ffffff" ...></svg>
.Вы можете использовать маски CSS. С помощью свойства 'mask' вы создаете маску, которая применяется к элементу.
Для получения дополнительной информации см. Эту замечательную статью: https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images
источник
Еще один подход заключается в использовании маски. Затем вы меняете цвет фона маскируемого элемента. Это имеет тот же эффект, что и изменение атрибута заполнения svg.
HTML:
CSS:
Вы найдете полное руководство здесь: http://codepen.io/noahblon/blog/coloring-svgs-in-css-background-images (не мое). Предлагает множество подходов (не ограничиваясь маской).
источник
mask
, ни IE, ни Edge не поддерживаются: caniuse.com/#search=maskС Sass это возможно! Единственное, что вам нужно сделать, это кодировать URL-адрес вашего SVG-кода. И это возможно с помощью вспомогательной функции в Sass. Я сделал кодовую ручку для этого. Посмотри на это:
http://codepen.io/philippkuehn/pen/zGEjxB
источник
статья и демонстрация Codeben
источник
Загрузите свой svg как текст.
Измените текст SVG с помощью JavaScript, чтобы изменить цвет краски / обводки / заливки [s].
Затем вставьте измененную строку svg inline в ваш css, как описано здесь .
источник
Теперь вы можете добиться этого на клиентской стороне следующим образом:
Скрипка здесь!
источник
Вы можете сохранить SVG в переменной. Затем управляйте строкой SVG в зависимости от ваших потребностей (например, установите ширину, высоту, цвет и т. Д.). Затем используйте результат для установки фона, например
Я тоже сделал демо, http://sassmeister.com/gist/4cf0265c5d0143a9e734 .
Этот код делает несколько предположений о SVG, например, у этого
<svg />
элемента нет существующего цвета заливки и что не заданы ни свойства ширины, ни высоты. Поскольку входные данные жестко закодированы в документе SCSS, эти ограничения довольно легко реализовать.Не беспокойтесь о дублировании кода. GZIP сжатие делает разницу незначительной.
источник
Вы можете создать свою собственную функцию SCSS для этого. Добавьте следующее в ваш файл config.rb.
Тогда вы можете использовать его в своем CSS:
Вам нужно будет отредактировать SVG-файлы и заменить все атрибуты заливки в разметке на fill = "{color}"
Путь к значку всегда указывается относительно вашего параметра images_dir в том же файле config.rb.
Подобно некоторым другим решениям, но это довольно чисто и сохраняет ваши файлы SCSS аккуратными!
источник
В некоторых (очень специфических) ситуациях это может быть достигнуто с помощью фильтра . Например, вы можете изменить синее изображение SVG на фиолетовое, повернув оттенок на 45 градусов, используя
filter: hue-rotate(45deg);
. Поддержка браузера минимальна, но это все еще интересная техника.демонстрация
источник
для монохромного фона вы можете использовать SVG с маской, где должен отображаться цвет фона
и чем использовать этот CSS
источник
Используйте фильтр сепии вместе с поворотом оттенка, яркостью и насыщенностью, чтобы создать любой цвет, который мы хотим.
https://css-tricks.com/solved-with-css-colorizing-svg-backgrounds/
источник
Позже к показу здесь, НО, я смог добавить цвет заливки к многоугольнику SVG, если вы можете напрямую редактировать код SVG, например, следующий svg отображает красный цвет вместо черного по умолчанию. Я не тестировал за пределами Chrome, хотя:
источник
Это мой любимый метод, но поддержка вашего браузера должна быть очень прогрессивной. С помощью свойства mask вы создаете маску, которая применяется к элементу. Везде, где маска непрозрачна или сплошна, нижележащее изображение просвечивает. Там, где оно прозрачно, основное изображение скрыто или скрыто. Синтаксис CSS-маски-изображения аналогичен background-image. посмотри на коде
mask
источник
Много IF, но если ваш SVG в кодировке pre64 запустится:
Затем начнется закодированная строка base64:
если начинается предварительно закодированная строка:
тогда это кодирует в:
Обе закодированные строки начинаются одинаково:
Причудой кодировки base64 является то, что каждые 3 входных символа становятся 4 выходными символами. Если SVG начинается следующим образом, то 6-символьный цвет заливки в шестнадцатеричном формате начинается точно с границы блока кодирования. Поэтому вы можете легко сделать кросс-браузерную замену JS:
Но ответ tnt-rox выше - это способ двигаться вперед.
источник