У меня есть несколько изображений SVG, цвета которых я хотел бы изменить с помощью внешних таблиц стилей, а не непосредственно в каждом файле SVG. Я не помещаю графику в строку, а храню ее в папке с изображениями и указываю на них.
Я реализовал их таким образом, чтобы всплывающие подсказки работали, и я также заключил каждый в <a>
тег, чтобы разрешить ссылку.
<a href='http://youtube.com/...' target='_blank'><img class='socIcon' src='images/socYouTube.svg' title='View my videos on YouTube' alt='YouTube' /></a>
А вот код изображения SVG:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="stylesheets/main.css" type="text/css"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 56.69 56.69">
<g>
<path d="M28.44......./>
</g>
</svg>
Я помещаю в свой внешний файл CSS (main.css) следующее:
.socIcon g {fill:red;}
Тем не менее, это не влияет на графику. Я также пробовал .socIcon g path {} и .socIcon path {}.
Что-то не так, возможно, моя реализация не допускает внешних модификаций CSS, или я пропустил шаг? Буду очень признателен за вашу помощь! Мне просто нужна возможность изменять цвета графики SVG через мою внешнюю таблицу стилей, но я не могу потерять всплывающую подсказку и возможность ссылки. (Хотя, возможно, я смогу жить без всплывающих подсказок.) Спасибо!
svg { fill:red; }
или дайте своему пути имя класса. Например,<path class="socIcon" d="M28.44 ..... />
это должно помочь.Ответы:
Ваш файл main.css будет влиять на содержимое SVG только в том случае, если файл SVG встроен в HTML:
https://developer.mozilla.org/en/docs/SVG_In_HTML_Introduction
Если вы хотите сохранить свой SVG в файлах, CSS необходимо определить внутри файла SVG.
Вы можете сделать это с помощью тега стиля:
http://www.w3.org/TR/SVG/styling.html#StyleElementExample
Вы можете использовать инструмент на стороне сервера для обновления тега стиля в зависимости от активного стиля. В рубине этого можно добиться с помощью Nokogiri. SVG - это просто XML. Так что, вероятно, существует множество доступных XML-библиотек, которые, вероятно, могут достичь этого.
Если вы не можете этого сделать, вам просто придется использовать их, как если бы они были PNG; создание набора для каждого стиля и встроенное сохранение их стилей.
источник
Вы можете делать все, что хотите, с одним (важным) предостережением: пути внутри вашего символа не могут быть стилизованы независимо с помощью внешнего CSS - вы можете установить свойства только для всего символа с помощью этого метода. Итак, если у вас есть два пути в вашем символе и вы хотите, чтобы они имели разные цвета заливки, это не сработает, но если вы хотите, чтобы все ваши пути были одинаковыми, это должно сработать.
В вашем html-файле вам нужно что-то вроде этого:
А во внешнем файле SVG вы хотите что-то вроде этого:
Поменяйте местами класс в
svg
теге (в вашем html) сfill-red
наfill-blue
и ta-da ... у вас синий вместо красного.Вы можете частично обойти ограничение возможности настраивать пути по отдельности с помощью внешнего CSS, смешивая и сопоставляя внешний CSS с некоторым встроенным CSS на определенных путях, поскольку встроенный CSS будет иметь приоритет. Этот подход будет работать, если вы делаете что-то вроде белого значка на цветном фоне, где вы хотите изменить цвет фона с помощью внешнего CSS, но сам значок всегда белый (или наоборот). Итак, с тем же HTML, что и раньше, и чем-то вроде этого кода svg, вы получите красный фон и белый путь переднего плана:
источник
symbol
элементе, т.е. вы можете простоid
указать элемент svg, поэтому: `<svg id = example" xmlns = " w3.org/2000/svg " viewBox = "0 0 256 256 "> <path class =" background "d =" M120 ... "/> <path class =" icon "style =" fill: white; "d =" M20 ... "/> </ svg > `Вы можете включить в свои файлы SVG ссылку на внешний файл css, используя:
Вам нужно поставить это после открывающего тега:
Это не идеальное решение, потому что вам нужно изменить файлы svg, но вы изменяете их один раз, и тогда все изменения стиля могут быть выполнены в одном файле css для всех файлов svg.
источник
Можно стилизовать SVG, динамически создав элемент стиля в JavaScript и добавив его к элементу SVG. Хакерский, но работает.
Вы можете динамически генерировать JavaScript в PHP, если хотите - тот факт, что это возможно в JavaScript, открывает множество возможностей.
источник
Один из подходов, который вы можете использовать, - это просто использовать фильтры CSS для изменения внешнего вида графики SVG в браузере.
Например, если у вас есть SVG-графика, которая использует красный цвет заливки в SVG-коде, вы можете сделать ее фиолетовой с настройкой поворота оттенка на 180 градусов:
Поэкспериментируйте с другими настройками поворота оттенка, чтобы найти нужные цвета.
Чтобы было ясно, приведенный выше CSS входит в CSS, который применяется к вашему HTML-документу. Вы задаете стиль тега img в HTML-коде, а не стилизуете код SVG.
Обратите внимание, что это не будет работать с графикой с черной, белой или серой заливкой. У вас должен быть реальный цвет, чтобы изменить оттенок этого цвета.
источник
Очень быстрое решение для динамического стиля с внешней таблицей стилей CSS, если вы используете
<object>
тег для встраивания своего svg.Этот пример добавит класс к корневому
<svg>
тегу при щелчке по родительскому элементу.file.svg:
html:
JQuery:
при щелчке по родительскому элементу:
тогда вы можете управлять своим css
svg.css:
источник
Это должно быть возможно сделать, сначала встраивая внешние изображения svg. Приведенный ниже код взят из замены всех изображений SVG встроенным SVG Джессом Фразелл.
источник
При использовании в
<image>
теге SVG должен содержаться в одном файле по соображениям конфиденциальности. Эта ошибка bugzilla содержит более подробную информацию о том, почему это так. К сожалению, вы не можете использовать другой тег, например<iframe>
потому что он не будет работать как ссылка, поэтому вам придется вставлять CSS в<style>
тег внутри самого файла.Еще один способ сделать это - разместить данные SVG в основном файле html, т.е.
Вы можете стилизовать это с помощью внешнего файла CSS, используя
<link>
тег HTML .источник
Я предлагаю вам использовать для этого PHP. На самом деле нет лучшего способа сделать это без значков шрифтов, и если вы сопротивляетесь их использованию, вы можете попробовать следующее:
А позже вы можете использовать этот файл,
filename.php?color=#ffffff
чтобы получить файл svg желаемого цвета.источник
if (!preg_match('/^[#][0-9a-f]{6}$/i', $_GET['color'])) die('Oops!');
(поместите его где-нибудь в начальный блок PHP).Что мне подходит: тег стиля с правилом @import
источник
Я знаю, что это старый пост, но просто чтобы решить эту проблему ... вы просто используете свои классы не в том месте: D
Прежде всего вы можете использовать
в твоем,
main.css
чтобы он стал красным. Это имеет эффект. Возможно, вы также можете использовать селекторы узлов, чтобы получить определенные пути.Во-вторых, вы объявили класс в
img
-Tag.На самом деле вы должны объявить это внутри своего SVG. если у вас есть разные пути, вы, конечно, можете определить больше.
теперь вы можете изменить цвет на свой
main.css
вкусисточник
<?xml-stylesheet href="stylesheets/main.css" type="text/css"?>
<?xml-stylesheet ... ?>
объявление внутри вашего SVG. Думаю, это сработает. Это похоже на другие ответы, рекомендующие<link rel="stylesheet" ... >
внутри SVG. У него также есть те же проблемы (вам необходимо обновить каждый SVG, чтобы он указывал на таблицу стилей, и любое изменение имени или местоположения таблицы стилей означает необходимость снова изменить все SVG).Примечание. Внешние стили не будут работать, если вы включите SVG внутри
<img>
тега. Он будет отлично работать внутри<div>
тегаисточник
@leo вот версия angularJS, еще раз спасибо
источник
Этот метод будет работать, если svg просматривается в веб-браузере, но как только этот код загружен на сервер и класс для значка svg закодирован, как если бы это было фоновое изображение, цвет теряется и возвращается к цвету по умолчанию . Похоже, что цвет не может быть изменен из внешней таблицы стилей, хотя и класс svg для цвета, и класс верхнего уровня для отображения и положения svg сопоставлены с одним и тем же каталогом.
источник