D3.jsで図形の属性はattr()メソッドでしました。
図形のスタイルはどう指定すればいいのか。
答えあ、d3.jsではスタイルを設定するためのスタイル()メソッドが
用意されています。第1引数にスタイルのプロパティ名を指定し、
第2引数に設定値を指定します。たとえば、
stroke-widthプロパティに10を設定する場合は
style("stroke-width",10)と指定します。単位を付けて設定する場合は、
style("stroke-width","10px")と書き、数値ではなく文字列を書きます。
サンプルコードの実行結果はこちら
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 27 28 29 30 31 32 |
<!DOCTYPE html> <head> <meta charset="utf-8"> <title>図形のスタイルを指定する</title> <script src="../js/d3.js"></script> <style> svg{ width:320px; height:240px; border:2px solid black; } rect{fill:green;} </style> </head> <body> <h2>D3.jsでスタイルを操作してみる</h2> <svg> <rect x="0" y="20" width="100" height="40" id="rect1" /> </svg> <h2>クラス名を付して複数のrect要素のスタイル変更</h2> <svg> <rect x="120" y="20" width="20" height="20" class="rect2" /> <rect x="120" y="45" width="20" height="20" class="rect2" /> <rect x="120" y="70" width="20" height="20" class="rect2" /> <rect x="120" y="95" width="20" height="20" class="rect2" /> </svg> <script src="test.js"></script> </body> </html> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
d3.select("#rect1") .attr("x" ,"20px") .attr("y" ,"40px") .attr("width" ,"50px") .attr("height","80px") .style("fill","blue") .style("stroke","yellow"); /* 複数のclass属性値.rect2を変更する場合は selectAll()メソッドを使う */ d3.selectAll(".rect2") .style("fill","yellow") .style("stroke","blue"); |
スタイルの設定はCSSで行う
ウェブではプログラムからスタイルを直接操作するのは、
あまりお勧めしません。プログラム内にデザインの変更する処理が
内包されると、デザインを変更する際、プログラムの修正が
必要になるからです。また、デザインとコーディングが分離できないので
プログラマーの負担も増えます。これを避けるのであれば、
プログラムのコードのなからっからデザイン部分を極力
分離させた方が良いです。
D3.jsではどうすればいいのか。
予めCSSクラス名を使って表示するデザイン(フォントとか色とか)を
用意して、attr()メソッドを使ってCSSクラス名を付すようにします、
こうすれば色やフォントを変えたいとき、プログラムの修正は不要で
CSSのみを変更すればいいです。
attr()メソッドでスタイルを一括指定する
attrメソッドを使いスタイルを一括します
サンプルコードの実行結果はこちら
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 27 28 29 |
<!DOCTYPE html> <head> <meta charset="utf-8"> <title>attr()メソッドで一括指定</title> <script src="../js/d3.js"></script> <style> svg{ width:320px; height:240px; border:2px solid black; } rect{fill:green;} </style> </head> <body> <h2>attr()メソッドでスタイルを一括指定してみる</h2> <svg> <rect x="120" y="20" width="20" height="20" class="rect2" /> <rect x="120" y="45" width="20" height="20" class="rect2" /> <rect x="120" y="70" width="20" height="20" class="rect2" /> <rect x="120" y="95" width="20" height="20" class="rect2" /> </svg> <script src="test.js"></script> </body> </html> |
1 2 |
d3.selectAll(".rect2") .attr("style","fill:red;stroke:green;"); |