問題を解決するために何かを見逃した場合は申し訳ありませんが、問題に適応せずに多くの解決策を読んで試しました。
1つのページに複数のグラフ(chart.jsから)がありますが、それらのグラフをレスポンシブにすることはできません。
responsive: true,
キャンバスの幅と高さを拡大したときの反応が最高でしたが、デスクトップバージョンでは画面全体にチャートが表示されました。
これは fiddle.net です
助けてくれる人はいますか?どうもありがとうございました。
答えは:
1。キャンバスの周りにdivを追加
例えば :
<div class="wrapper">
<canvas width="600" height="250"></canvas>
</div>
2。CSSのdivクラスに高さを追加
.wrapper {
height: 500px !important;
}
(レスポンシブレンダリングを希望する高さに調整します)
Bootstrapにはサンプルページがあり、このページにはレスポンシブなチャート(chartjsを使用)があります。したがって、ダウンロード可能なURLをポイントすると、レスポンシブチャートが作成されます。
私がフィドルで見たように、あなたはキャンバスタグに固定の高さと幅を与えました。
キャンバスタグの高さと幅の両方を70%または80%にするようにしてください。これで問題が解決する場合があります。
100%が完全に大きなチャートを提供する場合がありますが、70から80に制限するようにしてください。
CSSを使用してコンテナdivをレスポンシブにし、svg width: 100%
およびheight:100%
更新されたフィドル fiddle.net
私はこれが古い投稿であることを知っていますが、最近それに出会いました。
確認してください https://www.chartjs.org/docs/latest/general/responsive.html#important-note
基本的には、
キャンバスのサイズが変更されたことを検出することは、キャンバス要素から直接行うことはできません。 Chart.jsは親コンテナを使用して、キャンバスのレンダリングと表示サイズを更新します。ただし、この方法では、コンテナを比較的配置し、チャートキャンバス専用にする必要があります。その後、コンテナサイズの相対値を設定することにより、応答性を実現できます。
上記のコードでチャートの高さを正しく変更するには、maintainAspectRatioオプションもfalseに設定する必要があることに注意してください。
例えば、
<div class="chart-container" style="position: relative; height:40vh; width:80vw">
<canvas id="chart"></canvas>
</div>
同様の状況があり、 chartjsのドキュメント に基づいてresponsive: true
はoptions
セクションにありますが、問題は解決しませんでした!最後に、canvas
の親要素がflexbox
であることに気付きました!それを取り除くことで私の問題は解決しました!
P.S公式ドキュメントによると、キャンバスタグにスタイルまたは幅/高さの属性を追加することは無効です!以下はドキュメントの抜粋です
次の例は機能しません。
<canvas height="40vh" width="80vw">
:値が無効です。キャンバスのサイズは変更されません(例)<canvas style="height:40vh; width:80vw">
:無効な動作です。キャンバスのサイズは変更されますが、ぼやけます
私の答えが誰かを助けることを願っています!
Chart.jsを使用すると、css(height/width)を操作するdivを含む必要があることがわかりました。これにより、応答性が向上しますが、完全ではありません。キャンバスはパーセンテージで含まれる幅に完全に調整されないため、含まれるdivの下部/側面に多くの空白が残る可能性があるため、特に幅にはいくつかの制約があります。完全ではありませんが、機能します。
そのため、解決策として、各チャートに含まれるdivを作成し、このdivのCSSスタイルを使用して配置します:)
メディアクエリを使用してwidth
およびheight
を設定できないため、以下のようにモバイルまたはデスクトップを検出して幅と高さの属性を設定します
[〜#〜] html [〜#〜]
<canvas id="chart" width="{{width}}" height="{{height}}"></canvas>
javascript-angularjs
$scope.width = '';
$scope.height = '120';
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
$scope.width = '100';
$scope.height = '100';
}
高さと幅の属性を指定する代わりに、スタイルで設定します。
の代わりに
<canvas id="myChart" width="400" height="100"></canvas>
これを行う
<canvas id="myChart" style="height: 20rem"></canvas>