Sto giocando con un gradiente di gradazione SVG come modo per "troncare" le stringhe di testo lungo in un grafico d3.js.SVG: perché i CSS esterni sovrascrivono lo stile in linea per il testo?
Sembra che uno stile css esterno per il riempimento sovrascriva lo stile di riempimento sfumato in linea in SVG ... è sempre così? Come posso applicare il riempimento sfumato?
In questo caso di test ho definito un gradiente lineare nelle svg defs e quindi si applica il riempimento del gradiente a due gruppi di testo. http://jsfiddle.net/rolfsf/uX2kH/3/
var labelColWidth = 200;
var svg = d3.select('#test').append('svg')
.attr('width', 500)
.attr('height', 500);
var defs = svg.append('svg:defs');
var textgradient = defs.append('svg:linearGradient')
.attr('gradientUnits', 'userSpaceOnUse')
.attr('x1', 0).attr('y1', 0).attr('x2', 40).attr('y2', 0)
.attr('id', 'theGradient')
.attr('gradientTransform', 'translate(' + (labelColWidth - 40) + ')');
textgradient.append('svg:stop').attr('offset', '0%').attr('style', 'stop-color:rgb(0,0,0);stop-opacity:1')
textgradient.append('svg:stop').attr('offset', '100%').attr('style', 'stop-color:rgb(0,0,0);stop-opacity:0');
var data = [[0, "xyzzy xyzzy"], [1, "xyzzy xyzzy xyzzy xyzzy xyzzy"], [2, "xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy"], [3, "xyzzy xyzzy xyzzy"], [4, "xyzzy xyzzy"], [5, "xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy xyzzy"]];
var testGroup = svg.append('g')
.attr('transform', 'translate(50, 100)');
var testGroup2 = svg.append('g')
.attr('transform', 'translate(50, 250)')
.attr('class', 'group2');
testGroup.selectAll('text').data(data)
.enter().append('svg:text')
.attr('fill', 'url(#theGradient)')
.attr('x', 0)
.attr('y', function(d, i) { return (i+1) * 20; })
.text(function(d, i) { return d[1]; });
testGroup2.selectAll('text').data(data)
.enter().append('svg:text')
.attr('fill', 'url(#theGradient)')
.attr('x', 0)
.attr('y', function(d, i) { return (i+1) * 20; })
.text(function(d, i) { return d[1]; });
poi nel CSS, definisco un riempimento per il testo .group2
.group2 text {
fill: #000;
}
il primo gruppo ha il riempimento sfumato, il secondo gruppo non lo fa.
Non dovrebbe lo stile in linea avere la precedenza?
Grazie!
Hmmm ...quindi, come si applica un riempimento sfumato che sostituisce qualsiasi riempimento di testo predefinito? – rolfsf
'style =" fill: url (#myGradientId) "' dovrebbe fare il trucco. –