Dlaczego kolory SVG zmieniają się po eksporcie: znajdź przyczynę
Sprawdź, czy zmiana kolorów SVG wynika z konwersji przestrzeni barw, dziedziczenia CSS, gradientów, mieszania, krycia czy aplikacji importującej plik.
Na tej stronie
- Dopasuj objaw do pierwszej kontroli
- Wyizoluj problem w pięć minut
- 1. Zachowaj edytowalny plik główny bez zmian
- 2. Otwórz wyeksportowany SVG w dwóch miejscach
- 3. Sprawdź instrukcje wypełnień i obrysów
- 4. Uprość jeden obiekt powodujący problem
- Przyczyna 1: eksporter dokonał konwersji przestrzeni barw
- Przyczyna 2: currentColor lub CSS zastąpiły wypełnienie albo obrys
- Przyczyna 3: gradient lub odwołanie do definicji wypełnienia albo obrysu przestały działać
- Przyczyna 4: krycie i mieszanie zmieniły widoczny rezultat
- Przyczyna 5: środowisko docelowe zaimportowało tylko część SVG
- Wybierz najmniejszą bezpieczną poprawkę
- Kiedy przydaje się PerfectVector
- Lista kontrolna przed przekazaniem pliku
- Najczęściej zadawane pytania
- Źródła
Kolory SVG zmieniają się po eksporcie, gdy wygląd źródła i plik wynikowy są interpretowane na różne sposoby. Eksporter może przeliczyć wartości kolorów. Witryna może nadpisać fill przez CSS lub pobrać wartość currentColor z elementu nadrzędnego. Gradient, ustawienie krycia, tryb mieszania lub filtr mogą zależeć od funkcji, którą środowisko docelowe obsługuje inaczej. Czasem wyeksportowany kod jest poprawny, a tylko jeden importer daje odmienny wynik.
Nie zaczynaj od zastępowania każdej wartości szesnastkowej. Najpierw znajdź moment, w którym zmienia się wygląd. Dzięki temu ustalisz, czy naprawić SVG, zmienić ustawienia eksportu, uprościć kopię do przekazania czy zachować grafikę w innym formacie.
Szybka diagnoza
- Błędny wygląd w każdym programie do wyświetlania SVG: sprawdź wyeksportowane wartości kolorów, przestrzeń barw i efekty.
- Poprawny wygląd osobno, błędny na stronie: sprawdź odziedziczone style CSS,
currentColor, nazwy klas i powtarzające się identyfikatory. - Jednolite wypełnienia pozostają poprawne, ale gradienty lub cieniowane obszary się zmieniają: sprawdź odwołania do definicji wypełnień i obrysów, krycie, filtry oraz tryby mieszania.
- Błędny wygląd tylko w jednej aplikacji: przetestuj jej importer na jednym uproszczonym obiekcie, zanim zmienisz plik główny.
- Inny wygląd na nowym tle: porównaj składanie warstw i kontrast, zanim zaczniesz edytować kolory.
Dopasuj objaw do pierwszej kontroli
| Co się zmieniło | Prawdopodobny rodzaj przyczyny | Co sprawdzić najpierw |
|---|---|---|
| Kolory wszystkich jednolitych wypełnień są zmienione | Konwersja kolorów podczas eksportu | Porównaj próbkę koloru w źródle z wartością zapisaną w SVG |
| SVG przyjmuje jeden kolor po osadzeniu | currentColor lub odziedziczone style CSS | Otwórz plik osobno, a następnie sprawdź obliczone wartości color, fill i stroke na stronie |
| Jedna ikona zmienia się, gdy kilka plików SVG znajduje się na tej samej stronie | Konflikt klas CSS lub identyfikatorów definicji wypełnień i obrysów | Poszukaj ogólnych nazw klas i powtarzających się identyfikatorów, takich jak paint0 lub gradient1 |
| Gradient staje się jednolity, ciemny lub znika | Uszkodzone lub nieobsługiwane odwołanie do definicji wypełnienia lub obrysu | Dopasuj każde url(#id) do elementu w <defs> |
| Przezroczyste obszary lub obszary z mieszaniem wyglądają na wyblakłe | Różnica w kryciu, mieszaniu, filtrze lub tle | Wyłączaj po jednym efekcie w kopii pliku |
| Plik wygląda poprawnie w przeglądarce, ale błędnie po imporcie | Zakres obsługi w środowisku docelowym lub konwersja podczas importu | Ogranicz SVG do jednego obiektu powodującego problem i zaimportuj ponownie |

Wyizoluj problem w pięć minut
1. Zachowaj edytowalny plik główny bez zmian
Zapisz kopię do testów. Nie spłaszczaj efektów, nie zamieniaj wszystkich obiektów na ścieżki ani nie zastępuj kolorów w jedynej edytowalnej kopii. Takie zmiany mogą ukryć przyczynę i utrudnić późniejsze poprawki.
2. Otwórz wyeksportowany SVG w dwóch miejscach
Użyj aktualnej przeglądarki jako neutralnego punktu odniesienia, a następnie otwórz lub zaimportuj ten sam plik w rzeczywistym środowisku docelowym. Porównaj oba widoki z grafiką źródłową na tym samym tle.
- Jeśli oba widoki wyeksportowanego pliku są błędne, sprawdź eksporter lub zapisany kod SVG.
- Jeśli plik otwarty osobno w przeglądarce wygląda poprawnie, a w środowisku docelowym błędnie, sprawdź sposób osadzenia, CSS lub zakres obsługi importera.
- Jeśli różnią się tylko obszary przezroczyste lub z mieszaniem, przetestuj tło i efekty, zanim zmienisz jednolite wypełnienia.
Przeglądarka jest przydatnym punktem odniesienia, ale nie dowodzi, że każda aplikacja projektowa lub produkcyjna zaimportuje ten sam zestaw funkcji.
3. Sprawdź instrukcje wypełnień i obrysów
Otwórz SVG w edytorze tekstu i wyszukaj:
fill=
stroke=
currentColor
url(#
opacity=
fill-opacity=
mix-blend-mode
filter=Na razie sprawdzasz strukturę, a nie przepisujesz kod. Jawna wartość fill="#2F6BFF" kieruje diagnozę na inną ścieżkę niż fill="currentColor" lub fill="url(#paint0)".
Jeśli po raz pierwszy otwierasz kod SVG, szerszy poradnik o edytowaniu SVG wyjaśnia, jak pracować z kodem i edytorem graficznym.
4. Uprość jeden obiekt powodujący problem
Skopiuj najmniejszy obiekt, którego wygląd nadal się zmienia, do nowego dokumentu i wyeksportuj go. Usuwaj po jednej funkcji: najpierw filtr, potem tryb mieszania, następnie gradient, a na końcu krycie grupy. Pierwsze usunięcie, które poprawi wynik, wskazuje funkcję nieobsługiwaną lub zależną od kontekstu.
Ten test polegający na upraszczaniu obiektu jest bezpieczniejszy niż spłaszczanie całej ilustracji, ponieważ pozwala ustalić konkretne ograniczenie dotyczące pliku do przekazania.
Przyczyna 1: eksporter dokonał konwersji przestrzeni barw
Kolory szesnastkowe i znana składnia rgb() opisują kolory sRGB. Współczesny CSS może też wyrażać przestrzenie o szerszej gamie barw, takie jak Display P3, za pomocą color(), zgodnie ze specyfikacją CSS Color Module Level 4. Aplikacja projektowa może więc przechowywać kolor źródłowy, który wymaga konwersji, zanim stanie się wartością szesnastkową sRGB. Ta konwersja może zmienić wartości liczbowe lub przyciąć kolor spoza docelowej gamy do jej granic.
Sprawdź problem w tej kolejności:
- zanotuj przestrzeń barw dokumentu źródłowego i wartość liczbową wybranego obiektu;
- wyeksportuj pojedynczy obiekt z jednolitym wypełnieniem, bez przezroczystości i efektów;
- otwórz SVG jako tekst i odczytaj zapisaną wartość
filllubstroke; - porównaj wyeksportowaną wartość ze źródłową;
- przetestuj ten sam plik w środowisku docelowym.
Jeśli wartość w pliku się zmieniła, konwersja nastąpiła podczas eksportu. Świadomie wybierz docelową przestrzeń barw i wyeksportuj ponownie. Jeśli wartość pozostała taka sama, ale wygląd się różni, przejdź do sprawdzania CSS, efektów, tła lub działania importera.
W projektach do druku wymagających separacji CMYK, kolorów dodatkowych lub określonego składu czerni zachowaj plik główny stanowiący wzorzec kolorów do druku w natywnym formacie aplikacji projektowej i przekaż format wymagany przez drukarnię, często PDF. SVG nadal może być przydatny na ekranie, ale nie powinien bez świadomej decyzji stać się wzorcem kolorów w procesie, którego nie potrafi wiarygodnie opisać.
Przyczyna 2: currentColor lub CSS zastąpiły wypełnienie albo obrys
SVG można stylizować za pomocą CSS. Specyfikacja stylizowania SVG 2 wskazuje, że atrybuty prezentacyjne, takie jak fill, uczestniczą w kaskadzie CSS ze specyficznością równą zero, więc reguły CSS autora mogą je nadpisać. SVG osadzony bezpośrednio w kodzie strony współdzieli z nią dokument, co oznacza, że ogólne nazwy klas mogą kolidować ze stylami witryny.
currentColor celowo odwołuje się do koloru z innego miejsca. Dokumentacja atrybutu koloru SVG w MDN wyjaśnia, że dostarcza on wartość dla fill, stroke, punktów koloru gradientu i innych właściwości wypełnień oraz obrysów. Jest to przydatne w ikonach, które mają przyjmować kolor otaczającego tekstu, ale oznacza też, że plik nie ma w tym miejscu ustalonego koloru.
Wybierz jedną z dwóch strategii przygotowania pliku:
- W przypadku ikony internetowej dopasowywanej do motywu zachowaj
currentColori ustaw jawną wartośćcolorna SVG lub na odpowiednim elemencie nadrzędnym. - W przypadku samodzielnego zasobu, który musi zachować własną paletę, zapisz jawne wypełnienia i obrysy oraz nadaj klasom wewnętrznym nazwy, które nie będą kolidować z innymi.
Gdy kilka plików SVG osadzonych bezpośrednio na stronie zawiera identyfikatory takie jak paint0, clip0 lub gradient1, nadaj im unikalne wartości i jednocześnie zaktualizuj odwołania. Nie zmieniaj samego id; każde url(#id) musi nadal wskazywać właściwy element.
Jeśli Twoim celem jest świadoma zmiana kolorów, a nie cofnięcie zmiany po eksporcie, skorzystaj z osobnego poradnika o bezpiecznej zmianie kolorów SVG.
Przyczyna 3: gradient lub odwołanie do definicji wypełnienia albo obrysu przestały działać
Gradienty i wzory SVG są źródłami wypełnień oraz obrysów. Kształt wskazuje na nie przez odwołanie takie jak fill="url(#brandGradient)", a definicja gradientu zwykle znajduje się w <defs>. Specyfikacja źródeł wypełnień i obrysów SVG 2 określa też, jak współrzędne gradientu i transformacje wpływają na wynik.
Trzy kontrole pozwalają wykryć większość problemów ze strukturą:
- każde
url(#id)ma odpowiadającą mu definicję; - identyfikatory pozostają unikalne po połączeniu kilku plików SVG na jednej stronie lub w jednym dokumencie;
- środowisko docelowe zachowuje użyte w pliku rodzaje wypełnień i obrysów, jednostki, transformacje oraz punkty koloru gradientu.
Jeśli proste jednolite wypełnienie importuje się poprawnie, ale gradient nie, zachowaj gradient w pliku głównym i przygotuj kopię do przekazania do środowiska docelowego. Najpierw spróbuj prostszego gradientu liniowego lub radialnego. Jeśli środowisko docelowe nadal nie potrafi go odtworzyć, a dokładny wygląd jest ważniejszy od edytowalnego wypełnienia, użyj formatu lub spłaszczonego zasobu obsługiwanego w docelowym procesie pracy. Wyraźnie oznacz tę kopię, aby nie zastąpiła edytowalnego źródła.
Przyczyna 4: krycie i mieszanie zmieniły widoczny rezultat
Widoczny piksel nie zawsze odpowiada zapisanemu wypełnieniu. fill-opacity wpływa na wypełnienie kształtu, opacity grupy jest stosowane po połączeniu jej elementów potomnych, a tryb mieszania miesza źródło z tłem pod nim. Specyfikacja W3C dotycząca składania i mieszania określa kolejność renderowania oraz wzory mieszania zależne od tła.
Ma to dwa praktyczne skutki:
- Ten sam SVG może wyglądać inaczej na białym, czarnym lub kolorowym tle strony bez zmiany jakiejkolwiek wartości koloru.
- Przeniesienie krycia z grupy na każdy element potomny może zmienić wygląd nakładających się obszarów, ponieważ zmienia się kolejność składania.
Testuj na rzeczywistym tle. Następnie usuwaj w kopii po jednej właściwości lub efekcie: mix-blend-mode, filtry, maski i krycie grupy. Jeśli środowisko docelowe nie potrafi zachować istotnego efektu, wybierz uproszczoną wersję grafiki wektorowej lub spłaszczony zasób do przekazania. Nie spłaszczaj niezwiązanych z problemem części projektu.
Biały lub kolorowy prostokąt za grafiką to osobny przypadek. Poradnik o przezroczystym tle SVG pokazuje, jak odróżnić rzeczywisty kształt tła od pustego obszaru roboczego.
Przyczyna 5: środowisko docelowe zaimportowało tylko część SVG
SVG jest standardem internetowym, ale wiele narzędzi desktopowych, drukarskich, do wycinania, prezentacji i tworzenia stron przekształca go we własny model obiektów. Zakres obsługi może różnić się między aplikacjami i wersjami. Unikaj stwierdzeń takich jak „ta aplikacja nigdy nie obsługuje gradientów”, chyba że potwierdza to aktualna oficjalna dokumentacja dotycząca dokładnie Twojej wersji.
Zamiast tego wykonaj kontrolowany test importu:
- zaimportuj pojedynczą ścieżkę z jednolitym wypełnieniem;
- dodaj oryginalny gradient;
- dodaj krycie;
- dodaj mieszanie lub filtr;
- zatrzymaj się na pierwszej wersji, której wygląd się zmieni.
Teraz znasz ograniczenie tego środowiska docelowego. Zachowaj pełny plik główny i wyeksportuj kopię do przekazania, która mieści się w przetestowanym zakresie obsługi. Jeśli znikają obrysy, skorzystaj z diagnostyki eksportu dotyczącej obrysów, zamiast zamieniać każdą linię na wypełnienie.
Wybierz najmniejszą bezpieczną poprawkę
| Diagnoza | Bezpieczna poprawka | Czego unikać |
|---|---|---|
| Wyeksportowane wartości się zmieniły | Wyeksportuj do zamierzonej przestrzeni barw i zweryfikuj jedną próbkę koloru | Dobierania zamienników na oko w całym pliku |
currentColor zmienił wygląd zasobu | Ustaw właściwą wartość color na odpowiednim elemencie nadrzędnym lub zastąp currentColor jawną wartością wypełnienia albo obrysu | Zastępowania niezwiązanych z problemem wypełnień |
| Klasy CSS lub identyfikatory kolidują | Ogranicz zasięg klas CSS i ustaw unikalne identyfikatory, aktualizując wszystkie odwołania | Dodawania szeroko działających reguł !important |
| Brakuje definicji źródła wypełnienia lub obrysu | Przywróć pasującą definicję lub ponownie wyeksportuj obiekt | Zgadywania koloru zastępczego dla każdego gradientu |
| Mieszanie lub krycie zależą od kontekstu | Przetestuj rzeczywiste tło; w razie potrzeby uprość kopię do przekazania | Przenoszenia krycia między grupami a elementami potomnymi bez porównania |
| Jeden importer pomija funkcję | Ogranicz plik do obsługiwanego zestawu funkcji lub użyj innego formatu do przekazania | Uszkadzania edytowalnego pliku głównego na potrzeby jednego importera |
Kiedy przydaje się PerfectVector
PerfectVector przydaje się, gdy źródło wektorowe zostało utracone lub nie nadaje się do użytku, a najlepsza zachowana wersja grafiki to obraz rastrowy. Możesz przekształcić ten obraz w edytowalne kształty wektorowe, a następnie sprawdzić paletę, przezroczystość i ścieżki przed otwarciem wyniku w środowisku docelowym.
Nie naprawi odziedziczonych stylów CSS, nie przywróci brakującej definicji gradientu, nie odzyska profilu kolorów aplikacji projektowej, nie zachowa nieobsługiwanego trybu mieszania ani nie zmieni parsera importera. Jeśli SVG nadal zawiera poprawne ścieżki i instrukcje wypełnień oraz obrysów, napraw plik zamiast ponownie wektoryzować zrzut ekranu. Dzięki temu zachowasz więcej oryginalnej struktury.
Lista kontrolna przed przekazaniem pliku
- Zachowaj edytowalny plik główny i wprowadzaj poprawki w kopii.
- Porównaj wyeksportowany plik w przeglądarce i rzeczywistym środowisku docelowym na tym samym tle.
- Sprawdź, czy zapisane wartości
fillistrokesię zmieniły. - Wyszukaj
currentColor, ogólne nazwy klas i powtarzające się identyfikatory. - Dopasuj każde odwołanie
url(#id)do jego definicji. - Testuj osobno krycie grup, tryby mieszania, filtry i maski.
- Uprość tylko tę funkcję, której środowisko docelowe nie potrafi odtworzyć.
- Ponownie otwórz lub zaimportuj końcowy plik do przekazania, zanim zastąpisz poprzednią wersję.
Najczęściej zadawane pytania
Dlaczego mój SVG wygląda poprawnie w przeglądarce, ale błędnie po imporcie? Plik prawdopodobnie używa funkcji lub kontekstu stylów, które środowisko docelowe przekształca inaczej. Zaimportuj jedną ścieżkę z jednolitym wypełnieniem, a potem dodawaj z powrotem po jednym elemencie: gradient, krycie, mieszanie lub filtr. Pierwszy krok, który daje błędny wynik, wskazuje ograniczenie środowiska docelowego bez uszkadzania pliku głównego.
Czy pliki SVG zawsze używają RGB?
Typowe kolory szesnastkowe i rgb() należą do sRGB, natomiast współczesny CSS może też wyrażać przestrzenie takie jak Display P3. Aplikacje projektowe i drukarskie mogą przeliczać te kolory podczas eksportu lub importu. Sprawdź zapisaną wartość koloru, a w pracach z CMYK lub kolorami dodatkowymi użyj formatu produkcyjnego wymaganego przez drukarnię.
Dlaczego mój SVG stał się czarny po eksporcie?
Sprawdź, czy plik używa currentColor, utracił regułę CSS albo odwołuje się do brakującego gradientu lub identyfikatora definicji wypełnienia albo obrysu. Czerń może być kolorem odziedziczonym lub objawem użycia wartości zastępczej, a nie skutkiem zastąpienia oryginalnego wypełnienia. Porównaj plik otwarty osobno z wersją osadzoną lub zaimportowaną.
Czy mam zastąpić każdą wartość szesnastkową, gdy kolory wyglądają źle? Nie. Najpierw ustal, czy wartości zmieniły się podczas eksportu. Jeśli liczby są nienaruszone, ich zastąpienie może ukryć problem z CSS, odwołaniem do definicji wypełnienia lub obrysu, mieszaniem, tłem albo importerem i sprawić, że plik będzie mniej wierny oryginałowi w innych środowiskach.
Czy PerfectVector może naprawić SVG, którego kolory zmieniły się po eksporcie? Nie, jeśli SVG wymaga jedynie poprawienia CSS, gradientów, krycia, profilu lub sposobu obsługi przez importer. PerfectVector przydaje się, gdy oryginalna grafika wektorowa została utracona i chcesz odtworzyć odpowiednią grafikę rastrową o jednolitych wypełnieniach jako edytowalne kształty wektorowe.
Źródła
- W3C — SVG 2 Styling — Określa stylizowanie przez CSS, atrybuty
classistyle, atrybuty prezentacyjne, działanie kaskady oraz dziedziczenie w SVG. - MDN — SVG
colorattribute — Wyjaśnia, jakcurrentColordostarcza wartości kolorów dla wypełnień, obrysów, punktów koloru gradientu i powiązanych właściwości. - W3C — SVG 2 Paint Servers — Określa gradienty liniowe i radialne, odwołania do definicji wypełnień i obrysów, układy współrzędnych, transformacje oraz interpolację kolorów.
- W3C — CSS Color Module Level 4 — Określa składnię kolorów sRGB i predefiniowane przestrzenie o szerszej gamie barw, w tym Display P3.
- W3C — Compositing and Blending Level 1 — Określa grupy krycia, kolejność składania, tła oraz tryby mieszania dla SVG i CSS.
Jeśli najlepsze zachowane źródło to PNG lub JPG, odtwórz je jako SVG za pomocą PerfectVector, a następnie porównaj wynik w przeglądarce jako osobny plik i w końcowym środowisku docelowym, zanim zastąpisz stary plik.
Więcej z bloga

SVG feColorMatrix: zmieniaj kolory bez zmiany wypełnień
Użyj SVG feColorMatrix, aby zmienić kolory podglądu, zachować przezroczystość i wybrać sRGB. Porównaj filtr z bezpośrednią edycją wypełnień, zanim przekażesz edytowalną grafikę.

Jednostki gradientu SVG: jeden wspólny gradient na ścieżkach logo
Rozciągnij gradient na osobne ścieżki logo SVG. Porównaj gradientUnits, ustaw wspólne punkty końcowe i popraw nieoczekiwaną zmianę koloru w przesuniętej grupie.