2012-03-02 16 views
107

Mam następujący kod:Czy mogę zmienić kolor wypełnienia ścieżki svg za pomocą CSS?

<span> 
    <svg height="32" version="1.1" width="32" xmlns="http://www.w3.org/2000/svg" style="overflow: hidden; position: relative; left: -0.0166626px; top: -0.983337px;"> 
     <desc></desc> 
     <defs/> 
     <path style="" fill="#333333" stroke="none" d="M15.985,5.972C8.422,5.972,2.289999999999999,10.049,2.289999999999999,15.078C2.289999999999999,17.955,4.302999999999999...............1,27.68,22.274Z"/> 
     </svg>&nbsp; 
    </span> 

Czy jest możliwe aby zmienić kolor wypełnienia ścieżki SVG z CSS lub w inny sposób bez faktycznie zmieniając go wewnątrz znacznika ścieżki?

+0

[Podobne Odpowiedź] (http://stackoverflow.com/questions/7280821/styling-svg-with-css-in-the-containing-html/7281197#7281197) – Izhaki

Odpowiedz

136

Tak, możesz zastosować CSS do SVG, ale musisz dopasować element, tak jak podczas stylizowania HTML. Jeśli tylko chcesz, aby zastosować go do wszystkich ścieżek SVG, można użyć, na przykład:

​path { 
    fill: blue; 
}​ 

Zewnętrzna CSS wydaje się zastąpić atrybut ścieżkę za fill, przynajmniej w WebKit i przeglądarek opartych na Gecko testowałem. Oczywiście, jeśli napiszesz, powiedzmy, <path style="fill: green">, to również zastąpi zewnętrzny CSS.

+3

Czy to nadal działa z Chrome ? Mam trudności z próbą zmiany koloru ścieżki SVG za pomocą CSS. –

+0

Tak, właśnie przetestowałem go w aktualnej wersji Chrome i nadal działa. Jeśli nadal potrzebujesz pomocy, opublikuj pytanie zawierające samodzielny przykład (SVG z zewnętrznym lub wbudowanym CSS) oraz opis oczekiwanych rezultatów i tego, co faktycznie widzisz (nie tylko "Mam trudności"). –

+5

Dzięki Nicholas, uważam, że znalazłem przyczynę. Mój SVG został osadzony na stronie za pomocą znacznika . Wygląda na to, że CSS nie może modyfikować żadnej zawartości. Czy to jest poprawne? –

30

jeśli chcesz zmienić kolor przez unoszące się w elemencie, spróbuj tego:

path:hover{ 
    fill:red; 
} 
2

natknąłem niesamowitym zasobem na CSS sztuczki: https://css-tricks.com/using-svg/

Istnieje kilka rozwiązań wyjaśniono tam .

Wolałem ten, który wymagał minimalnych zmian w źródłowym svg, a także nie wymagał, aby był osadzony w dokumencie HTML. Ta opcja używa znacznika <object>.


Dodaj plik svg do swojego html za pomocą <object>; Zadeklarowałem również atrybuty html: width i height. Używając tych szerokości i wysokości dokument svg nie jest skalowany, pracowałem nad tym przy użyciu instrukcji css transform: scale(...) dla znacznika svg w skojarzonym pliku css svg.

<object type="image/svg+xml" data="myfile.svg" width="64" height="64"></object> 

Utwórz plik css do dołączenia do dokumentu svn. Moja ścieżka źródłowa svg została przeskalowana do 16 pikseli, a następnie przeskalowałem ją do 64 z czterokrotnym współczynnikiem. Miał tylko jedną ścieżkę, więc nie musiałem wybierać jej bardziej szczegółowo, jednak ścieżka miała atrybut wypełnienia, więc musiałem użyć !IMPORTANT, aby wymusić css na precedensie.

#svg2 { 
    width: 64px; height: 64px; 
    transform: scale(4); 
} 
path { 
    fill: #333 !IMPORTANT; 
} 

Edycja pliku SVG cel, przed znacznikiem otwarcie <svg, zawierać arkusz stylów; Zwróć uwagę, że href jest względny do adresu URL pliku svg.

<?xml-stylesheet type="text/css" href="myfile.css" ?> 
3

Po przejściu do kodu źródłowego pliku SVG można zmienić wypełnienie kolorem, modyfikując właściwość wypełnienia.

<svg fill="#3F6078" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 
</svg> 

Użyj swojego ulubionego edytora tekstu, otwórz plik SVG i baw się z nim.

+1

Technicznie poprawne w oparciu o sformułowanie pytania "... inne środki bez faktycznego zmieniania go w tagu ścieżki" i działało dokładnie tak, jak było to potrzebne. Mieć uptoote! – Travis

1

umieszczasz to css dla svg koła.

svg:hover circle{ 
    fill: #F6831D; 
    stroke-dashoffset: 0; 
    stroke-dasharray: 700; 
    stroke-width: 2; 
} 
Powiązane problemy