Mam kilka grafik SVG, które chciałbym zmodyfikować za pomocą moich zewnętrznych arkuszy stylów - nie bezpośrednio w każdym pliku SVG. Nie umieszczam grafik w jednej linii, ale przechowuję je w folderze z obrazami i wskazuję na nie.
Zaimplementowałem je w ten sposób, aby umożliwić działanie podpowiedzi, a także zawinąłem każdą w <a>
tag, aby umożliwić link.
<a href='http://youtube.com/...' target='_blank'><img class='socIcon' src='images/socYouTube.svg' title='View my videos on YouTube' alt='YouTube' /></a>
A oto kod grafiki 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>
W moim zewnętrznym pliku CSS (main.css) umieściłem:
.socIcon g {fill:red;}
Jednak nie ma to wpływu na grafikę. Próbowałem też .socIcon g path {} i .socIcon path {}.
Coś jest nie tak, być może moja implementacja nie pozwala na zewnętrzne modyfikacje CSS lub przegapiłem krok? Byłbym wdzięczny za twoją pomoc! Potrzebuję tylko możliwości modyfikowania kolorów grafiki SVG za pomocą mojego zewnętrznego arkusza stylów, ale nie mogę stracić podpowiedzi i możliwości linków. (Mogę żyć bez podpowiedzi.) Dzięki!
svg { fill:red; }
lub nadaj swojej ścieżce nazwę klasy. Np.<path class="socIcon" d="M28.44 ..... />
To powinno załatwić sprawę.Odpowiedzi:
Twój plik main.css miałby wpływ na zawartość SVG tylko wtedy, gdy plik SVG jest zawarty w kodzie HTML:
https://developer.mozilla.org/en/docs/SVG_In_HTML_Introduction
Jeśli chcesz zachować swój SVG w plikach, CSS musi być zdefiniowany w pliku SVG.
Możesz to zrobić za pomocą tagu stylu:
http://www.w3.org/TR/SVG/styling.html#StyleElementExample
Możesz użyć narzędzia po stronie serwera, aby zaktualizować tag stylu w zależności od aktywnego stylu. W rubinie można to osiągnąć z Nokogiri. SVG to po prostu XML. Więc prawdopodobnie istnieje wiele dostępnych bibliotek XML, które prawdopodobnie mogą to osiągnąć.
Jeśli nie jesteś w stanie tego zrobić, będziesz musiał po prostu używać ich tak, jakby były plikami PNG; tworzenie zestawu dla każdego stylu i zapisywanie ich stylów bezpośrednio.
źródło
Możesz robić, co chcesz, z jednym (ważnym) zastrzeżeniem: ścieżki w Twoim symbolu nie mogą być stylizowane niezależnie przez zewnętrzny CSS - możesz ustawić właściwości tylko dla całego symbolu za pomocą tej metody. Tak więc, jeśli masz dwie ścieżki w swoim symbolu i chcesz, aby miały różne kolory wypełnienia, to nie zadziała, ale jeśli chcesz, aby wszystkie ścieżki były takie same, powinno to działać.
W swoim pliku html chcesz coś takiego:
A w zewnętrznym pliku SVG chcesz coś takiego:
Zamień klasę na
svg
tagu (w swoim html) zfill-red
dofill-blue
i ta-da ... masz niebieski zamiast czerwonego.Możesz częściowo obejść ograniczenie możliwości kierowania ścieżek oddzielnie za pomocą zewnętrznego CSS, mieszając i dopasowując zewnętrzny CSS do niektórych wbudowanych CSS na określonych ścieżkach, ponieważ wbudowany CSS będzie miał pierwszeństwo. To podejście zadziała, jeśli robisz coś w rodzaju białej ikony na kolorowym tle, gdzie chcesz zmienić kolor tła za pomocą zewnętrznego CSS, ale sama ikona jest zawsze biała (lub odwrotnie). Tak więc, z tym samym kodem HTML co poprzednio i czymś w rodzaju tego kodu SVG, otrzymasz czerwone tło i białą ścieżkę pierwszego planu:
źródło
symbol
element, tzn. Możesz po prostu nadaćid
element svg, więc: `<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 > `Możesz dołączyć do swoich plików SVG łącze do zewnętrznego pliku css za pomocą:
Musisz to umieścić po otwarciu tagu:
Nie jest to idealne rozwiązanie, ponieważ musisz zmodyfikować pliki svg, ale modyfikujesz je raz, a wszystkie zmiany stylów można zrobić w jednym pliku css dla wszystkich plików svg.
źródło
Istnieje możliwość nadania stylu SVG poprzez dynamiczne utworzenie elementu stylu w JavaScript i dołączenie go do elementu SVG. Hacky, ale działa.
Jeśli chcesz, możesz wygenerować JavaScript dynamicznie w PHP - fakt, że jest to możliwe w JavaScript, otwiera niezliczone możliwości.
źródło
Jednym ze sposobów, które możesz zastosować, jest użycie filtrów CSS do zmiany wyglądu grafiki SVG w przeglądarce.
Na przykład, jeśli masz grafikę SVG, która używa wypełnienia w kolorze czerwonym w kodzie SVG, możesz zmienić jej kolor na fioletowy z ustawieniem obracania barwy o 180 stopni:
Poeksperymentuj z innymi ustawieniami obracania barwy, aby znaleźć żądane kolory.
Żeby było jasne, powyższy CSS trafia do CSS, który jest stosowany do twojego dokumentu HTML. Stylizujesz tag img w kodzie HTML, a nie stylizujesz kod SVG.
Pamiętaj, że to nie zadziała w przypadku grafiki, która ma wypełnienie w kolorze czarnym, białym lub szarym. Musisz mieć tam rzeczywisty kolor, aby obrócić odcień tego koloru.
źródło
Bardzo szybkie rozwiązanie, aby mieć dynamiczny styl z zewnętrznym arkuszem stylów css, w przypadku, gdy używasz
<object>
tagu do osadzenia pliku svg.Ten przykład doda klasę do
<svg>
znacznika głównego po kliknięciu elementu nadrzędnego.plik.svg:
html:
JQuery:
element nadrzędny po kliknięciu:
wtedy możesz zarządzać swoim css
svg.css:
źródło
Powinno to być możliwe, najpierw wstawiając zewnętrzne obrazy svg. Poniższy kod pochodzi z zastąpienia wszystkich obrazów SVG wbudowanym SVG autorstwa Jess Frazelle.
źródło
W przypadku użycia w
<image>
tagu plik SVG musi znajdować się w jednym pliku ze względu na ochronę prywatności. Ten błąd bugzilli zawiera więcej szczegółów na temat tego, dlaczego tak się dzieje. Niestety nie możesz użyć innego tagu, takiego jak tag,<iframe>
ponieważ nie będzie on działał jako łącze, więc będziesz musiał osadzić CSS w<style>
tagu w samym pliku.Innym sposobem na to byłoby umieszczenie danych SVG w głównym pliku HTML, tj
Możesz stylizować to za pomocą zewnętrznego pliku CSS za pomocą
<link>
tagu HTML .źródło
Proponuję użyć do tego PHP. Naprawdę nie ma lepszego sposobu na zrobienie tego bez czcionek ikon, a jeśli nie chcesz ich używać, możesz spróbować tego:
A później możesz użyć tego pliku,
filename.php?color=#ffffff
aby uzyskać plik SVG w żądanym kolorze.źródło
if (!preg_match('/^[#][0-9a-f]{6}$/i', $_GET['color'])) die('Oops!');
(umieść to gdzieś w początkowym bloku PHP).Co mi pasuje: tag stylu z regułą @import
źródło
Wiem, że to stary post, ale żeby rozwiązać ten problem ... po prostu używasz swoich zajęć w złym miejscu: D
Przede wszystkim możesz użyć
w twoim,
main.css
żeby było czerwone. To ma wpływ. Prawdopodobnie możesz również użyć selektorów węzłów, aby uzyskać określone ścieżki.Po drugie, zadeklarowałeś klasę jako
img
-Tag.Właściwie powinieneś zadeklarować to w swoim SVG. jeśli masz różne ścieżki, możesz oczywiście zdefiniować więcej.
teraz możesz zmienić kolor według własnego
main.css
uznaniaźródło
<?xml-stylesheet href="stylesheets/main.css" type="text/css"?>
<?xml-stylesheet ... ?>
deklarację w swoim SVG. Myślę, że to zadziała. Jest podobny do innych odpowiedzi, w których zaleca się umieszczenie<link rel="stylesheet" ... >
wewnątrz SVG. Ma również te same problemy (musisz zaktualizować każdy plik SVG, aby wskazywał na arkusz stylów, a każda zmiana nazwy lub lokalizacji arkusza stylów oznacza konieczność ponownej zmiany wszystkich plików SVG).Uwaga: Style zewnętrzne nie będą działać, jeśli umieścisz wewnątrz
<img>
znacznika SVG . Idealnie sprawdzi się wewnątrz<div>
metkiźródło
@leo to wersja angularJS, jeszcze raz dziękuję
źródło
Ta metoda zadziała, jeśli plik svg jest wyświetlany w przeglądarce internetowej, ale jak tylko ten kod zostanie przesłany na serwer, a klasa ikony SVG zostanie zakodowana tak, jakby była obrazem tła, kolor zostanie utracony i powróci do domyślnego koloru . Wygląda na to, że kolor nie może zostać zmieniony z zewnętrznego arkusza stylów, mimo że zarówno klasa svg dla koloru, jak i klasa najwyższej warstwy dla wyświetlania i pozycja svg są odwzorowane w tym samym katalogu.
źródło