D3.jsでレスポンシブ・レイアウトを
最近はウェブの閲覧環境が多様化し、PCとモバイルでは画面解像度が全くことなります。
D3.jsでなにかを作る際、ワンソースで多様な閲覧環境に対応するための、レスポンシブ・レイアウト対応方法の一つを以下に紹介します。
D3.jsはSVGを使っている
そこで、SVGが標準でサポートしている属性を使います。
個別の要素の大きさをすべて調整するのは大変なので、一番親要素のSVGの大きさを変更することで対応することにします。
viewBoxとpreserveAspectRatioの設定
viewBoxとpreserveAspectRatioという属性の設定をします。
これはSVGが拡大表示されたときの振る舞いを決定するものです。
|
|
viewBoxの値は、“0 0 width height” とします(widthとheightは整数)。
preserveAspectRatioの値は xMidYMid とします。これでviewBoxのX/Y中央値を、ビューポートのX/Yの中央値に揃えることになります。
ウインドウサイズが変更した際に、SVGの大きさも変更する
|
|
svgの親要素の横幅を取得し、SVGをその大きさに合わせます。
縦幅は独自には取得せず、横幅との比率で処理をします。