HTML
<img src="logo.svg" alt="Logo" class="logo-img">
css
.logo-img path {
fill: #000;
}
Powyższe svg ładuje się i jest natywnie, fill: #fff
ale kiedy użyję powyższego, css
aby spróbować zmienić go na czarny, nie zmienia się, to jest moja pierwsza gra z SVG i nie jestem pewien, dlaczego to nie działa.
Odpowiedzi:
Jeśli Twoim celem jest zmiana koloru logo i niekoniecznie POTRZEBUJESZ użyć CSS, nie używaj javascript ani jquery, jak sugerowały niektóre wcześniejsze odpowiedzi.
Aby dokładnie odpowiedzieć na oryginalne pytanie, po prostu:
Otwórz
logo.svg
w edytorze tekstu.poszukaj
fill: #fff
i zamień nafill: #000
Na przykład możesz
logo.svg
wyglądać tak po otwarciu w edytorze tekstu:... po prostu zmień wypełnienie i zapisz.
źródło
path
lub .circle
<path fill="#777777" d="m129.774,74.409c-5.523,...
fill="currentColor"
następniecolor
na elemencie nadrzędnym css-tricks.com/cascading-svg-fill-colorMożesz ustawić SVG jako maskę. W ten sposób ustawienie koloru tła będzie działało jako kolor wypełnienia.
HTML
CSS
JSFiddle: https://jsfiddle.net/KuhlTime/2j8exgcb/
MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/mask
Sprawdź, czy Twoja przeglądarka obsługuje tę funkcję: https://caniuse.com/#search=mask
źródło
mask
jestinvalid property value
. testuję to w chrome.Wypróbuj czysty CSS:
Więcej informacji w tym artykule https://blog.union.io/code/2017/08/10/img-svg-fill/
źródło
2018: Jeśli chcesz dynamiczny kolor, nie chcesz używać javascript i nie chcesz wstawiać SVG, użyj zmiennej CSS. Działa w Chrome, Firefox i Safari. edit: i Edge
W swojej SVG, zastąpić wszystkie wystąpienia
style="fill: #000"
zstyle="fill: var(--color_fill)"
.źródło
"This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped"
xlink:href
jest to przestarzałe na korzyśćhref
. Więc to może nadal działać.Najpierw będziesz musiał wstrzyknąć SVG do HTML DOM.
Istnieje biblioteka open source o nazwie SVGInject, która robi to za Ciebie. Używa tego
onload
atrybutu do uruchomienia zastrzyku.Oto minimalny przykład użycia SVGInject:
Po załadowaniu obrazu
onload="SVGInject(this)
uruchomi się zastrzyk, a<img>
element zostanie zastąpiony zawartością pliku SVG podanego w plikusrc
atrybucie.Rozwiązuje kilka problemów z wtryskiem SVG:
Pliki SVG można ukryć do momentu zakończenia wstrzykiwania. Jest to ważne, jeśli styl jest już zastosowany w czasie ładowania, co w przeciwnym razie spowodowałoby krótkie „niestylizowane flashowanie zawartości”.
Te
<img>
elementy automatycznie wstrzykiwać sobie. Jeśli dodajesz pliki SVG dynamicznie, nie musisz się martwić o ponowne wywołanie funkcji wstrzykiwania.Losowy ciąg jest dodawany do każdego identyfikatora w pliku SVG, aby uniknąć wielokrotnego posiadania tego samego identyfikatora w dokumencie, jeśli plik SVG zostanie wstrzyknięty więcej niż jeden raz.
SVGInject to zwykły Javascript i działa ze wszystkimi przeglądarkami obsługującymi SVG.
Oświadczenie: Jestem współautorem SVGInject
źródło
Odpowiedź od @Praveen jest solidna.
Nie mogłem zmusić go do zareagowania w mojej pracy, więc utworzyłem dla niego funkcję przeciągania jquery.
CSS
JS / JQuery
źródło
Dlaczego nie utworzyć strony internetowej z obrazem lub obrazami svg, zaimportować stronę internetową do css, a następnie po prostu zmienić kolor glifu za pomocą atrybutu koloru css? Nie wymaga javascript
źródło
Ta odpowiedź jest oparta na odpowiedzi https://stackoverflow.com/a/24933495/3890888, ale ze zwykłą wersją skryptu JavaScript używanego tam.
Musisz ustawić SVG jako wbudowany plik SVG . Możesz skorzystać z tego skryptu, dodając klasę
svg
do obrazu:A teraz, jeśli to zrobisz:
Albo może:
JSFiddle: http://jsfiddle.net/erxu0dzz/1/
źródło
parser.parseFromString(text, "image/svg+xml");
fetch
które zostało dodane do Safari w 10.1 ( developer.mozilla.org/en-US/docs/Web/API/Fetch_API ). Powyższa wersja jQuery działa.Użyj filtrów, aby przekształcić na dowolny kolor.
Niedawno znalazłem to rozwiązanie i mam nadzieję, że ktoś może go użyć. Ponieważ rozwiązanie wykorzystuje filtry, można go używać z dowolnym rodzajem obrazu. Nie tylko SVG.
Jeśli masz obraz jednokolorowy, którego chcesz tylko zmienić kolor, możesz to zrobić za pomocą niektórych filtrów. Działa również na obrazach wielokolorowych, ale nie można kierować na określony kolor. Tylko cały obraz.
Filtry pochodzą ze skryptu zaproponowanego w Jak przekształcić czerń na dowolny kolor przy użyciu tylko filtrów CSS. Jeśli chcesz zmienić biel na dowolny kolor, możesz dostosować wartość odwracania w każdym filtrze.
źródło
Aby rozwinąć odpowiedź @gringo, metoda Javascript opisana w innych odpowiedziach działa, ale wymaga od użytkownika pobrania niepotrzebnych plików graficznych, a IMO powoduje rozdęcie kodu.
Myślę, że lepszym rozwiązaniem byłoby migrowanie całej jednokolorowej grafiki wektorowej do pliku webfont. W przeszłości korzystałem z Fort Awesome i świetnie się łączy twoje niestandardowe ikony / obrazy w formacie SVG, a także dowolne ikony innych firm (Font Awesome, ikony Bootstrap itp.) W jednym pliku webfont użytkownik musi pobrać. Możesz go również dostosować, abyś zawierał tylko ikony innych firm, których używasz. Zmniejsza to liczbę żądań strony i generuje całkowitą wagę strony, zwłaszcza jeśli dołączasz już biblioteki ikon stron trzecich.
Jeśli wolisz opcję bardziej zorientowaną na programistów, możesz napisać w Google „npm svg webfont” użyć i użyć jednego z modułów węzłów, który jest najbardziej odpowiedni dla twojego środowiska.
Kiedyś zrobiłeś jedną z tych dwóch opcji, możesz łatwo zmienić kolor za pomocą CSS, i najprawdopodobniej przyspieszyłeś swoją stronę.
źródło
Jeśli przełączasz tylko obraz między rzeczywistym kolorem a czarno-białym, możesz ustawić jeden selektor jako:
{filter: none;}
i inny jako:
źródło
Prosty..
Możesz użyć tego kodu:
Najpierw określ ścieżkę svg, a następnie wpisz jej identyfikator, w tym przypadku „Capa_1”. Możesz uzyskać identyfikator svg, otwierając go w dowolnym edytorze.
W css:
źródło
Głównym problemem w twoim przypadku jest to, że importujesz plik svg ze
<img>
znacznika, który ukryje strukturę SVG.Musisz użyć
<svg>
znacznika w połączeniu z,<use>
aby uzyskać pożądany efekt. Aby to działało, musisz podaćid
ścieżkę, której chcesz użyć w pliku SVG,<path id='myName'...>
a następnie móc pobrać je ze<use xlink:href="#myName"/>
znacznika. Spróbuj wyciąć poniżej.Pokaż fragment kodu
Pamiętaj, że możesz wstawić dowolny URL przed fragmentem,
#
jeśli chcesz załadować SVG z zewnętrznego źródła (i nie osadzać go w swoim HTML). Ponadto zwykle nie określasz wypełnienia w CSS. Lepiej rozważyć użyciefill:"currentColor"
w samym SVG. Wówczas zostanie zastosowana wartość koloru odpowiedniego elementu CSS.źródło
Ponieważ SVG jest w zasadzie kodem, potrzebujesz tylko zawartości. Użyłem PHP, aby uzyskać zawartość, ale możesz użyć, co chcesz.
Następnie wydrukowałem zawartość „tak jak jest” w pojemniku div
Aby ostatecznie ustawić regułę dla elementów potomnych SVG kontenera w CSS
Mam wyniki z ikoną materiału SVG:
Mozilla Firefox 59.0.2 (64-bitowy) Linux
Google Chrome66.0.3359.181 (Build oficial) (64 bity) Linux
Opera 53.0.2907.37 Linux
źródło
Może to być pomocne dla osób używających
PHP
w połączeniu z.svg
obrazami, którymi chcą manipulować za pomocą CSS.Nie można nadpisywać właściwości wewnątrz tagu img za pomocą CSS. Ale kiedy kod źródłowy svg jest osadzony w kodzie HTML, na pewno możesz. Lubię rozwiązać ten problem za pomocą
require_once
funkcji, w której dołączam.svg.php
plik. To jest jak importowanie obrazu, ale nadal możesz nadpisywać style za pomocą CSS!Najpierw dołącz plik svg:
I zawiera na przykład tę ikonę:
Teraz możemy łatwo zmienić kolor wypełnienia w ten sposób za pomocą CSS:
Najpierw próbowałem rozwiązać ten problem,
file_get_contents()
ale powyższe rozwiązanie jest znacznie szybsze.źródło
Wiedz, że to stare pytanie, ale ostatnio natknęliśmy się na ten sam problem i rozwiązaliśmy go od strony serwera. To jest odpowiedź specyficzna dla php, ale jestem przekonany, że inne envs mają coś podobnego. zamiast używać znacznika img, renderujesz svg jako svg od samego początku.
teraz, gdy wyrenderujesz plik, otrzymasz kompletny plik svg
źródło
otwórz ikonę svg w edytorze kodu i dodaj klasę po znaczniku ścieżki:
Możesz dodać klasę do pliku svg i zmienić kolor w następujący sposób:
codepen
źródło
Jeśli masz dostęp do JQuery, to w odpowiedzi na odpowiedź Praveen można programowo zmienić kolor różnych zagnieżdżonych elementów w SVG poprzez:
$('svg').find('path, text').css('fill', '#ffffff');
W ramach find możesz wymienić różne elementy, które należy zmienić na kolor.
źródło