Umieszczając wynik SVG bezpośrednio w linii z kodem strony, jestem w stanie po prostu modyfikować kolory wypełnienia za pomocą CSS:
polygon.mystar {
fill: blue;
}
circle.mycircle {
fill: green;
}
Działa to świetnie, jednak szukam sposobu na modyfikację atrybutu „fill” SVG, gdy jest on wyświetlany jako OBRAZ TŁA.
html {
background-image: url(../img/bg.svg);
}
Jak mogę teraz zmienić kolory? Czy to w ogóle możliwe?
Dla odniesienia, oto zawartość mojego zewnętrznego pliku 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>
Odpowiedzi:
Jednym ze sposobów na to jest podanie pliku SVG z mechanizmu po stronie serwera. Po prostu stwórz stronę serwera zasobów, która wyprowadza twój plik svg zgodnie z parametrami GET i podajesz go na określonym adresie URL.
Następnie używasz tego adresu URL w swoim css.
Ponieważ jako tło, nie jest częścią DOM i nie można nim manipulować. Inną możliwością byłoby regularne używanie go, osadzanie go na stronie w normalny sposób, ale ustawienie go absolutnie, ustawienie pełnej szerokości i wysokości strony, a następnie użycie właściwości css z-index, aby umieścić go za wszystkimi innymi elementami DOM na stronie.
źródło
<?php header('Content-type: image/svg+xml'); ?>
Potrzebowałem czegoś podobnego i chciałem pozostać przy CSS. Oto miksy LESS i SCSS, a także zwykły CSS, które mogą Ci w tym pomóc. Niestety, obsługa przeglądarki jest nieco luźna. Zobacz poniżej szczegółowe informacje na temat obsługi przeglądarki.
MNIEJ mieszanki:
MNIEJ użycia:
Mieszanka SCSS:
Wykorzystanie SCSS:
CSS:
Oto więcej informacji na temat osadzania pełnego kodu SVG w pliku CSS. Wspomniał także o kompatybilności przeglądarki, która jest nieco za mała, aby była to realna opcja.
źródło
#
znak dla kolorów heksadecymalnych, aby działało to w Firefoksie. Coś w rodzaju<svg fill="#ffffff" ...></svg>
staje się<svg fill="%23ffffff" ...></svg>
.Możesz używać masek CSS. Za pomocą właściwości „mask” możesz utworzyć maskę, która zostanie zastosowana do elementu.
Aby uzyskać więcej informacji, zobacz ten wspaniały artykuł: https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images
źródło
Jeszcze innym podejściem jest użycie maski. Następnie zmieniasz kolor tła zamaskowanego elementu. Ma to taki sam efekt, jak zmiana atrybutu wypełnienia pliku svg.
HTML:
CSS:
Pełny samouczek znajdziesz tutaj: http://codepen.io/noahblon/blog/coloring-svgs-in-css-background-images (nie mój). Proponuje różne podejścia (nie tylko maskowanie).
źródło
mask
nie jest obsługiwany przez IE ani Edge: caniuse.com/#search=maskJest to możliwe dzięki Sass! Jedyne, co musisz zrobić, to zakodować kod svg w adresie URL. Jest to możliwe dzięki funkcji pomocniczej w Sass. Zrobiłem dla tego kodepen. Spójrz na to:
http://codepen.io/philippkuehn/pen/zGEjxB
źródło
artykuł codeben i demo
źródło
Pobierz plik SVG jako tekst.
Zmodyfikuj tekst SVG za pomocą javascript, aby zmienić kolor farby / obrysu / wypełnienia [s].
Następnie umieść zmodyfikowany ciąg svg bezpośrednio w swoim css, jak opisano tutaj .
źródło
Teraz możesz to osiągnąć po stronie klienta w następujący sposób:
Baw się tutaj!
źródło
Możesz przechowywać SVG w zmiennej. Następnie manipuluj ciągiem SVG w zależności od potrzeb (tj. Ustaw szerokość, wysokość, kolor itp.). Następnie użyj wyniku, aby ustawić tło, np
Zrobiłem też demo, http://sassmeister.com/gist/4cf0265c5d0143a9e734 .
Ten kod zawiera kilka założeń dotyczących SVG, np. Ten
<svg />
element nie ma istniejącego koloru wypełnienia i że nie są ustawione właściwości szerokości ani wysokości. Ponieważ dane wejściowe są zakodowane na stałe w dokumencie SCSS, dość łatwo jest egzekwować te ograniczenia.Nie martw się o powielanie kodu. gzip kompresja sprawia, że różnica jest znikoma.
źródło
Możesz w tym celu stworzyć własną funkcję SCSS. Dodanie następującego pliku do pliku config.rb.
Następnie możesz użyć go w swoim CSS:
Będziesz musiał edytować pliki SVG i zastąpić wszelkie atrybuty wypełnienia w znaczniku fill = "{color}"
Ścieżka ikony jest zawsze względna w stosunku do parametru images_dir w tym samym pliku config.rb.
Podobne do niektórych innych rozwiązań, ale jest to dość czyste i utrzymuje porządek w plikach SCSS!
źródło
W niektórych (bardzo specyficznych) sytuacjach można to osiągnąć za pomocą filtra . Na przykład możesz zmienić niebieski obraz SVG na fioletowy, obracając odcień o 45 stopni za pomocą
filter: hue-rotate(45deg);
. Obsługa przeglądarki jest minimalna, ale wciąż jest interesującą techniką.Próbny
źródło
dla tła monochromatycznego można użyć svg z maską, w której powinien zostać wyświetlony kolor tła
i niż użyj tego css
źródło
Użyj filtra sepii wraz z obracaniem odcienia, jasnością i nasyceniem, aby stworzyć dowolny kolor, jaki chcemy.
https://css-tricks.com/solved-with-css-colorizing-svg-backgrounds/
źródło
Późno na pokaz tutaj, ALE, byłem w stanie dodać kolor wypełnienia do wielokąta SVG, jeśli jesteś w stanie bezpośrednio edytować kod SVG, więc na przykład poniższy svg renderuje czerwony, zamiast domyślnego czarnego. Nie testowałem jednak poza Chrome:
źródło
To moja ulubiona metoda, ale obsługa przeglądarki musi być bardzo progresywna. Za pomocą właściwości mask tworzysz maskę, która jest stosowana do elementu. Wszędzie, gdzie maska jest nieprzezroczysta lub pełna, widoczny jest obraz pod spodem. Tam, gdzie jest przezroczysty, znajdujący się pod nim obraz jest maskowany lub ukryty. Składnia obrazu maski CSS jest podobna do obrazu tła. spójrz na codepen
mask
źródło
Wiele IF, ale jeśli uruchomi się Twój SVG zakodowany w standardzie base64:
Następnie rozpocznie się ciąg zakodowany w base64:
jeśli zaczyna się wstępnie zakodowany ciąg:
następnie koduje to do:
Oba zakodowane ciągi zaczynają się tak samo:
Dziwactwo kodowania base64 polega na tym, że co 3 znaki wejściowe stają się 4 znakami wyjściowymi. Gdy SVG zaczyna się w ten sposób, sześcioznakowy kolor wypełnienia heksadecymalnego zaczyna się dokładnie na „granicy” bloku kodowania. Dlatego możesz łatwo wykonać zamianę JS między przeglądarkami:
Ale powyższa odpowiedź tnt-rox jest drogą do przodu.
źródło