Ik heb een aantal SVG bestanden waarin rectangles worden gedefinieerd die één gemeenschappelijke radialGradient als fill moeten krijgen. Op dit moment definieer ik de gradient in iedere SVG file in de <defs> sectie, maar ik wil dit graag centraal oplossen. Een voorbeeld van een van de files:
Ik moet nu dus expliciet voor iedere rectangle aangeven dat hij een radialGradient fill moet gebruiken die in de <defs> sectie is gedefinieerd. Het zou handiger zijn als ik het fill attribute kon definieren in de CSS file (style.css) zodat alle rectangles van dezelfde class automatisch deze fill krijgen, maar helaas kent CSS geen gradient fills.
De radialGradient die wordt gebruikt als fill voor de 3 rectangles kan zelf niet in CSS worden gedefinieerd, omdat CSS geen gradients kent. Daarom wilde ik de <defs> sectie uit de file main.svg in een aparte svg file test.svg zetten en vanuit de style sheet daar naar refereren (zie regel 5 van style.css).
Dit werkt niet onder Firefox; doe ik iets fout, of ondersteunt Firefox dit niet?
XML: main.svg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| <?xml version="1.0" standalone="no"?> <?xml-stylesheet href="../style/style.css" type="text/css"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="init()"> <title>...</title> <desc>...</desc> <defs> <radialGradient id="fade_pu" cx="50%" cy="50%" r="100%" fx="50%" fy="50%"> <stop id="fade_pu_0" offset="0%" /> <stop id="fade_pu_100" offset="100%" /> </radialGradient> </defs> <g id="components" transform="translate(200,100)"> <rect id="PT0" class="pu" x="0" y="45" width="100" height="150" style="fill:url(#fade_pu)" /> <rect id="PT1" class="pu" x="120" y="45" width="100" height="150" style="fill:url(#fade_pu)" /> <rect id="PT2" class="pu" x="240" y="45" width="100" height="150" style="fill:url(#fade_pu)" /> </g> </svg> |
Ik moet nu dus expliciet voor iedere rectangle aangeven dat hij een radialGradient fill moet gebruiken die in de <defs> sectie is gedefinieerd. Het zou handiger zijn als ik het fill attribute kon definieren in de CSS file (style.css) zodat alle rectangles van dezelfde class automatisch deze fill krijgen, maar helaas kent CSS geen gradient fills.
Cascading Stylesheet: style.css
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| rect.pu { stroke: black; stroke-width: 1; /* fill: url(test.svg#fade_pu) */ } #fade_pu_0 { stop-color: white; stop-opacity: 0; } #fade_pu_100 { stop-color: gray; stop-opacity: 1; } |
De radialGradient die wordt gebruikt als fill voor de 3 rectangles kan zelf niet in CSS worden gedefinieerd, omdat CSS geen gradients kent. Daarom wilde ik de <defs> sectie uit de file main.svg in een aparte svg file test.svg zetten en vanuit de style sheet daar naar refereren (zie regel 5 van style.css).
Dit werkt niet onder Firefox; doe ik iets fout, of ondersteunt Firefox dit niet?