Próbuję uzyskać gradient zastosowany do rect
elementu SVG .
Obecnie używam fill
atrybutu. W moim pliku CSS:
rect {
cursor: pointer;
shape-rendering: crispEdges;
fill: #a71a2e;
}
A rect
element ma prawidłowy kolor wypełnienia podczas przeglądania w przeglądarce.
Chciałbym jednak wiedzieć, czy mogę zastosować gradient liniowy do tego elementu?
css
svg
gradient
linear-gradients
Hrishikesh Choudhari
źródło
źródło
fill
w ten sposób:fill: url(../js/gradient.svg#MyGradient);
. Czy to dobra droga?fill: linear-gradient (...)
?”fill
wymaga,<paint>
który jest zbudowany wokół<color>
klasy CSS2 . Innymi słowy, ta odpowiedź jest obecnie jedynym sposobem na zrobienie tego przez CSS w czasie, gdy piszę ten komentarz. Musisz dodaćlinearGradient
element. Wreszcie, przechodząc przez wersję roboczą w3 dla SVG2 , wydaje się, że wsparcie dlalinear-gradient
reguły css wypełnienia nie ma i może nie znaleźć się w specyfikacji.gradientTransform
atrybut)Odpowiedź 2019
Dzięki zupełnie nowym właściwościom CSS możesz mieć jeszcze większą elastyczność dzięki zmiennym
custom properties
Po prostu ustaw nazwaną zmienną dla każdej
stop
w gradiencie, a następnie dostosuj, jak chcesz w css. Możesz nawet dynamicznie zmieniać ich wartości za pomocą javascript, na przykład:źródło
Opierając się na tym, co napisał Finesse, oto prostszy sposób na celowanie w svg i zmianę jego gradientu.
Oto, co musisz zrobić:
Niektóre zalety używania klas zamiast
:nth-child
są takie, że zmiana kolejności przystanków nie będzie miała na to wpływu. Ponadto jasno określa intencje każdej klasy - będziesz się zastanawiać, czy potrzebujesz niebieskiego koloru na pierwszym czy drugim dziecku.Przetestowałem to na wszystkich Chrome, Firefox i IE11:
Zobacz edytowalny przykład tutaj: https://jsbin.com/gabuvisuhe/edit?html,css,output
źródło
Oto rozwiązanie, w którym możesz dodać gradient i zmienić jego kolory za pomocą tylko CSS:
źródło
Dziękuję wszystkim za wszystkie precyzyjne odpowiedzi.
Używając svg w shadow dom, dodaję 3 liniowe gradienty, których potrzebuję w svg, wewnątrz pliku. Umieszczam regułę wypełnienia css w komponencie sieciowym i dziedziczenie wypełnienia wykonuje zadanie.
zobacz mój test w codepen
Pierwsza z nich to normalny SVG, druga jest w cieniu.
źródło
Oto jak ustawić linearGradient w elemencie docelowym:
źródło