私は d3.js を使用して JavaScript チャートを作成しており、スタイリングと動作を可能な限り分離しようとしています。これを行うために、.style() メソッドを使用するのではなく、.attr('class','...') メソッドを使用して CSS クラスを適用しようとしています。ほとんどの場合、すべてがうまく機能します。ただし、CSS クラスを適用して一部のテキスト要素のストロークと塗りつぶしを設定しようとすると、うまくいきません。私が混乱している部分は、.attr() を使用して css クラスを適用する同じプロセスがグラフのバーに対して正常に機能し、正確な方法を使用する場合にテキストをどのようにスタイリングしても問題がないという事実です。同じ属性ですが、代わりに .style() メソッドを使用してそれぞれを個別に設定します。さらに奇妙なことに、.attr() メソッドを使用して、css を介して透過性クラスを問題なく適用できます。私がここに欠けているものはありますか?
問題の css クラスは次のとおりです。
.black {
fill: rgb(41,41,41);
stroke: rgb(41,41,41);
}
.red {
fill: rgb(238,77,77);
stroke: rgb(238,77,77);
color: rgb(238,77,77);
}
.blue {
fill: rgb(76,179,230);
stroke: rgb(76,179,230);
}
.white {
fill: rgb(255,255,255);
stroke: rgb(255,255,255);
}
これは、何らかの理由で機能しないコードです。
var severityText = chart.selectAll(".severity")
.data(array)
.enter().append("text")
.attr("x", function (d, i) { return x(i) + barWidth / 2 - (5.0/8)*barNumberSize; })
.attr("y", function (d, i) { return bubbleY(maxBubbleValue - d['severity']) - bubbleRadius / 2 - bubbleNumberSize*(1.0/4) })
.style("font-size", bubbleNumberSize.toString() + "px")
//this line isn't doing its job
.attr('class','white')
.attr('class','transparent')
.text(function (d, i) { return d['severity'].toString() });
このコードは次のことを行います。
var severityText = chart.selectAll(".severity")
.data(array)
.enter().append("text")
.attr("x", function (d, i) { return x(i) + barWidth / 2 - (5.0/8)*barNumberSize; })
.attr("y", function (d, i) { return bubbleY(maxBubbleValue - d['severity']) - bubbleRadius / 2 - bubbleNumberSize*(1.0/4) })
.style("font-size", bubbleNumberSize.toString() + "px")
//works fine when written in this format.....why?
.style('fill',white)
.style('stroke',white)
.attr('class','transparent')
.text(function (d, i) { return d['severity'].toString() });